♿
[SQL]IN句/NOT IN句 について(備忘録)
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 NULL か IS NOT NULL を使用します。
3.その他
・実行環境
Discussion