MySQLでAND/OR/NOT(論理演算子)を使って検索する!

MySQL MySQL

MySQLのWHEREを使うときに、AND・OR・NOTを使って検索する方法について書いています。
SELECTで使う時を想定すると、下記のような感じです。

・ANDを使うと、条件に全て合っているデータのみが出力される。
・ORを使うと、どちらかの条件に合っているデータのみが出力される。
・NOTは否定。条件に合わないデータのみが出力される。

テストデータを使用して、それぞれの挙動を確認してみます。
MySQLのバージョン8.0.15で、動作を検証しました。

条件をつけるためのWHEREについては、こちらの記事を確認してみてください。
論理演算子の公式のドキュメントはこちらにあります。

AND/OR/NOT(論理演算子)の使い方

下記に示すテストデータを使って、AND・OR・NOTの挙動を確認していきます。

テストデータ

今回使っているテーブルと、テストデータは下記になります。

CREATE TABLE fruits (
  id BIGINT NOT NULL AUTO_INCREMENT,
  name VARCHAR(256),
  color VARCHAR(256),
  price INT,
  PRIMARY KEY (id)
);
id name color price
1 りんご red 100
2 ぶどう blue 120
3 みかん orange 130
4 バナナ yellow 110
5 もも pink 125
6 レモン yellow 120

ANDを使う

ANDを使うと「・・・かつ・・・」のように、全ての条件に合っているものだけが対象になります。
例えば、下記のようにSQLを作ることができます。

SELECT * FROM fruits WHERE price = 120 AND color = 'blue';

こうすると、priceが「120」かつcolorが「blue」のデータだけが取得できます。
実行すると、下記のようになりました。

mysql> SELECT * FROM fruits WHERE price = 120 AND color = 'blue';
+----+-----------+-------+-------+
| id | name      | color | price |
+----+-----------+-------+-------+
|  2 | ぶどう    | blue  |   120 |
+----+-----------+-------+-------+
1 row in set (0.00 sec)

priceの値が「120」で、colorの値に「blue」が設定されているものだけが取得できました。

ORを使う

ORを使うと「・・・または・・・」のように、いずれかの条件に合っているものが対象になります。
例えば、下記のようにSQLを作れます。

SELECT * FROM fruits WHERE price = 100 OR color = 'yellow';

priceが「100」またはcolorが「yellow」のデータを取得します。
実行すると、下記のようになりました。

mysql> SELECT * FROM fruits WHERE price = 100 OR color = 'yellow';
+----+-----------+--------+-------+
| id | name      | color  | price |
+----+-----------+--------+-------+
|  1 | りんご    | red    |   100 |
|  4 | バナナ    | yellow |   110 |
|  6 | レモン    | yellow |   120 |
+----+-----------+--------+-------+
3 rows in set (0.01 sec)

priceの値が「100」か、colorの値に「yellow」が設定されているものだけが取得できました。

NOTを使う

NOT(否定)を使うと、条件に合わないものを取得することができます。

例えば、下記のようにSQLを作れます。

SELECT * FROM fruits WHERE NOT price = 120;

NOTは否定したい条件の前につけます。

こうすると、priceの値が「120」でないデータ行のみを取得します。
実行すると、下記のようになりました。

mysql> SELECT * FROM fruits WHERE NOT price = 120;
+----+-----------+--------+-------+
| id | name      | color  | price |
+----+-----------+--------+-------+
|  1 | りんご    | red    |   100 |
|  3 | みかん    | orange |   130 |
|  4 | バナナ    | yellow |   110 |
|  5 | もも      | pink   |   125 |
+----+-----------+--------+-------+
4 rows in set (0.01 sec)

priceが120以外の行が取得できています。

AND/OR/NOTを一緒に使うサンプルSQL2つ

AND・OR・NOTを一緒に使うこともできます。
それぞれを一緒に使ったSQLを2つ書きました。

ANDとORを一緒に使う

ANDもORも、WHEREの後の条件に複数回使うことができます。
例えば、下記のように使います。

SELECT * FROM fruits WHERE (color = 'blue' OR color = 'orange' OR color = 'yellow') AND price = 120

colorの値が「blueまたはorangeまたはyellow」かつpriceの値が「120」のデータを取得しています。
実行すると、下記のように出力されます。

mysql> SELECT * FROM fruits WHERE (color = 'blue' OR color = 'orange' OR color = 'yellow') AND price = 120;
+----+-----------+--------+-------+
| id | name      | color  | price |
+----+-----------+--------+-------+
|  2 | ぶどう    | blue   |   120 |
|  6 | レモン    | yellow |   120 |
+----+-----------+--------+-------+
2 rows in set (0.00 sec)

指定した色のデータで、価格が120のものだけ出力されました。

丸括弧を使っていますが、丸括弧がない場合は、後ろの方の条件で「・・・かつ・・・」となるので気を付けてください。
例えば、先ほどのSQLが下記のような場合です。

SELECT * FROM fruits WHERE color = 'blue' OR color = 'orange' OR color = 'yellow' AND price = 120

丸括弧がないですが、これだと『colorが「blue」または colorが「orange」または colorが「yellow」 かつ priceが「120」のもの』となります。
このように、後ろの条件「color = ‘yellow’」に対して、「かつ」が付いてきます。

意図した結果になるように、丸括弧も使っていきましょう。

ANDとORとNOTを一緒に使ってみる

3つの論理演算子を使って、取得するデータを絞ってみます。
例えば、下記のようにSQLを書いてみました。

SELECT * FROM fruits WHERE NOT color = 'yellow' AND (price = 120 OR price = 125);

こうすると、「colorがyellowじゃない」 かつ 「priceが120 または priceが125」のデータが取得できます。
実行すると、下記のようになりました。

mysql> SELECT * FROM fruits WHERE NOT color = 'yellow' AND (price = 120 OR price = 125);
+----+-----------+-------+-------+
| id | name      | color | price |
+----+-----------+-------+-------+
|  2 | ぶどう    | blue  |   120 |
|  5 | もも      | pink  |   125 |
+----+-----------+-------+-------+
2 rows in set (0.00 sec)

指定した条件通りに、色が「yellow」以外で、価格が「120と125」のデータが取得できました。
このように、それぞれの論理演算子を掛け合わせて使ったり、複数回使うことができます。

MySQLでAND/OR/NOT(論理演算子)を使う方法まとめ

今回はMySQLでAND/OR/NOT(論理演算子)を使って、WHEREに条件をつけてデータを取得してみました。
記事の内容をまとめると、下記のようになります。

・ANDを使うと「・・・かつ・・・」というように、全ての条件に合うデータを取得する。
・ORを使うと「・・・または・・・」というように、いずれか条件に合うデータを取得する。
・NOTを使うと、NOTの後に書いた条件を否定することができる。
・それぞれの論理演算子は複数回使うことができる。(他のものと一緒に使える)

コメント

タイトルとURLをコピーしました