it

DDLとDMLの違いは?意味とSQL文の使い分けも解説!(CREATE:DROP:INSERT:UPDATE:データベース操作など)

当サイトでは記事内に広告を含みます

データベースを操作するSQLには、大きく分けて「DDL」と「DML」という2種類の命令グループが存在します。どちらもデータベースを扱うエンジニアにとって欠かせない知識ですが、その役割はまったく異なります。

「CREATE文やDROP文はどちらに分類されるの?」「INSERTやUPDATEとの違いは?」といった疑問を持つ方も多いでしょう。本記事では、DDLとDMLの違いを基礎からわかりやすく解説し、それぞれのSQL文の種類と使い分けもあわせて説明していきます。

 

 

DDLとDMLの違いは「構造を操作するか・データを操作するか」

それではまず、DDLとDMLの本質的な違いについて解説していきます。

DDLとDMLは、どちらもSQLに含まれる命令の分類ですが、操作対象がまったく異なります。DDLはデータベースの「構造」を操作するSQLであり、DMLはデータベースの「中身(データ)」を操作するSQLです。

この違いを理解することで、どのSQL文をどのような場面で使うべきかが明確になります。

DDL(Data Definition Language):テーブルやスキーマなどの「構造定義」を扱う言語。CREATE・DROP・ALTER・TRUNCATEなどが該当。

DML(Data Manipulation Language):テーブル内の「データ」を扱う言語。SELECT・INSERT・UPDATE・DELETEなどが該当。

 

DDL(データ定義言語)とは何か

DDLとは「Data Definition Language」の略で、日本語ではデータ定義言語と呼ばれます。データベースの構造そのものを定義・変更・削除するための命令群です。

たとえば、新しいテーブルを作成したり、既存のテーブルを削除したりする操作がDDLにあたります。テーブルの「骨格」を設計する作業と捉えるとイメージしやすいでしょう。

DDL文を実行すると、多くのデータベースでは自動的にコミット(変更確定)が行われるという特徴もあります。

 

DML(データ操作言語)とは何か

DMLとは「Data Manipulation Language」の略で、日本語ではデータ操作言語と呼ばれます。テーブルの中に存在するデータそのものを検索・追加・更新・削除するための命令群です。

「アボカドの在庫数を更新したい」「ゴリラという名前のユーザーを追加したい」といった、日々の業務でよく発生するデータ操作に使われます。

DMLはトランザクション制御(COMMITやROLLBACK)と組み合わせて使えるため、操作ミスを取り消せるという利点があります。

 

DDLとDMLを比較した一覧表

DDLとDMLの違いを視覚的に整理してみましょう。

項目 DDL DML
正式名称 Data Definition Language Data Manipulation Language
操作対象 テーブル・スキーマなどの構造 テーブル内のデータ
主なSQL文 CREATE、DROP、ALTER、TRUNCATE SELECT、INSERT、UPDATE、DELETE
自動コミット あり(多くのDBで) なし(明示的なCOMMITが必要)
ロールバック 基本的に不可 可能

この表を参考にすると、DDLは「設計・構築フェーズ」、DMLは「運用・データ管理フェーズ」でよく使われることがわかります。

 

 

DDLの主なSQL文と使い方

続いては、DDLに含まれる主なSQL文の種類と使い方を確認していきます。

DDLには、テーブルの作成・削除・変更など、データベースの構造を操作するためのSQL文が揃っています。それぞれの役割をしっかり把握しておきましょう。

 

CREATE文:テーブルや構造を新規作成する

CREATE文は、新しいテーブルやデータベースを作成するためのDDL文です。テーブルの列名・データ型・制約などを定義して実行します。

以下は、商品テーブルを作成するサンプルコードです。


-- 商品テーブルの作成
CREATE TABLE products (
    product_id   INT          PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price        INT          NOT NULL,
    stock        INT          DEFAULT 0
);

# 出力結果:テーブル「products」が正常に作成される

CREATE文ではテーブルだけでなく、データベース自体(CREATE DATABASE)やビュー(CREATE VIEW)なども作成できます。

 

DROP文:テーブルや構造を削除する

DROP文は、テーブルやデータベース全体を削除するDDL文です。テーブルの構造ごとすべてのデータが削除されるため、実行には十分な注意が必要です。


-- 商品テーブルを削除する
DROP TABLE products;

# 出力結果:テーブル「products」とその全データが削除される

DROP文はロールバックできないケースがほとんどです。誤って実行してしまうとデータの復元が困難になるため、本番環境での使用には細心の注意を払いましょう。

 

ALTER文・TRUNCATE文の役割

ALTER文は、既存のテーブルの構造を変更するDDL文です。列の追加・削除・データ型変更などに使います。


-- 商品テーブルに「category」列を追加する
ALTER TABLE products ADD COLUMN category VARCHAR(50);

# 出力結果:「category」列がproductsテーブルに追加される

