小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

手続き型言語とSQLの違い

まず、前フリです。最近はオブジェクト指向言語が流行りですが、オブジェクト指向言語は、プログラミングする発想がオブジェクト指向であって、実際にプログラミングする時は、手続き型言語となんら変わらないので、今回は、オブジェクト指向言語手続き型言語に含めます。(もしかしたら、とんでもないこと言っているかも)


それでは、本題です。手続き型言語は、問題解決の処理結果を得るために、その手続きを変数やインデックスを常に意識しながら上から下へと一次元的に記述していきます。


しかし、SQLは、手続きや変数、インデックス等を全く意識しないで、2次元的な発想でそれをSQL文法に結びつけて記述します。逆に言うと、SQLは、2次元的な発想さえ出来れば、手続きや変数等を全く意識しないで、処理結果を得ることができるという便利な言語なのです。


では、2次元的な発想とは何かというと、表に対してを行単位に一行づつ処理するような一次元的な発想でなく、表全体に対して2次元的に発想するのです。具体的には、WHERE句で行を絞り、それをGROUP BY句でグループ化し、それを(グループ内を)HAVING句でまた絞る・・・。そう、どこにも手続きや変数は出てこないのです。これらは、SQL実装内部で多分やってくれているのです。


つまり、2次元的な発想をSQL文法に結びつけるだけで、問題解決の処理結果を得ることが出来るわけです。しかし、結びつけるのが、結構、難しかったりするわけですが……。