データベースの勉強に、かわいいデータベースを実装していたら、だいぶかわいさがなくなってきました。
http://d.hatena.ne.jp/nowokay/20120817#1345197962
ところで、先日、「UNIONの実装はどう?」というコメントに「実際に使わないから乗り気しない」みたいなこと書いたのです。
http://d.hatena.ne.jp/nowokay/20120821#c
実際、SQLでUNIONを使うことは、そこまで多くないと思います。
でも、よく考えると、直接UNIONを使うことはなくても、インデックスが使える条件のORでは、内部的にUNIONが使われることも多いわけです。
ということで、UNION実装してみました。あと、OR演算で面白い結果が出せるように、BETWEENも実装しました。
それと、DISTINCTを実現するために、各タプルにoidをつけるようにしています。
次のようにしてUNIONができます。
System.out.println(Query .from("shohin").between("price", 100, 150) .union(Query .from("shohin").between("price", 250, 300), true));
こんな感じで、「(price between 100 and 150) or (price between 250 and 300)」という条件式での抽出になっています。
|shohin.shohin_id|shohin.shohin_name|shohin.kubun_id|shohin.price| |2|みかん|1|130| |5|わかめ|null|250| |1|りんご|1|300|
unionメソッドの2番目の引数はDISTINCT指定です。
続きを読む