のぐそんブログ

暗いおじさんがシコシコ書くブログです。

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)