この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
更新日時:2026-08-07 17:13:40
タイトル: SQL
SEOタイトル: SQLとは|DDL・DMLとリレーショナルデータベース操作の基本
SQLとは、データベースに対して命令をするための言語です。テーブル定義、データの登録・更新・取得、トランザクション制御まで、リレーショナルデータベース (RDB) を扱うほぼすべての操作を SQL で行います。
データベース製品ごとに細かい方言 (T-SQL/PL/SQL/PL/pgSQL 等) はありますが、基本構文は ANSI SQL として標準化されています。
子ページから SQL の種類を選択してください。
本ページの子ページ
- DDL — テーブル等のオブジェクト定義 (CREATE / ALTER / DROP)
- DML — データ操作 (SELECT / INSERT / UPDATE / DELETE)
- トランザクション制御 — COMMIT / ROLLBACK / SAVEPOINT
- 関数 — 集約関数・文字列関数・日付関数など
- データディクショナリ — メタ情報を引くシステム表
- 動的パフォーマンスビュー — Oracle の
V$ 系ビュー等
SQLの分類
| 分類 | 用途 | 代表的な構文 |
| DDL (Data Definition Language) | オブジェクト定義 | CREATE TABLE、ALTER TABLE、DROP TABLE |
| DML (Data Manipulation Language) | データ操作 | SELECT、INSERT、UPDATE、DELETE |
| DCL (Data Control Language) | 権限制御 | GRANT、REVOKE |
| TCL (Transaction Control Language) | トランザクション | COMMIT、ROLLBACK、SAVEPOINT |
最も基本的なSELECT文
|
SELECT id, name, created_at
FROM users
WHERE deleted_at IS NULL
ORDER BY created_at DESC
LIMIT 10;
|
SELECTの典型的な構成要素
| 句 | 役割 |
SELECT | 取得する列を指定 |
FROM | 取得元のテーブル/結合元 |
JOIN (INNER/LEFT/RIGHT/FULL) | テーブル結合 |
WHERE | 行のフィルタ |
GROUP BY | 集約のキー |
HAVING | 集約後のフィルタ |
ORDER BY | 並び替え |
LIMIT / OFFSET | 取得件数の制限・ページング |
JOINの種類
| JOIN | 結果 |
| INNER JOIN | 両方に一致する行のみ |
| LEFT (OUTER) JOIN | 左側全件+右側は一致した行 (なければ NULL) |
| RIGHT (OUTER) JOIN | 右側全件+左側は一致した行 |
| FULL (OUTER) JOIN | どちらか片方にあれば全部 (MySQLは未対応、UNIONで代用) |
| CROSS JOIN | 直積 |
| SELF JOIN | 同じテーブルを別名で結合 |
主なRDBMSとSQL方言
パフォーマンス上のポイント
- EXPLAIN/実行計画で「フルスキャンしていないか」を確認する
- WHERE 句で使う列、結合キーにはインデックスを張る
- SELECT * は避け、必要な列だけを取る
- N+1 問題: アプリ側で N 回 SELECT するなら、JOIN/IN で 1回にまとめる
- COUNT(*) や OFFSET 大量は重い。キーセットページング (
WHERE id > ?) を検討
セキュリティ上の注意
- SQLインジェクション: 文字列連結ではなくプレースホルダ/プリペアドステートメントを使う
- アプリ用ユーザーには最小権限のみ付与 (DDL不要なら SELECT/INSERT/UPDATE/DELETE のみ等)
- 本番に対するUPDATE/DELETE は必ず WHERE 付きで。
BEGIN; ... ROLLBACK; で先に件数確認
関連