関係データベースがひろくつかわれるようになっているが,SQL によって記述したクエリ (質問文) がどのように実行されているかは不透明である. クエリの実行を手続き型言語でシミュレートしてみれば,その実行のしくみをよりよく理解することができるのではないだろうか. というわけで,いくつかの SQL の文を Perl に翻訳してみた. Join などはさまざまな方法があるなかのひとつだけしかためしていないが,Perl だとある程度最適化された方法が 20 行くらいで書けてしまう. あらためて Perl の強力さを実感した.
詳細は 「プログラミングの小石・大石」 のなかの 1 項目 「Perl による関係データベースのクエリのシミュレーション」 に書いた. ここには単純な SELECT 文の翻訳例からはじめて,COUNT や GROUP BY をふくむ例,JOIN をふくむ例も記述した. いずれも Perl をつかって実行してみることができる.
そのなかで JOIN をふくむ例が一番,行数はおおいが,それでも 20 行ほどだ. JOIN の実装法としてはさまざまなものがあり,データによってどれがよいかはかわってくるが,ここでは単純な hash join をつかっている. テーブルは (ディスクでなく) 配列 (つまり主記憶) にいれ,Perl がもつハッシュの機能をうまくつかうことによって,このくらいの行数で実現できている.
Perl がわかるひとには関係データベースを理解するためによいツールになるのではないだろうか.