🙃

[SQL]AND と OR を併用したクエリについて(備忘録)

2024/10/27に公開

1.はじめに

AND演算子はOR演算子より優先されます。
・OR演算子をAND演算子より優先させたい場合、OR演算子の両辺を()で囲みます。

2.サンプルプログラム

〇例1

Sample_1.sql
CREATE TABLE employees (
    id INT AUTO_INCREMENT NOT NULL,
    name VARCHAR(10) NOT NULL,
    division VARCHAR(10) NOT NULL,
    joining_date DATE NOT NULL,
    PRIMARY KEY (id)
)
;

INSERT INTO employees (
    name,
    division,
    joining_date
)
VALUES
('山田', '営業', '2020-01-01'),('鈴木', '開発', '2020-01-01'),
('大谷', '開発', '2020-01-01'),('近藤', '開発', '2020-02-01'),
('佐野', '開発', '2020-02-01'),('佐藤', '企画', '2020-02-01')
;

SELECT *
FROM employees
WHERE division = '開発'
    AND joining_date = '2020-01-01'
    OR joining_date = '2020-02-01'
;

実行結果

id name division joining_date
2 鈴木 開発 2020-01-01
3 大谷 開発 2020-01-01
4 近藤 開発 2020-02-01
5 佐野 開発 2020-02-01
6 佐藤 企画 2020-02-01

備考:
2020年の1月と2月に入社した開発担当者の情報のみを抽出したかったのですが、企画担当者の
情報も抽出されてしましました。

〇例2

Sample_2.sql
CREATE TABLE employees (
    id INT AUTO_INCREMENT NOT NULL,
    name VARCHAR(10) NOT NULL,
    division VARCHAR(10) NOT NULL,
    joining_date DATE NOT NULL,
    PRIMARY KEY (id)
)
;

INSERT INTO employees (
    name,
    division,
    joining_date
)
VALUES
('山田', '営業', '2020-01-01'),('鈴木', '開発', '2020-01-01'),
('大谷', '開発', '2020-01-01'),('近藤', '開発', '2020-02-01'),
('佐野', '開発', '2020-02-01'),('佐藤', '企画', '2020-02-01')
;

SELECT *
FROM employees
WHERE division = '開発'
    AND (joining_date = '2020-01-01' OR joining_date = '2020-02-01')
;

実行結果

id name division joining_date
2 鈴木 開発 2020-01-01
3 大谷 開発 2020-01-01
4 近藤 開発 2020-02-01
5 佐野 開発 2020-02-01

備考:
2020年の1月と2月に入社した開発担当者の情報のみ抽出できました。

3.その他

実行環境

Discussion