SQL基礎の基礎の基礎〜WHERE句での絞込〜
SELECT文ではほとんどのケースでWHERE句を使用します。 つまり WHERE句が使えなければ、SELECT文は使えないことになるので、 まとめてみたいと思います。
WHERE句での絞込
WHEREは処理の対象を絞り込む場合に使用します。 SQLの修飾語のなかで1番利用するのがWHEREです。
WHERE句の基本
- SELECT、UPDATE、DELETE文で使用する。INSERTでは使用できない
- WHEREの後ろに条件式を記述する
- SELECT、UPDATE、DELETE文でWHEREを指定しない場合は全ての行が対象になる
SELECT 列名,列名,... FROM テーブル名 WHERE 条件式
条件式の基本構文
条件式に使える比較演算子です。
比較演算子 | 意味 |
---|---|
= | 左右の値が等しい |
< | 左は右より小さい |
> | 左は右より大きい |
<= | 左は右の値以下 |
>= | 左は右の値以上 |
<> | 左右の値が等しくない |
!= | 左右の値が等しくない |
NULLの判定
NULLの判定に上記の比較演算子は使用できない。
IS NULL(値はNULL)
、もしくはIS NOT NULL(値はNULLではない)
を使用する。
SELECT * FROM user WHERE name IS NULL
LIKEで部分一致の絞込
LIKE演算子を使用すると、文字列を部分一致で検索することができます。 部分一致で検索する場合は、パターン文字列を使用します。
SELECT 列名 FROM テーブル名 WHERE 列名 LIKE パターン文字列
パターン文字列
パターン文字列 | 意味 |
---|---|
% | 任意の0文字以上の文字列 |
_ | 任意の1文字 |
SELECT name FROM user WHERE name LIKE '%SATO%'
%sato%
の場合はhogeSATOhoge
のように「前後」に0文字以上のも文字列がついてても検索される%sato
の場合はhogeSATO
のように「前」に0文字以上のも文字列がついてても検索される
パターン文字列のエスケープ
もし検索対象にパターン文字列がある場合は、エスケープ句を使用します。
「りんご100%」の文字列の「%」をエスケープします。
SELECT name FROM drink WHERE name LIKE '%りんご100$%' ESCAPE '$'
BETWEEN演算子で範囲を指定する
BETWEEN演算子は英語と同じで、「BETWEEN 値A AND 値B」「値Aと値Bの間」のような範囲指定をすることができます。
SELECT 列名,列名,... FROM テーブル名 WHERE 列名 BETWEEN 値1 AND 値2
10才以上 〜 20才以下の範囲を検索する場合
SELECT * FROM user WHERE age BETWEEN 10 AND 20
IN演算子で複数の値と比較
IN演算子は任意の複数の値と比較することができます。
SELECT 列名,列名,... FROM テーブル名 WHERE 列名 IN (値1,値2,...)
名前がsato、もしくはsuzukiで検索する
SELECT * FROM user WHERE name IN ('sato','suzuki')
NOT IN
にすると、比較に合致しない値を検索します。
ANY/ALL演算子で複数の値と比較
IN演算子はリストの複数の値と比較して、1つでも合致するものがあればtrueを返しました。 単体で利用することはあまりないですが、複数の値を大小比較する場合に使用します。
ANY
ANY
は値の大小を比較して1つでも真のものがあればtrueを返します。
SELECT * FROM user WHERE age < ANY (10,11)
ALL
ANY
は値の大小を比較して全て真であればtrueを返します。
SELECT * FROM user WHERE age < ALL (10,11)