MySQLのWHEREを使うときに、AND・OR・NOTを使って検索する方法について書いています。
SELECTで使う時を想定すると、下記のような感じです。
・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に条件をつけてデータを取得してみました。
記事の内容をまとめると、下記のようになります。
・ORを使うと「・・・または・・・」というように、いずれか条件に合うデータを取得する。
・NOTを使うと、NOTの後に書いた条件を否定することができる。
・それぞれの論理演算子は複数回使うことができる。(他のものと一緒に使える)
コメント