SQLを書くとき、安易に拡張SQL、例えばT-SQLやPL-SQLに乗っかって、SQL内でループ分を書くと、性能が低下するので嫌がられる。確かに、自分もループ文を使わずに、SELECT文などの純粋なSQLで書いた方が性能が出ると思うので、そうしている。
しかし、SQLはややデバッグしづらいと思う。SQLのSELECT文が副問合せをいくつも内部に抱えているような、大きなものになってしまった場合、データの途中が見えづらいので、特にデバッグがしづらい。
また、条件分岐も純粋なSQLでは書きづらいと思う。もちろん、書けなくないが、IF文の方が分かりやすく、保守しやすいのではないかと思う。
こういった事情を勘案すると、SQLを書く場合、以下の方針が良いと思う。
- ひとつのSQLは小さめに作る。副問合せも、せいぜいひとつにとどめるようにする。それ以上の大きさになりそうだったら、いったん一時テーブルに格納する方法を検討する。性能に問題がない場合は、一時テーブルを使う事で保守性が上がることがある。
- 条件分岐はSQL内で書こうとせず、T-SQLなどの拡張構文を使ってIF文を書くか、呼び出し元のプログラム内で済ませる。
結局、以下で行きたい。