WHERE句は、SQLにおける予約語の1つである。データ操作言語 (DML) と共に使用し、DMLが操作する行を限定する役割を持つ。
WHERE句の指定は必須ではないが、データを操作する命令と一緒に使用することで対象を限定することができる。
具体的には、SELECT, INSERT, UPDATE, DELETE の各命令で操作対象の行を限定することができる[1]。
WHERE はデータ操作言語 (DML) と共に使用される。一般的な構文は以下のようになる。
SQL-DML命令
FROM テーブル名
WHERE 条件
WHERE の後に記述された条件が真のとき DML の操作(抽出・削除など)の対象となる。条件が偽または不明 (NULL) のとき、操作の対象とならない。
次のクエリーは、mytable テーブルの mynumber が100より大きいものを抽出する。
SELECT *
FROM mytable
WHERE mynumber > 100
次の DELETE文は、mytable テーブルの mynumber に値が入っていないか、100が入っているものを削除する。
DELETE
FROM mytable
WHERE mynumber IS NULL OR mycol = 100
単純な条件文は、演算子の =
, <>
, >
, >=
, <
, <=
, IN
, BETWEEN
, LIKE
, IS NULL
or IS NOT NULL
を使用する。
条件式は必要に応じてかっこで囲むことができる。また、複数の条件文を AND や OR で接続することができる。この優先順位を明示するためにもかっこは有用である。かっこがない場合、AND 演算子が OR 演算子に優先される。
以下の例は mytable テーブルにある「mynumber が100より大きい」かつ「『アイテム』が『ハンマー』」であるデータを削除する。
DELETE
FROM mytable
WHERE mynumber > 100 AND アイテム = 'ハンマー'
IN
は、直後に記述したデータ群の中に一致する値があるかどうかを判断する。
SELECT ename WHERE ename IN ('値1', '値2', ...)
この文の場合、ename がかっこの中のいずれかと一致すれば真となる。例えば値が2つの場合は以下の文と同等になる。
SELECT ename WHERE ename='値1' OR ename='値2'
後者の書き方の場合複数の列を判定に含めることができるが IN では単一の項目しか対象にできない。一方、候補の件数多い場合は IN を使用した方が簡潔に書くことができる。
BETWEEN
は、指定された範囲内に値があるかを判断する。
SELECT ename WHERE ename BETWEEN '値1' AND '値2'
以下の例は収入が「500000以上1000000以下」のデータを抽出する。
SELECT 収入 from emp WHERE 収入 BETWEEN 500000 AND 1000000
LIKE
は条件に合う文字列を検索する。
SELECT ename FROM emp WHERE ename LIKE 'S%';
SELECT ename FROM emp WHERE ename LIKE '%S';
SELECT ename FROM emp WHERE ename LIKE '%S%';
SELECT ename FROM emp WHERE ename LIKE '%A_E%';
SELECT ename FROM emp WHERE ename LIKE '[a-zA-Z0-9_]%';
SQL を使用する場合、LIKE演算子は索引によるパフォーマンスを無視することを認識する必要がある。可能ならば '=' や '<>' などの演算子を使用した方がパフォーマンスがいい。また、データベースソフトによって文字の扱い(大文字と小文字など)が違うことにも注意しないといけない。