[SQL]IN句/NOT IN句 について(備忘録)

2024/09/02に公開

1.はじめに

カラムの値が(複数の)指定値の中に存在するか判定したい場合、IN句を使用します。
カラムの値が(複数の)指定値以外の中に存在するか判定したい場合、NOT IN句を使用します。

2.サンプルプログラム

〇例1:IN句を使用

Sample_1.sql
CREATE TABLE product_list (
    id INT(2) AUTO_INCREMENT NOT NULL,
    product_name varchar(30) NOT NULL,
    price int(5),
    PRIMARY KEY (id)
);

INSERT INTO product_list (
    product_name,
    price
)
VALUES ('バナナ', 300),('ミカン', 350),('リンゴ', 400),('パイナップル', 450),('桃', NULL);

SELECT *
FROM product_list
    WHERE price IN (300, 350, 400)
;

-- INをORに置換
SELECT *
FROM product_list
    WHERE price = 300
    OR price = 350
    OR price = 400
;

実行結果

id product_name price
1 バナナ 300
2 ミカン 350
3 リンゴ 400

備考
INをORに置換しても結果は同じですが、ソースコードの可読性が悪くなります。

〇例2:NOT IN句を使用

Sample_2.sql
CREATE TABLE product_list (
    id INT(2) AUTO_INCREMENT NOT NULL,
    product_name varchar(30) NOT NULL,
    price int(5),
    PRIMARY KEY (id)
);

INSERT INTO product_list (
    product_name,
    price
)
VALUES ('バナナ', 300),('ミカン', 350),('リンゴ', 400),('パイナップル', 450),('桃', NULL);

SELECT *
FROM product_list
    WHERE price NOT IN (300, 350)
;

-- 値段がNULLの値を抽出
SELECT *
FROM product_list
    WHERE price IS NULL
;

実行結果

id product_name price
3 リンゴ 400
4 パイナップル 450
id product_name price
5 NULL

備考
NOT IN句を用いて、NULLのデータを抽出することはできませんでした。
IN句でも同様に、NULLのデータは抽出できません。
NULLを抽出したい場合、IS NULLIS NOT NULL を使用します。

3.その他

実行環境

Discussion