7.22.2013

SQL、その読み方はシークェル

シークェルブートキャンプにでも参加させられたのかと思うくらい最近シークェルを見てました(日本人なら大人しくエスキューエルと読みなさい)。
 というわけでSQLのポイント、SQLのSELECTとかでレコードを取得する際、Order by句を付けないと順序は気まぐれに変わる。Order byが付いていても重複データとかは順序の保証は無い。まぁ常識っぽいけど、大抵の場合はインサート順に取得できるので勘違いしがち。そしてインサート順に取れると思い込んでSQL組むと大抵の場合は動作OKだがたまに順序が変わってバグる、という見逃されやすい問題になる。

 インサート順で取れると思い込んでテーブルを作っちゃってる場合、運良く既存のカラムでOrder byやって意図した順序を指定出来るなら直せるんだけど、既存のカラムだけでは出来ないってこともある。これを直すにはOrder byのためのカラムを追加する以外手は無いってことです✝アーメン✝。
 RoRでCreate_date、Update_dateとかいうカラムが勝手に出来るのがちょっと邪魔っぽかったけどこういうときにはさりげなく役に立つんでしょうね。

ポイントその2
あるカラム(例えばcol01)のデータがnullのとき、「col01 = 0」は当然False判定(nullは0じゃないので)、しかし「col01 <> 0」もFalse判定!
コインの裏と表のはずなのに、さにあらず。SQLよお前もか…
0であり、かつ0でない値。それがnull
ま、そいうもんだって分かっちゃえばなんてことは無いんですが(nullに対しては「cal01 IS NULL」とか「col01 IS NOT NULL」とかで判定する)。

SQLかぁやだなぁ怖いなぁと思ってましたがこういう風に追い込まれると意外とすぐ出来るようになります。しかも定時上がりでしたので一日8時間x2週間、実働10日ほど?
定期的にこういう風に学習する機会があると良いかもなぁ

0 件のコメント:

コメントを投稿