実践で使えるSQL講座です
20年の実務経験を元に、机上でなく実践で役立つ知識を紹介します
複数条件を検索できます
抽出項目 IN(抽出語句1,抽出語句2,抽出語句3)
これは次のSQLと同じ意味です
抽出項目 = 抽出語句1 OR 抽出項目 = 抽出語句2 OR 抽出項目 = 抽出語句3
OR
があるのになぜIN
があるのでしょうか?
それはシンプルにわかりやすく書けるからです。
わかりやすく書くのはプログラムで一番重要です。
というメリットがあります。
あなたや他の人は何十回もプログラムを見ることになります。
見返すときにこのINのところがたった1秒の違いでも、
1,000行のコードですと
1,000行×10回×1秒 = 167分
と167分の違いがでます。
この計算は大げさですが、重要なことです。
INを使って書ける時はORでなくINを使いましょう。
ORはプログラムが読みにくくなります
‘XYZ会社’の2,000円以上の受注金額のデータを出すSQLがあります。
SELECT * FROM 受注 WHERE 顧客名 = 'XYZ会社' AND 受注金額 >= 2,000
あなたは’YYY会社’も追加してと修正依頼をうけて、
このように変更しました
SELECT * FROM 受注 WHERE 顧客名 = 'XYZ会社' OR 顧客名 = 'YYY会社' AND 受注金額 >= 2,000
一見よさそうに見えますが、やってしまいました。
改行をかえればわかるとすぐわかると思いますが、
この意味となります。
顧客名 = 'XYZ会社' OR 顧客名 = 'YYY会社' AND 受注金額 = 2,000
というのもANDはORより優先されるからです。
ANDはORより優先というのは私も初めて知りました。
というのも間違いやすいSQLは書かないようにするからです。
ORを使って正しく書くとこうなります。
(顧客名 = 'XYZ会社' OR 顧客名 = 'YYY会社') AND 受注金額 >= 2,000
ですが、ORは使わないと自分に制約をかけるのが一番です。
最終的にはこのように書けます
顧客名 IN('XYZ会社','YYY会社') AND 受注金額 >= 2,000
INは固定の語句を入れるだけでなく、
SQL文も使えます。
専門用語でサブクエリと呼びます。
これは特別な場合にしか使わないので推奨しません。
ですが、どういった時に使えるかを書きましたので、
参考にしてください。
顧客の国が日本の受注データだけ抽出するとします。
Step1 顧客テーブルから日本のデータを抽出
SELECT
顧客名
FROM 顧客マスタ
WHERE 国 = '日本'
顧客名 | 国 |
---|---|
ABC会社 | 日本 |
XYZ会社 | アメリカ |
YYY会社 | 日本 |
ZZZ会社 | アメリカ |
Step2 受注テーブルから顧客名で抽出
Step1の結果を手でIN句に追加する
SELECT
*
FROM 受注
WHERE 顧客名 IN('ABC会社','YYY会社')
Step1のSQLをそのままINの中に書けます。
このSQLは上記と同じ結果となります。
SELECT
*
FROM 受注
WHERE 顧客名 IN(
SELECT
顧客名
FROM 顧客マスタ
WHERE 国 = '日本'
)
LEFT JOINを使用してください
SELECT * FROM 受注 LEFT JOIN 顧客マスタ ON 受注.顧客名 = 顧客マスタ.顧客名 WHERE 顧客マスタ.国 = '日本'
ではLEFT句で書くのを推奨するのに、
なぜINのサブクエリを紹介したのでしょうか?
使う理由はこちらです
複数条件の抽出条件はこのように書けます
抽出項目 IN(抽出語句1,抽出語句2,抽出語句3)