SQLのWHERE句とは?初心者でもわかる条件指定の基本を徹底解説
生徒
「先生、データベースから必要なデータだけを取り出すにはどうすればいいんですか?」
先生
「それには、WHERE句という仕組みを使います。これは、条件を指定してデータを絞り込むための命令です。例えば、クラス名簿から二十歳未満の生徒だけを探し出すような作業ができます。」
生徒
「条件を指定するって難しそうですね。私にもできますか?」
先生
「大丈夫ですよ。紙の名簿で『○○の人だけに丸をつける』という作業をイメージしてください。WHERE句は、それをコンピューターに指示する方法なんです。」
1. WHERE句とは何か?
WHERE句は、SQLのSELECT文と組み合わせて使う、データの絞り込み条件を指定するための構文です。データベースには大量の情報が保存されていますが、そのすべてが必要なわけではありません。WHERE句を使うことで、欲しいデータだけを取り出すことができます。
例えば、会員名簿のデータベースに千人分の情報があるとします。その中から、東京都に住んでいる人だけを探したいとき、WHERE句で「住所が東京都の人」という条件を指定すれば、該当する人だけが抽出されます。これは、紙の名簿をめくって該当者を探す作業を、コンピューターが自動で行ってくれるイメージです。
2. WHERE句の基本的な書き方
WHERE句の基本構文は、とてもシンプルです。SELECT文でどのテーブルからデータを取得するかを指定した後、WHERE句で条件を追加します。
基本的な形は次のようになります。SELECTは「選択する」、FROMは「どこから」、WHEREは「どんな条件で」という意味です。それぞれの単語の頭文字を大文字で書くのが一般的ですが、小文字でも動作します。
基本構文
SELECT カラム名
FROM テーブル名
WHERE 条件;
カラム名とは、データベースの表の列の名前のことです。テーブル名は表全体の名前を指します。条件の部分に、どのようなデータを取り出したいかを書きます。最後には必ずセミコロン(;)をつけて、命令の終わりを示します。
3. 実際にWHERE句を使ってみよう
ここでは、実際のデータを使って、WHERE句の使い方を学んでいきましょう。次のような会員情報のテーブル(users)があると想定してください。
テーブル: users(ユーザー情報)
id | name | age | email | city
---+------------+-----+----------------------+----------
1 | 山田太郎 | 25 | taro@example.com | 東京都
2 | 佐藤花子 | 19 | hanako@example.com | 大阪府
3 | 鈴木一郎 | 30 | ichiro@example.com | 東京都
4 | 田中美咲 | 22 | misaki@example.com | 福岡県
5 | 高橋健太 | 18 | kenta@example.com | 東京都
6 | 伊藤麻衣 | 28 | mai@example.com | 大阪府
このテーブルから、年齢が二十歳未満の人だけを取り出したい場合、次のようなSQL文を書きます。
SELECT *
FROM users
WHERE age < 20;
アスタリスク(*)は「すべてのカラム」を意味します。age < 20は「年齢が二十未満」という条件です。不等号(<)は算数で習った記号と同じで、「より小さい」という意味です。
実行結果
id | name | age | email | city
---+------------+-----+----------------------+----------
2 | 佐藤花子 | 19 | hanako@example.com | 大阪府
5 | 高橋健太 | 18 | kenta@example.com | 東京都
このように、年齢が二十歳未満の佐藤花子さんと高橋健太さんだけが抽出されました。WHERE句によって、条件に合うデータだけが選ばれたのです。
4. さまざまな比較演算子
WHERE句では、条件を指定するために比較演算子と呼ばれる記号を使います。演算子とは、計算や比較を行うための記号のことです。主な比較演算子を見ていきましょう。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| = | 等しい | age = 25(年齢が二十五歳) |
| < | より小さい | age < 20(年齢が二十歳未満) |
| > | より大きい | age > 30(年齢が三十歳より上) |
| <= | 以下 | age <= 25(年齢が二十五歳以下) |
| >= | 以上 | age >= 20(年齢が二十歳以上) |
| <> または != | 等しくない | age <> 25(年齢が二十五歳ではない) |
注意点として、等しいかどうかを調べるときは、イコール記号を一つ(=)だけ使います。プログラミング言語によっては二つ(==)使うこともありますが、SQLでは一つです。また、等しくないを表す記号は、不等号とイコールを組み合わせた(<>)か、エクスクラメーションマークとイコール(!=)のどちらでも使えます。
5. 文字列を条件にする方法
数値だけでなく、文字列でも条件を指定できます。例えば、東京都に住んでいる人だけを抽出したい場合は、次のように書きます。
SELECT *
FROM users
WHERE city = '東京都';
文字列を指定するときは、必ずシングルクォーテーション(')で囲みます。これは「ここからここまでが文字列ですよ」とコンピューターに伝えるための記号です。ダブルクォーテーション(")ではなく、シングルクォーテーションを使うのがSQLの決まりです。
実行結果
id | name | age | email | city
---+------------+-----+----------------------+----------
1 | 山田太郎 | 25 | taro@example.com | 東京都
3 | 鈴木一郎 | 30 | ichiro@example.com | 東京都
5 | 高橋健太 | 18 | kenta@example.com | 東京都
このように、都市が東京都の人だけが抽出されました。文字列の条件指定では、大文字と小文字の区別や、全角と半角の違いにも注意が必要です。データベースに保存されている文字と完全に一致するように指定しないと、正しく抽出できません。
6. 複数の条件を組み合わせる
WHERE句では、ANDやORという言葉を使って、複数の条件を組み合わせることができます。これにより、より細かい条件でデータを絞り込めます。
AND演算子の使い方
ANDは「かつ」という意味で、すべての条件を満たすデータだけを取り出します。例えば、東京都に住んでいて、かつ年齢が二十五歳以上の人を探す場合は次のようになります。
SELECT *
FROM users
WHERE city = '東京都' AND age >= 25;
実行結果
id | name | age | email | city
---+------------+-----+----------------------+----------
1 | 山田太郎 | 25 | taro@example.com | 東京都
3 | 鈴木一郎 | 30 | ichiro@example.com | 東京都
二つの条件をどちらも満たす人だけが抽出されました。高橋健太さんは東京都に住んでいますが、年齢が十八歳なので条件に合わず、結果には含まれていません。
OR演算子の使い方
ORは「または」という意味で、どちらか一つの条件を満たせばデータが取り出されます。例えば、東京都に住んでいるか、または年齢が二十歳未満の人を探す場合は次のようになります。
SELECT *
FROM users
WHERE city = '東京都' OR age < 20;
実行結果
id | name | age | email | city
---+------------+-----+----------------------+----------
1 | 山田太郎 | 25 | taro@example.com | 東京都
2 | 佐藤花子 | 19 | hanako@example.com | 大阪府
3 | 鈴木一郎 | 30 | ichiro@example.com | 東京都
5 | 高橋健太 | 18 | kenta@example.com | 東京都
東京都に住んでいる人と、年齢が二十歳未満の人がすべて抽出されました。佐藤花子さんは大阪府ですが、年齢が十九歳なので条件に合い、結果に含まれています。
7. NULL値の扱い方
データベースでは、値が入っていない状態をNULL(ヌル)と呼びます。これは、ゼロや空文字とは違う特別な状態です。例えば、メールアドレスがまだ登録されていない会員がいる場合、そのカラムにはNULLが入ります。
NULL値を条件にする場合は、特別な書き方をします。通常の比較演算子(=や<>)は使えません。代わりにIS NULLやIS NOT NULLという表現を使います。
8. WHERE句を使う際の注意点
WHERE句を使うときには、いくつか気をつけるべきポイントがあります。これらを理解しておくことで、エラーを防ぎ、正確なデータ抽出ができるようになります。
カラム名の間違いに注意
存在しないカラム名を指定すると、エラーが発生します。例えば、年齢のカラム名がageなのに、yearsと書いてしまうと、データベースは該当するカラムを見つけられずエラーになります。テーブルの構造をよく確認してから、SQL文を書くようにしましょう。
データ型の違いに注意
数値のカラムに文字列の条件を指定したり、その逆をしたりすると、予期しない結果になることがあります。年齢は数値なので、WHERE age = '25'のように文字列として指定するのは避けましょう。正しくはWHERE age = 25と書きます。
シングルクォーテーションの使い方
文字列を指定するときは必ずシングルクォーテーションで囲みますが、数値の場合は囲みません。この使い分けを間違えると、エラーになったり、意図しない動作をしたりします。慣れるまでは、何度も確認しながら書くとよいでしょう。
9. WHERE句でよく使われるその他の機能
WHERE句には、基本的な比較演算子以外にも、便利な機能がたくさんあります。ここでは、よく使われる機能をいくつか紹介します。
BETWEEN演算子
BETWEENは、範囲を指定するときに使います。例えば、年齢が二十歳から三十歳の間の人を探す場合、WHERE age >= 20 AND age <= 30と書くこともできますが、WHERE age BETWEEN 20 AND 30と書くとより簡潔になります。
IN演算子
INは、複数の値のいずれかに一致するかを調べます。例えば、東京都、大阪府、福岡県のいずれかに住んでいる人を探す場合、WHERE city IN ('東京都', '大阪府', '福岡県')と書けます。ORを何度も書くより簡単です。
LIKE演算子
LIKEは、あいまい検索をするときに使います。例えば、名前に「田」という文字が含まれる人を探す場合、WHERE name LIKE '%田%'と書きます。パーセント記号(%)は、どんな文字が何文字あってもよいという意味のワイルドカードです。