言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. SQL辞典
  3. AND / OR / NOT

AND / OR / NOT

対応: SQL-92(1992)

複数の条件を組み合わせて絞り込むための論理演算子です。条件の優先順位に注意して括弧を使うことが重要です。

構文

AND:両方の条件を満たす行を取得します。

SELECT 列名 FROM テーブル名 WHERE 条件1 AND 条件2;

OR:どちらかの条件を満たす行を取得します。

SELECT 列名 FROM テーブル名 WHERE 条件1 OR 条件2;

NOT:条件を否定します。

SELECT 列名 FROM テーブル名 WHERE NOT 条件;

括弧で優先順位を明示します。

SELECT 列名 FROM テーブル名 WHERE 条件1 AND (条件2 OR 条件3);

演算子一覧

演算子概要
AND左右の条件が両方とも真の場合にのみ真となります。
OR左右の条件のどちらか一方でも真であれば真となります。
NOT後続の条件の真偽を反転させます。
( )括弧内の条件を先に評価します。ANDはORより優先されるため、意図した順序で評価させるために使用します。

サンプルコード

以下の『employees』テーブルを例に説明します。

employees id name department salary 1 岡部倫太郎 未来ガジェット研究所 320000 2 牧瀬紅莉栖 未来ガジェット研究所 350000 3 椎名まゆり 未来ガジェット研究所 260000 4 橋田至 未来ガジェット研究所 280000 4 rows in set

未来ガジェット研究所かつ給与が30万円以上の社員を取得します。

sample_and_or_not.sql
SELECT name, department, salary
FROM employees
WHERE department = '未来ガジェット研究所' AND salary >= 300000;
+------------+----------------------+--------+
| name       | department           | salary |
+------------+----------------------+--------+
| 岡部倫太郎 | 未来ガジェット研究所 | 320000 |
| 牧瀬紅莉栖 | 未来ガジェット研究所 | 350000 |
+------------+----------------------+--------+
2 rows in set

給与が26万円または35万円の社員を取得します。

sample_and_or_not.sql
SELECT name, salary
FROM employees
WHERE salary = 260000 OR salary = 350000;
+------------+--------+
| name       | salary |
+------------+--------+
| 牧瀬紅莉栖 | 350000 |
| 椎名まゆり | 260000 |
+------------+--------+
2 rows in set

給与が30万円未満でない社員(30万円以上)を取得します。

sample_and_or_not.sql
SELECT name, salary
FROM employees
WHERE NOT salary < 300000;
+------------+--------+
| name       | salary |
+------------+--------+
| 岡部倫太郎 | 320000 |
| 牧瀬紅莉栖 | 350000 |
+------------+--------+
2 rows in set

括弧で優先順位を制御します。「給与が35万円以上」または「未来ガジェット研究所かつ給与が30万円以上」の社員を取得します。

sample_and_or_not.sql
SELECT name, department, salary
FROM employees
WHERE salary >= 350000 OR (department = '未来ガジェット研究所' AND salary >= 300000);
+------------+----------------------+--------+
| name       | department           | salary |
+------------+----------------------+--------+
| 岡部倫太郎 | 未来ガジェット研究所 | 320000 |
| 牧瀬紅莉栖 | 未来ガジェット研究所 | 350000 |
+------------+----------------------+--------+
2 rows in set

データベース別の書き方

『AND』『OR』『NOT』の構文と優先順位は主要なデータベースで共通して使用できます。

SELECT name, department, salary
FROM employees
WHERE salary >= 350000 OR (department = '未来ガジェット研究所' AND salary >= 300000);

概要

SQLの論理演算子の優先順位は『NOT』→『AND』→『OR』の順です。たとえば『A OR B AND C』は『A OR (B AND C)』として評価されます。意図しない結果を防ぐため、複雑な条件には積極的に括弧を使用してください。

複数のOR条件を列挙する場合は、『IN』句でまとめて書くとより読みやすくなります。『salary = 260000 OR salary = 350000』は『salary IN (260000, 350000)』と同じ意味です。

『AND / OR / NOT』は『WHERE』句だけでなく、『HAVING』句などでも同様に使用できます。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。