SQLのANY, SOME, ALL, USINGについて
どうも、ふもです。
なんだか今年の夏は雨ばっかりですね。
さて、今日はSQLについてです。
現在携わっているお仕事ではOracleデータベースを使っているのですが、とある事情でSQLのリファレンスを眺めていたら、ほとんど使わないキーワードに出会いました。
タイトルにあるように、ANY, SOME, ALLとUSINGについてです。
ちなみにいままで、業務で取り扱ってきた様々なシステムで見かけたことは無かったと記憶しているので、そうとう珍しいんじゃないかなと思います。
機能の詳細はググってもらうとして、ANYとUSINGだけ軽くどんな感じなのか紹介して終わりにしたいと思います。
ANY
ANYはINとほぼ同じ感じで利用できるようです。
SELECT * FROM デーブル WHERE AAA = ANY(10, 20, 30)
個人的に強力だなぁと思ったのは、複数の値の組み合わせでマッチできるところです。
SELECT * FROM デーブル WHERE (AAA, BBB) = ANY( (10, 'a'), (20, 'b') )
ちなみに、SOMEはANYと同じ意味で使えるらしいです。エイリアスですね。
ANYで複数の条件を指定した場合は、そのどれかにマッチした行が残ります。
あと、ALLは逆に全てにマッチした場合のみ行が残るみたいです。
USING
よく使われるキーワードですが、ここではINNER JOINとかLEFT JOINとかのテーブル結合の時に使うもののお話です。
USINGはONの代わりに結合条件を書く時に利用できます。結合するテーブル同士の列名が同じ場合で、等結合となるような場合に利用できます。
FROM T1 INNER JOIN T2 USING (AAA, BBB, CCC)
これは、ONを使った場合の以下と同等の意味になります。
FROM T1 INNER JOIN T2 ON ( T1.AAA = T2.AAA AND T1.BBB = T2.BBB AND T1.CCC = T2.CCC )
列名が揃ってないと使えないですが、だいぶコードの見通しが良くなりますよね。デーブル設計時からこれを見越して、結合する予定の列名は統一しておくと良さそうな気がしました。
さて、いかがだったでしょうか。
私自身は、普段何気無く使っているものの中にもまだまだ未知のものが隠されていることを実感できてなんだか面白かったです。
もうこんなことは知っていると門を閉ざさずに、一度、よく見知った言語や製品などのマニュアルやリファレンスを眺めてみることをお勧めします。