SQL

書いてて気になることとか。雑なメモ。
他にも思い出したら追記するかも。

自分の勉強不足によるところも大いにあると思われます。。。



マジックナンバー

select *
from foo
where
  status = 1;



消臭剤的コメント

select *
from foo
where
  status = 1 -- 販売中
;


  • 抽出したい
  • or 詳細を隠蔽したい
  • or howじゃなくてwhatな名前を付けて操作したい
  • いちいち詳細が目に入ってきてしまう
select
  *
from
  foo
where
  id in (
    select
      id
    from
      foo
      inner join bar
        on foo.id = bar.foo_id
    where
      bar.c = ...
      and bar.d = ...
    group by
      ...
  )
;

↓こう書きたくなる

whitelist = (
    select
      id
    from
      foo
      inner join bar
        on foo.bar_id = bar.id
    where
      bar.c = ...
      and bar.d = ...
    group by
      ...
);

select
  *
from
  foo
where
  id in whitelist
;


  • 長いSQLは部分を個別にテストしにくい(手作業のくりかえし)
  • テストのないコードがレガシーコードならテストのないSQLはレガシーSQLでは?
  • そういえば長いSQLの一部をモックに差し替えてテスト、みたいな話も聞かない
  • 組み合わせ爆発
  • SQL内のロジックの検証



なぜ select区が最初なのか? なぜ最後じゃないのか?(素朴な疑問だけどこれは英語の語順ですよね)



気になってる

SQLアンチパターン
SQLアンチパターンBill Karwin 和田 卓人(監訳)

オライリージャパン 2013-01-26
売り上げランキング : 4761


Amazonで詳しく見る
by G-Tools



(2013-05-12 追記)

SQLアンチパターン・レトロスペクティブ - データベース危篤患者の救出 - #sqlap #devlove - Togetter から:



2013-06-02
Sequelのすすめ 〜私がSQLを嫌いな理由〜