Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

AND / OR / NOT

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

構文
-- 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より優先されるため、意図した順序で評価させるために使用します。
サンプルコード
-- 営業部かつ給与が30万円以上の社員を取得します。
SELECT name, department, salary
FROM employees
WHERE department = '営業部' AND salary >= 300000;

-- 営業部または開発部の社員を取得します。
SELECT name, department
FROM employees
WHERE department = '営業部' OR department = '開発部';

-- 総務部以外の社員を取得します。
SELECT name, department
FROM employees
WHERE NOT department = '総務部';

-- 括弧で優先順位を制御します。
-- 「開発部の社員」または「給与30万以上の営業部社員」を取得します。
SELECT name, department, salary
FROM employees
WHERE department = '開発部' OR (department = '営業部' AND salary >= 300000);
実行結果
-- SELECT name, department, salary FROM employees
-- WHERE department = '開発部' OR (department = '営業部' AND salary >= 300000); の結果例
-- +----------+----------+--------+
-- | name     | department | salary |
-- +----------+----------+--------+
-- | 田中太郎 | 営業部   | 320000 |
-- | 鈴木花子 | 開発部   | 280000 |
-- | 山田次郎 | 開発部   | 300000 |
-- +----------+----------+--------+
データベース別の書き方

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

SELECT name, department, salary
FROM employees
WHERE department = '開発部' OR (department = '営業部' AND salary >= 300000);
概要

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

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

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

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