SQL ゼロからはじめるデータベース操作を読んだ

CD付 SQL ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

CD付 SQL ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

ミックさんが書いた初心者向けの本。そうだったのかと思う部分がたくさんありました。
以下、改めて知ったことや良かったこと。

  • つまづきやすいところが書かれてある
    • WHERE句に取れる式の制限とか
  • 書ける場所、書けない場所を教えてくれている
  • 句の実行順序
    • 上ふたつのことも、実行順序が分かっていればだいたい理屈で納得できる
  • 主要なDBMSでの記法をサポートしてる
  • SQL標準で書くことを推奨してる
    • 例えば僕はテーブル結合でjoin句を使ってなかった
    • そもそも何がSQL標準か、何がそうでないかを知らなかった
  • ところどころで中級への道を示している
    • EXISTS述語とIN述語の違い
    • 関係除算
    • NOT IN述語にNULLを取ったときの動作

これを書いてる途中でおさらいをしたんだけど、相関サブクエリの動作イメージが分かった。気がする。SQLの実行順は内側から、つまりサブクエリから展開されていくというのに捕らわれていて、相関サブクエリ内のバインドの部分を解釈できないでいた。サブクエリ単体で見ると、バインドの値が未定で表が出来上がらないから。じゃあ逆にと思って外側からレコード一行ずつ見ていくと、バインドする値は当然決まるし、そうなると相関サブクエリが返す値はひとつに絞られてWHERE句に収まることができる。すっきりした。

やっぱり分からないのは関係除算で例に出てたSQL。EXISTSと相関サブクエリの関係をよくわかってることが前提なのかな。EXCEPTで差集合を取ってるのだけど、引く側が引かれる側を内包してる(と思う)ので空集合になるのではないか、とかよく分からない。今後の課題。