3.

SQL

編集

SQLとは、データベースに対して命令をするための言語です。テーブル定義、データの登録・更新・取得、トランザクション制御まで、リレーショナルデータベース (RDB) を扱うほぼすべての操作を SQL で行います。

データベース製品ごとに細かい方言 (T-SQL/PL/SQL/PL/pgSQL 等) はありますが、基本構文は ANSI SQL として標準化されています。

子ページから SQL の種類を選択してください。

本ページの子ページ

SQLの分類

分類用途代表的な構文
DDL (Data Definition Language)オブジェクト定義CREATE TABLEALTER TABLEDROP TABLE
DML (Data Manipulation Language)データ操作SELECTINSERTUPDATEDELETE
DCL (Data Control Language)権限制御GRANTREVOKE
TCL (Transaction Control Language)トランザクションCOMMITROLLBACKSAVEPOINT

最も基本的な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方言

RDBMS手続き型SQL備考
MySQL / MariaDBストアドプロシージャ (SQL/PSM相当)Web系で広く採用
PostgreSQLPL/pgSQL標準SQLへの準拠度が高い
OraclePL/SQL大規模基幹系で採用
SQLite限定的 (トリガのみ)埋め込みDB
SQL ServerT-SQLMicrosoft製、企業AD環境で多い
DB2SQL PLIBM製

パフォーマンス上のポイント

  • 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; で先に件数確認

関連

編集
Post Share
子ページ
  1. DDL
  2. DML
  3. トランザクション制御
  4. データディクショナリ
  5. 動的パフォーマンスビュー
  6. 関数
同階層のページ
  1. 環境構築
  2. データベースの構成
  3. SQL
  4. DBオブジェクト
  5. 表領域
  6. 管理ツール
  7. パフォーマンス関連