SQLにおけるテーブルの作成と変更

SQLのデータ定義言語(DDL: Data Definition Language)は、データベースの構造やオブジェクト(テーブル、ビューなど)を作成、変更、削除するために使用されます。

1. テーブルの作成 (CREATE TABLE)

CREATE TABLE 文は、新しいテーブルをデータベース内に作成するために使用します。

CREATE TABLE テーブル名 (
    列名1 データ型 [DEFAULT ] [制約],
    列名2 データ型 [DEFAULT ] [制約],
    -- ...
    列名N データ型 [DEFAULT ] [制約],
    [テーブルレベル制約]
);

データ型

各列には、格納するデータの種類に応じたデータ型を指定します。

  • 文字型:
    • CHAR(size): 固定長文字列。指定した size の長さでデータを格納します。
    • VARCHAR(size): 可変長文字列。指定した size を上限として、実際のデータ長で格納します。
  • 数値型:
    • INT / INTEGER: 整数。
    • BIGINT: より大きな整数。
    • FLOAT / DOUBLE: 浮動小数点数。
  • 日付/時間型:
    • DATE: 日付(例: ‘YYYY-MM-DD’)。
    • TIME: 時刻(例: ‘HH:MM:SS’)。
    • DATETIME / TIMESTAMP: 日付と時刻。

制約 (Constraints)

列やテーブルに対して制約を設定することで、データの整合性を保ちます。

  • NOT NULL: その列に NULL 値(値がない状態)を許可しません。
  • UNIQUE: その列の値がテーブル内で一意であることを保証します。
  • PRIMARY KEY: 主キー制約。その列(または列の組み合わせ)がテーブルの各行を一意に識別し、NOT NULLUNIQUE の両方を満たします。
  • FOREIGN KEY: 外部キー制約。他のテーブルの主キーを参照し、テーブル間の関連性を定義します。参照整合性を保証します。
  • DEFAULT 値: 値が明示的に指定されなかった場合に、自動的に挿入されるデフォルト値を設定します。

サブクエリからのテーブル作成 (CREATE TABLE AS SELECT)

既存のテーブルやクエリの結果を基に、新しいテーブルを作成することもできます。

CREATE TABLE 新しいテーブル名 [(列名1, 列名2, ...)]
AS サブクエリ;

例: employees テーブルから department_id が10の従業員だけを抽出して、新しいテーブル department10_employees を作成します。

CREATE TABLE department10_employees AS
SELECT employee_id, first_name, last_name, email
FROM employees
WHERE department_id = 10;

ビューの作成 (CREATE VIEW)

ビューは、1つまたは複数のテーブル(または他のビュー)に基づいた仮想的なテーブルです。ビュー自体はデータを物理的に格納せず、参照元のテーブルのデータが変更されると、ビューの内容も自動的に反映されます。

CREATE VIEW ビュー名 [(列名1, 列名2, ...)]
AS サブクエリ;

例: products テーブルから、価格が1000以上の製品のみを表示するビュー expensive_products を作成します。

CREATE VIEW expensive_products AS
SELECT product_id, product_name, price
FROM products
WHERE price >= 1000;

ビューは、複雑なクエリを簡素化したり、特定のユーザーに表示するデータを制限したりするのに役立ちます。

2. テーブルの変更と削除

テーブル構造の変更 (ALTER TABLE)

ALTER TABLE 文は、既存のテーブルの構造を変更するために使用します。

  • 列の追加:
    ALTER TABLE テーブル名
    ADD 列名 データ型 [DEFAULT ] [制約];
    
  • 列の変更:
    ALTER TABLE テーブル名
    MODIFY 列名 データ型 [制約]; -- MySQL, Oracleなど
    -- または
    ALTER TABLE テーブル名
    ALTER COLUMN 列名 SET DATA TYPE データ型; -- PostgreSQLなど
    
  • 列の削除:
    ALTER TABLE テーブル名
    DROP COLUMN 列名;
    

テーブル名の変更 (RENAME TABLE)

テーブルの名前を変更します。

RENAME TABLE 旧テーブル名 TO 新テーブル名;

テーブルの削除 (DROP TABLE)

DROP TABLE 文は、データベースからテーブルとその中のすべてのデータを完全に削除します。

DROP TABLE テーブル名;

注意: DROP TABLE は元に戻せない操作なので、実行には十分な注意が必要です。