helloworlds

not a noun, it's a verb

【SQL】SQLのループは?

前回の続きで第五章の主要点をまとめていきたいと思います。 (具体的なテーブル表など割愛させてもらうことが多いです) ※今回の五章はけっこう割愛しています。

o21o21.hatenablog.jp

今回は、SQLにおいてどうしてループがないのか? といったところを考察してみます。

いきなりですが、答えです。

SQLは意識的にループを言語設計から排除した」が答えです。

RDBを考案したCodd氏いわく

関係操作では、関係全体をまとめて操作の対象とする。 目的は繰り返し(ループ)をなくすことである。 いやしくも末端利用者の生産性を考えようというのであればこの条件欠くことはできないし、 応用プログラマの生産性向上に有益であることも明らかである。

関係操作というのは、SQLのことだそうです。 そんなこんなで、現在わたしたちプログラマビジネスロジックをホスト側で実装しているということです。

SQLでのループの特徴としては、

  • 一定のオーバーヘッドが必要になる
  • 並列処理による最適化が受けられない
  • ストレージのぶんさん効率が悪い

ではループのメリットは?

  • 実行計画に変動リスクがさほどない
  • 処理時間の見積もり精度が高い ( 処理時間 = 1回あたりの実行時間 × 実行回数 )
  • トランザクション制御が容易

では、SQLでのループはどう表現するのでしょう? それは、CACE式とウィンドウ関数によってループを代用できます。

まとめ

そもそもSQLはループがないということ。 前章で確認したようにここでもパフォーマンスのこと優先的に考えればいいのではないかと思いました。 この章ではけっこう割愛させて頂いた例などもパフォーマンスを考慮することで判断できるものだと思います。

  • 前回の記事

o21o21.hatenablog.jp