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
は元に戻せない操作なので、実行には十分な注意が必要です。