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 NULLとUNIQUEの両方を満たします。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 は元に戻せない操作なので、実行には十分な注意が必要です。