INとNOT INの使い方
ここでは、複数の値を一度に指定してデータを取得することができる「IN」と「NOT IN」についてその使い方を見てみましょう。
目次
1. はじめに
ここでは、商品テーブル(Shouhin)を使って各種条件を指定してみましょう。
まずは、Shouhinの内容を確認してください。
SELECT * FROM Shouhin;
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
1 | アスパラガス | あすぱらがす | 1 | 256 |
2 | かぼちゃ | かぼちゃ | 1 | 300 |
3 | キャベツ | きゃべつ | 1 | 128 |
・ ・ ・ |
Shouhinの全データ(全行)が取得されました。
このデータに対して、INとNOT INを指定して行を絞り込んでいきます。
2. INとNOT INの使い方
「IN」、「NOT IN」を使うと、列に対して複数の値を一度に指定することができます。
下で、それぞれの使い方を見てみましょう。
2-1. IN
「IN」は、比較演算子「=」を使った個々の条件を論理演算子「OR」で繋いだのと同じ働きをします。
例えば、「この値と、あの値と、その値のデータを取得する」といった場合に便利です。
構文
「IN」に渡す値は、「,(カンマ)」で区切ることで複数指定できます。
下は、商品IDが1,10,20の商品を取り出すSQLです。
SELECT
*
FROM
Shouhin
WHERE
shouhin_id IN ( 1, 10, 20 );
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
1 | アスパラガス | あすぱらがす | 1 | 256 |
10 | ほうれん草 | ほうれんそう | 1 | 100 |
20 | グレープフルーツ | ぐれーぷふるーつ | 2 | 150 |
商品IDが1,10,20の商品を取り出せました。
このように「IN」は、指定した値とマッチした行を取り出してくれます。
下は、「IN」を比較演算子「=」と論理演算子「OR」で置き換えた場合のSQLです。
SELECT
*
FROM
Shouhin
WHERE
shouhin_id=1 OR shouhin_id=10 OR shouhin_id=20;
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
1 | アスパラガス | あすぱらがす | 1 | 256 |
10 | ほうれん草 | ほうれんそう | 1 | 100 |
20 | グレープフルーツ | ぐれーぷふるーつ | 2 | 150 |
「=」と「OR」を使って「IN」と同じ結果を得られました。
2-2. NOT IN
「NOT IN」は、比較演算子「<>(!=)」を使った個々の条件を論理演算子「AND」で繋いだのと同じ働きをします。
例えば、「この値と、あの値と、その値以外のデータを取得する」といった場合に便利です。
構文
下は、商品IDが「1,2,3以外」の商品を取り出すSQLです。
SELECT
*
FROM
Shouhin
WHERE
shouhin_id NOT IN ( 1, 2, 3 );
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
4 | キュウリ | きゅうり | 1 | 150 |
5 | トマト | とまと | 1 | 328 |
6 | ナス | なす | 1 | 130 |
・ ・ ・ |
商品IDが「1,2,3以外」の商品を取り出せました。
このように、「NOT IN」は、指定した値以外の行(値とマッチしなかった行)を取り出してくれます。
「NOT IN」は、下の論理演算子「AND」を使ったSQLと同じ動作をします。
下は、「NOT IN」を比較演算子「!=(<>)」と論理演算「AND」で置き換えた場合のSQLです。
SELECT
*
FROM
Shouhin
WHERE
shouhin_id != 1 AND shouhin_id != 2 AND shouhin_id != 3;
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
4 | キュウリ | きゅうり | 1 | 150 |
5 | トマト | とまと | 1 | 328 |
6 | ナス | なす | 1 | 130 |
・ ・ ・ |
「!=(<>)」と「AND」を使って「NOT IN」と同じ結果を得られました。
まとめ
「IN」と「NOT IN」についてその使い方を確認しました。
「IN」と「NOT IN」は、列に対して複数の値を一度に指定することができます。
「IN」は、比較演算子「=」を使った個々の条件を論理演算子「OR」で繋いだのと同じ働きをします。
「NOT IN」は、比較演算子「<>(!=)」を使った個々の条件を論理演算子「AND」で繋いだのと同じ働きをします。
一見、使い道がなさそうな「IN」と「NOT IN」ですが、あとに登場する「副問い合わせ(サブクエリ)」と組み合わせることで威力を発揮しますので覚えておきましょう。
次は、「BETWEENの使い方」についてです。