はじめに
SQLを学び始めると、SELECTやUPDATEのようにデータを扱う命令と、CREATEやALTERのようにテーブルの形を変える命令が出てきます。どちらもSQLで記述しますが、操作する対象と目的は同じではありません。
DML(Data Manipulation Language)は、主にテーブルに保存されているデータを取得・追加・更新・削除するための命令です。一方、DDL(Data Definition Language)は、テーブルなどのデータベース構造を作成・変更・削除するための命令です。この記事では、DMLとDDLの役割の違いと、どちらを使う場面なのかを具体例で整理します。
SQLにはDML・DDL以外の分類もありますが、本記事では「保存されているデータを扱う命令」と「データを入れる構造を定義する命令」の違いに範囲を絞ります。
DMLとDDLの違い
DMLとDDLの最も大きな違いは、操作する対象です。DMLはテーブル内のデータを扱い、DDLはテーブルなどの構造を扱います。
| 項目 | DML | DDL |
|---|---|---|
| 正式名称 | Data Manipulation Language | Data Definition Language |
| 主な役割 | データの取得・追加・更新・削除 | データベース構造の作成・変更・削除 |
| 主な対象 | テーブル内の行や値 | テーブル、列、インデックスなどの構造 |
| 代表的な命令 | SELECT、INSERT、UPDATE、DELETE | CREATE、ALTER、DROP |
| 例 | 顧客データを追加する | 顧客テーブルに列を追加する |
覚え方としては、DMLは「中に入っているデータを扱う」、DDLは「データを入れる器を扱う」と整理すると違いをつかみやすくなります。
なお、資料によってはSELECTをDQL(Data Query Language)としてDMLから分ける場合があります。本記事では、データを扱うSQL命令という観点からSELECTをDMLに含める整理で説明します。
DMLとは
DMLは、すでに存在するテーブルに対してデータを取得したり、行を追加・更新・削除したりするために使います。日常的なデータ検索や業務データの更新では、DMLを使う場面が多くなります。
代表的な命令は次の4つです。
SELECT:条件に合うデータを取得するINSERT:新しいデータを追加するUPDATE:既存のデータを更新するDELETE:既存のデータを削除する
例えば、顧客テーブルから特定の顧客を取得する場合はSELECTを使います。
SELECT name
FROM customers
WHERE id = 1;
顧客名を変更する場合はUPDATEを使います。
UPDATE customers
SET name = '山田 太郎'
WHERE id = 1;
どちらもテーブルの列構成そのものは変えず、保存されているデータを対象にしています。
DDLとは
DDLは、データを保存するための構造を定義するときに使います。新しいテーブルを作る、既存テーブルへ列を追加する、不要なテーブルを削除するといった操作が代表例です。
主な命令は次の3つです。
CREATE:テーブルなどを新しく作成するALTER:既存の構造を変更するDROP:テーブルなどの構造を削除する
例えば、新しい顧客テーブルを作成する場合はCREATE TABLEを使います。
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100)
);
既存の顧客テーブルへメールアドレス列を追加する場合はALTER TABLEを使います。
ALTER TABLE customers
ADD COLUMN email VARCHAR(255);
DDLは1件のデータだけではなく、データを保存する構造そのものへ影響します。そのため、既存システムで実行するときは、変更対象と影響範囲を確認してから操作することが重要です。
DMLとDDLを具体例で使い分ける
DMLとDDLのどちらを使うか迷ったときは、「変更したいのはデータか、構造か」を確認します。
顧客管理を例にすると、次のように分けられます。
- 顧客を検索する →
SELECT:DML - 新しい顧客を登録する →
INSERT:DML - 顧客の電話番号を変更する →
UPDATE:DML - 顧客テーブルにメールアドレス列を追加する →
ALTER TABLE:DDL - 新しい履歴テーブルを作る →
CREATE TABLE:DDL - 不要になったテーブル自体を削除する →
DROP TABLE:DDL
例えば「顧客のメールアドレスを変更したい」のであれば、既存行の値を変えるためDMLです。一方、「これまでメールアドレスを保存する列がなかったので追加したい」のであれば、テーブル構造を変えるためDDLです。
このように、同じ顧客データを扱う作業でも、既存データの中身を操作するのか、保存する構造を変更するのかによって使用するSQLの種類が変わります。
DMLとDDLを混同しやすい例
特に混同しやすいのが、DELETEとDROPです。どちらも「削除する」命令ですが、削除対象が異なります。
DELETEはDMLで、テーブルを残したまま行を削除します。条件を指定すれば、特定の行だけを削除できます。
DELETE FROM customers
WHERE id = 1;
一方、DROP TABLEはDDLで、テーブルそのものを削除します。
DROP TABLE customers;
「データを消す」のか「データを入れる構造そのものを消す」のかを区別すると、DMLとDDLの違いを判断しやすくなります。
まとめ
DMLとDDLは、どちらもSQLの命令ですが役割が異なります。DMLはテーブル内のデータを扱い、DDLはデータを保存する構造を扱います。
SELECT・INSERT・UPDATE・DELETEは、データの取得や変更に使う代表的なDMLです。CREATE・ALTER・DROPは、テーブルなどの構造を作成・変更・削除する代表的なDDLです。
迷ったときは、「操作したいのは保存されているデータか、それともテーブルなどの構造か」を確認してください。この違いを押さえることで、SQLの各命令が何を対象にしているのかを整理しやすくなります。