みなさんこんにちは!
フリーランスプログラマーのsatoです。今回はSQLのINについて見ていきましょう。INの活用方法は大きく分けると2つに分類できると思います。
- 複数の条件指定をまとめて行う手法
- サブクエリとしてSELECT結果を使用する手法
この記事ではこの二つを解決する方法を軸に複数指定方法やNOT INなどといった、応用的な話まで見ていきましょう。それではよろしくお願いいたします。
「IN」とは
IN句は、複数の一致するかの条件判定をまとめて行うために使用する命令です。たとえば…
【フルーツテーブル(fruit)の、名前が「みかん」か「りんご」の要素を取得する】
なんてことが簡単に行えます。つまり…
【IN句を使用しなかった場合】
SELECT * FROM fruit WHERE name = "みかん" OR name = "りんご";
今までこう打っていたものが…
【IN句を使用した場合】
SELECT * FROM fruit WHERE name IN("みかん","りんご");
このように書けるということです。地味に感じるかもしれませんが「"みかん","りんご","ばなな","ぶどう"…」と探す要素が増えていった時に、大きな力を発揮します。
IN句を使用することで条件文をとても短く済ませることができますよ!
「IN」の使い方
先ほど例題を出してしまったので、なんとなく理解できている方も多いとは思いますが…使い方を改めて見ておきましょう。
SELECT * FROM fruit WHERE name IN("みかん","りんご");
前半はいつものSELECT文ですね。IN句はWHERE内で使用されています。
[対象の要素名] IN([値1,値2,値3…]);
対象の要素名の後ろにつければ良いだけです。簡単ですね!
逆なら「NOT IN」!
また、逆に該当しない要素を調べるための「NOT IN」句も存在します。
SELECT * FROM fruit WHERE name NOT IN("みかん","りんご");
この例では、みかんとりんごに該当しない情報を全て取ってくることが可能です。
しかし一つ注意点もあります。レコード数が増えてくると「NOT IN」は非常に重い処理となってしまいます。それはSQLを使う上で、安易に否定形を扱うと、内部でデータの全検索が始まってしまうからです。
一言でカンタンに言えば「違うものを全てを探す」と、データ全てを検索し始めるわけですね。初心者の方は、膨大なデータを管理している状況では「NOT IN」は重い可能性が高いということだけは覚えておきましょう。
「IN」をサブクエリとして使おう!
状況や職業にもよるとはおもいますが、IN句を多用するのがこの手法ではないでしょうか。サブクエリとは簡単に言えば「SELECTで取得したデータを使用して、SELECTやUPDATEを使用する」手法です。つまり、以下のように使用できるわけです。
[要素名] IN ( SELECT [要素名] FROM [テーブル名] )
IN句の中にSELECT文を入れることで、SELECT文の結果をIN句の中に使用しているわけですね!具体的な使用例を見てみましょう。
SELECT * FROM [テーブルA] WHERE [要素名] IN ( SELECT [要素名] FROM [テーブルB] );
このようにすれば「テーブルBの出力結果」を元に「テーブルA」でSELECT文が使用できるということです。どうでしょう。なかなか使いどころが多そうな使い道ではないでしょうか。
まとめ
今回は非常に簡単にですが、IN句について見てきました。
- 複数の条件指定をまとめて行う手法
- サブクエリとしてSELECT結果を使用する手法
どちらも有用な技です!しっかり使いこなしていきましょう!