SQL用語集
SELECT・JOIN・正規化など、SQL・データベース学習でよく出てくる基礎用語40個をカテゴリ別にまとめました。
基本構文
SELECT
データベースからデータを取得するための基本命令。「どのカラムを」「どのテーブルから」取得するかを指定する。SQLの中でもっとも使用頻度の高い構文。
FROM句
SELECT文でどのテーブルからデータを取得するかを指定する部分。複数テーブルを指定してJOINすることもできる。
AS(エイリアス)
カラム名やテーブル名に一時的な別名をつける構文。長いテーブル名を短くしたり、集計結果に日本語の見出しをつけたりする際に使う。
DISTINCT
取得結果から重複する行を除いて表示する。「このカラムにはどんな値の種類があるか」を調べるときによく使われる。
絞り込み・並び替え
WHERE句
特定の条件に一致する行だけを取得するための絞り込み条件を指定する。SELECT・UPDATE・DELETEのいずれでも使用でき、SQLの中核をなす機能。
LIKE
文字列のあいまい検索を行う演算子。「%」は0文字以上の任意の文字列、「_」は任意の1文字を表すワイルドカードとして使う。
IN
複数の値のいずれかに一致するデータを取得する演算子。ORを何度も並べる代わりにすっきり書ける。サブクエリと組み合わせることも多い。
BETWEEN
指定した範囲内の値を取得する演算子。「BETWEEN A AND B」はA以上B以下(両端を含む)を意味する。
AND / OR
複数の条件を組み合わせる論理演算子。ANDは全条件を満たす行、ORはいずれかの条件を満たす行を取得する。ANDの方が優先度が高いため、混在させる場合は括弧で明示するのが安全。
ORDER BY
取得結果を特定のカラムで並び替える構文。ASC(昇順・デフォルト)とDESC(降順)を指定できる。ORDER BYを指定しない場合、取得順序は保証されない。
LIMIT
取得する行数の上限を指定する構文。ランキング表示や「先頭N件だけ確認したい」場合に使う。多くの場合ORDER BYと組み合わせて使用する。
NULL
「値が存在しない・不明である」ことを表す特別な状態。0や空文字とは異なる。NULLかどうかの判定には「=」ではなく「IS NULL」「IS NOT NULL」を使う必要がある。
結合(JOIN)
JOIN
複数のテーブルを関連するカラムで結合してデータを取得する構文。現実のデータは複数テーブルに分かれて格納されていることが多く、実務で頻繁に使用される。
INNER JOIN
内部結合。両方のテーブルに一致するデータのみを取得する。単に「JOIN」と書いた場合はINNER JOINを意味する。
LEFT JOIN
左外部結合。左側のテーブルの全データと、右側テーブルの一致データを取得する。一致しない場合は右側のカラムがNULLになる。「注文がないユーザーも含めて全員表示したい」場合などに使う。
ON句
JOINする際に、どのカラム同士を一致条件として結合するかを指定する部分。ON条件を間違えると意図しない大量データ(カルテシアン積)が返ることがある。
テーブルエイリアス
テーブル名に短い別名をつけること。複数テーブルをJOINするクエリで、どのテーブルのカラムかを明示しつつ読みやすくするために使う。
集計・グループ化
GROUP BY
指定したカラムの値ごとにデータをグループ化する構文。集計関数と組み合わせて「都市ごとの人数」「カテゴリごとの平均価格」のような集計を行う。
HAVING
GROUP BYでグループ化した後の結果に対して条件を指定する構文。WHERE句はグループ化前の行に対する条件、HAVINGはグループ化後の集計結果に対する条件という違いがある。
COUNT
行数を数える集計関数。COUNT(*)は全行数、COUNT(カラム名)はそのカラムがNULLでない行の数を数える。
SUM
指定したカラムの数値を合計する集計関数。NULLの行は合計の対象から自動的に除外される。
AVG
指定したカラムの数値の平均を求める集計関数。NULLの行は平均の計算対象から除外される。
MAX / MIN
指定したカラムの最大値(MAX)・最小値(MIN)を求める集計関数。数値だけでなく日付や文字列にも使用できる。
サブクエリ
SQL文の中に別のSQL文を埋め込む技術。内側のクエリの結果を外側のクエリで利用する。「平均より高い商品」のような集計結果との比較によく使われる。
データ操作
DML(データ操作言語)
データを操作するSQL文の総称。INSERT(追加)・UPDATE(更新)・DELETE(削除)の3つが代表的。
INSERT
テーブルに新しい行を追加する構文。カラム名のリストと値のリストの順番を一致させる必要がある。
UPDATE
既存のデータを更新する構文。WHERE句を省略すると全行が更新されてしまうため、実行前にSELECTで対象行を確認する習慣が重要。
DELETE
既存のデータを削除する構文。UPDATEと同様、WHERE句を忘れると全データが削除されるため注意が必要。
トランザクション
複数のSQL文を1つのまとまりとして扱う仕組み。BEGINで開始し、問題なければCOMMITで確定、問題があればROLLBACKで取り消す。途中でエラーが起きても中途半端な状態を残さないようにできる。
テーブル設計
主キー(Primary Key)
テーブル内の各行を一意に識別するためのカラム(または複数カラムの組み合わせ)。重複や NULL を許さない値が割り当てられる。
外部キー(Foreign Key)
他のテーブルの主キーを参照するカラム。テーブル間の関連付けに使われ、データの整合性を保つ役割を持つ。
正規化
データの重複や矛盾をなくすためにテーブル構造を整理する設計手法。第1〜第3正規形が実務上の目安とされる。正規化しすぎるとJOINが増えるトレードオフがある。
中間テーブル
多対多(N:M)の関係を表現するために間に挟むテーブル。例えば「注文」と「商品」は多対多の関係にあり、order_productsのような中間テーブルで「どの注文にどの商品が何個含まれるか」を管理する。
多対多(N:M)
一方のレコードが他方の複数レコードに対応し、その逆も成り立つ関係。テーブル同士を直接結びつけられないため、中間テーブルを介して表現する。
INDEX
検索を高速化するための仕組み。本の索引と同じ役割で、INDEXがないと該当データを探すために全行を確認する「フルスキャン」が発生する。書き込み負荷とディスク容量というトレードオフがある。
その他の重要概念
RDBMS(リレーショナルデータベース管理システム)
テーブル形式でデータを管理するデータベース管理システムの総称。PostgreSQL・MySQL・SQLiteなどが代表例。テーブル同士を関連付けて扱えることが特徴。
スキーマ
データベースの構造(テーブル・カラム・型・制約など)の定義のこと。「どんなテーブルが、どんなカラムを持つか」という設計図にあたる。
ER図(エンティティ・リレーションシップ図)
テーブル同士の関係性を図で表したもの。どのテーブルがどのテーブルを参照しているか(1対多、多対多など)を視覚的に把握できる。
カラム(列)
テーブルの縦方向の1項目。例えばusersテーブルであればid・name・emailなどがカラムにあたる。フィールドと呼ばれることもある。
レコード(行)
テーブルの横方向の1件分のデータ。例えばusersテーブルであれば1人のユーザー情報がレコードにあたる。ロウ(row)と呼ばれることもある。