MySQLのWHERE句とAND・OR条件検索を完全解説|初心者でもわかるSQL入門
生徒
「MySQLでデータを探すときに、条件をつけられるって聞いたんですけど、どういう意味ですか?」
先生
「条件というのは、名簿の中から『この条件に当てはまる人だけ』を選ぶことです。WHERE句を使うと、それができます。」
生徒
「さらにANDとかORって出てきて、急に難しくなりました…」
先生
「ANDとORは、日本語でいう『かつ』『または』と同じです。普段の会話と同じ考え方なので、順番に見ていけば大丈夫ですよ。」
1. MySQLとWHERE句の基本をやさしく理解しよう
MySQL(マイエスキューエル)は、データベースを操作するためのソフトです。 データベースとは、たくさんの情報を表の形で整理して保存する場所のことです。 紙の会員名簿や学校の出席表を、パソコンの中で管理しているイメージをすると分かりやすいです。
WHERE句(ウェアく)は、その表の中から「条件に合う行だけを選ぶ」ための命令です。 例えば「20歳以上の人だけ」「名前が山田の人だけ」といった探し方ができます。
2. サンプルとなるテーブルを確認しよう
ここでは、users(ユーザー)というテーブルを使って説明します。 このテーブルは、会員名簿のようなものです。
id | name | age | email
---+------------+-----+-----------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 22 | misaki@example.com
5 | 田中健一 | 18 | ken@example.com
3. WHERE句で1つの条件を指定する方法
まずは基本として、WHERE句で1つだけ条件を指定する書き方を見てみましょう。 「20歳以上の人を探したい」という場合は、次のように書きます。
SELECT *
FROM users
WHERE age >= 20;
このSQLの意味を日本語にすると、「usersという表から、年齢が20以上の行を全部表示してください」となります。
id | name | age | email
---+------------+-----+-----------------------
1 | 山田太郎 | 25 | taro@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 22 | misaki@example.com
4. ANDを使った複数条件検索の考え方
AND(アンド)は、日本語でいう「〜かつ」という意味です。 「20歳以上で、名前が山田の人」というように、条件を両方満たす場合に使います。
日常生活で例えると、「身長が170cm以上で、眼鏡をかけている人」と探すイメージです。 両方に当てはまらないと選ばれません。
SELECT *
FROM users
WHERE age >= 20
AND name = '山田太郎';
id | name | age | email
---+------------+-----+-----------------------
1 | 山田太郎 | 25 | taro@example.com
5. ORを使った条件検索の基本
OR(オア)は、日本語でいう「〜または」という意味です。 どちらか一方の条件に当てはまれば、結果に表示されます。
「10代または30歳の人」を探すような場合に使います。 どちらかに当てはまれば良いので、ANDより結果が多くなりやすいです。
SELECT *
FROM users
WHERE age < 20
OR age >= 30;
id | name | age | email
---+------------+-----+-----------------------
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
5 | 田中健一 | 18 | ken@example.com
6. ANDとORを使うときの注意点
ANDとORを一緒に使うときは、条件の順番に注意が必要です。 パソコンは上から順に機械的に判断するため、人の感覚とズレることがあります。
そのため、かっこ()を使って「どこからどこまでを一つの条件にするか」をはっきり書くことが大切です。 これは算数の計算で、先に計算する部分をかっこで囲むのと同じ考え方です。
SELECT *
FROM users
WHERE (age < 20 OR age >= 30)
AND name != '佐藤花子';
id | name | age | email
---+------------+-----+-----------------------
3 | 鈴木一郎 | 30 | ichiro@example.com
5 | 田中健一 | 18 | ken@example.com