一方、TRUNCATE文はテーブルの構造は残しつつ、全データを一括削除するDDL文です。DELETE文と似ていますが、TRUNCATEはDDLに分類され、高速に動作するという違いがあります。


-- 商品テーブルの全データを削除(構造は保持)
TRUNCATE TABLE products;

# 出力結果:productsテーブルのデータがすべて削除される(テーブルは残る)

 

 

DMLの主なSQL文と使い方

続いては、DMLに含まれる主なSQL文について確認していきます。

DMLはデータの日常的な操作に使われるSQL文の集まりです。SELECT・INSERT・UPDATE・DELETEの4つが代表的で、データベースを利用するアプリケーション開発では欠かせない存在です。

 

INSERT文:データを新規追加する

INSERT文は、テーブルに新しいレコードを追加するDML文です。列名と値を対応させて記述します。


-- 商品テーブルにアボカドのデータを挿入する
INSERT INTO products (product_id, product_name, price, stock)
VALUES (1, 'アボカド', 200, 50);

# 出力結果:product_id=1、product_name='アボカド'のレコードが追加される

複数のレコードを一度に追加したい場合は、VALUESに複数の値セットをカンマ区切りで記述することも可能です。

 

UPDATE文:既存データを更新する

UPDATE文は、テーブル内の既存レコードを更新するDML文です。WHERE句で対象を絞り込まないと全レコードが更新されてしまうため、必ずWHERE句を指定する習慣をつけましょう。


-- アボカドの価格を250円に更新する
UPDATE products
SET price = 250
WHERE product_name = 'アボカド';

# 出力結果:product_name='アボカド'のpriceが250に更新される

 

SELECT文・DELETE文の使い方

SELECT文はデータを検索・取得するDML文で、最も頻繁に使われるSQL文のひとつです。


-- 在庫が30以上の商品を取得する
SELECT product_id, product_name, stock
FROM products
WHERE stock >= 30;

# 出力結果:stock>=30の商品レコードが一覧表示される

DELETE文は、テーブルから特定のレコードを削除するDML文です。TRUNCATEと異なりWHERE句で削除対象を絞れるため、部分的な削除が可能です。


-- ドラゴンフルーツのレコードを削除する
DELETE FROM products
WHERE product_name = 'ドラゴンフルーツ';

# 出力結果:product_name='ドラゴンフルーツ'のレコードが削除される

 

 

DDL・DML以外のSQL分類も知っておこう

続いては、DDLとDML以外にも存在するSQLの分類についても確認していきます。

SQLの命令はDDL・DMLだけでなく、他にもいくつかの分類が存在します。データベース操作の全体像を把握するために、あわせて理解しておくと役立ちます。

 

DCL(データ制御言語)とは

DCLとは「Data Control Language」の略で、データベースへのアクセス権限を制御するSQL文の分類です。

GRANTは権限を付与、REVOKEは権限を剥奪するためのSQL文です。複数のユーザーが利用するデータベースのセキュリティ管理に活用されます。

SQL文 役割 分類
GRANT アクセス権限の付与 DCL
REVOKE アクセス権限の剥奪 DCL
COMMIT トランザクションの確定 TCL
ROLLBACK トランザクションの取り消し TCL

 

TCL(トランザクション制御言語)とは

TCLとは「Transaction Control Language」の略で、トランザクションの開始・確定・取り消しを制御するSQL文の分類です。

COMMITで変更を確定し、ROLLBACKで変更を取り消すことができます。DMLと組み合わせて使うことで、データの整合性を保てます。

DMLによるデータ変更はCOMMITするまで確定しないため、ミスに気づいた時点でROLLBACKすれば元の状態に戻せます。DDLには自動コミットが適用されるDBが多いため、この「取り消せる」特性はDMLの大きな強みです。

 

SQLの全体的な分類まとめ

SQLの命令分類を整理すると、以下のようになります。

分類 正式名称 主なSQL文 目的
DDL データ定義言語 CREATE, DROP, ALTER, TRUNCATE 構造の定義・変更・削除
DML データ操作言語 SELECT, INSERT, UPDATE, DELETE データの検索・追加・更新・削除
DCL データ制御言語 GRANT, REVOKE アクセス権限の管理
TCL トランザクション制御言語 COMMIT, ROLLBACK, SAVEPOINT トランザクションの制御

データベース操作を体系的に学ぶ際は、この4分類を軸に整理するとスムーズに理解が進むでしょう。

 

 

まとめ

本記事では、DDLとDMLの違いについて、意味・主なSQL文・使い分けの観点から解説しました。

DDLはテーブルなどの「構造」を操作し、CREATE・DROP・ALTER・TRUNCATEが代表的なSQL文です。一方、DMLはテーブル内の「データ」を操作し、SELECT・INSERT・UPDATE・DELETEが中心となります。

また、権限管理を担うDCLやトランザクション制御を行うTCLも含め、SQLの全体像を把握することが、より確かなデータベース操作スキルにつながります。

それぞれの役割の違いをしっかり理解して、場面に応じたSQL文を使いこなしていきましょう。