【改訂第3版】 SQLポケットリファレンス

【改訂第3版】 SQLポケットリファレンス (POCKET REFERENCE)

【改訂第3版】 SQLポケットリファレンス (POCKET REFERENCE)

Twitter で、SQL ポケットリファレンスの新版が出てるって情報が入ってきたから、買ってみようとつぶやいたら感想希望されたので感想です*1


まず、この本が欲しい理由として、
「ポケットリファレンスというからには薄くて持ち運びが楽だろう。今持ってる本はそういうのに向かない本ばっかだし」
というのがあったんだけど、そこそこの厚みあるね、これw
値段を考えると、コストパフォーマンスはかなりいいほうじゃなかろうか。


で、中身はどうかというと、ポケットリファレンスという名前どおり、ある程度 SQL が分かっている人向けなのかな、という印象。
SQL に限らず、プログラミング言語は 1 つのことをするために複数の方法があるのが普通で、しかも速度とかメモリ使用量とかが全然違ってきたりするのもごく普通のことだけど、この本ではそれらの比較というものは全く無い。
同様に、WHERE 句で集計関数が使用出来ない (HAVING 句使え) ことは書いてあるけど、その理由は書いてないとか*2
なんというか、書き方の列挙に終始している感じ。
なので、当然最初の一冊には向かないわけだけど、最初の一冊に向く本が思いつかないから、別に最初の本として使ってもいいんじゃないかな、とは思う。
とりあえず、なんか SQL の本読むたびにリレーショナル・データベースの世界を読み直せばいいんじゃないだろうか。量が多い?そんなあなたに書籍版をどうぞ。単なるサイトのダイジェスト本ではないので、両方読むのがおすすめだけどね(何


えっと、話を戻してこの本について。
3 回も改訂してるのに、それはないだろう、って間違いがあるにはある。でも、SQL をある程度知ってる人にとってはハマる部分ではないから*3、なかなかいい本だと思う。なんといっても安いし。
T-SQL の関数を調べるのにあの重いサイトをいつも使ってる身としては、ありがたい本であることは確か。


以下は気に入らなかった部分の指摘です。見つけ次第増えていく予定。

  • SQL を Structured Query Language の略としているけど、そうではない。参考:SQL - Wikipedia
  • 各項目の頭で示される文法*4は正しいわけではない*5
    • FROM 句にインラインビューが書けないように見えるのはちょっとまずいかも
  • NULL は値ではな。
    参考:
     3値論理
     存在と無 ―― 空集合とNULL
  • コマンド命令、英語にすると command command
  • SQL Server 2008 に対応していない
    • 2000 から 2005 も大きく変わったけど、2005 から 2008 も大きく変わった
      • MERGE 文とか
      • 日付型の充実とか階層型 (しかも経路列挙モデルがベース!) の追加とか
  • NULLIF 関数の例がやっぱり実用性皆無
  • プログラミングインターフェースの内容が古い
    • ADO と ODBC はまだ許せる
    • SQLJ ってまだあるの?
    • oo4o とか Pro*C とか ESQL/C とかは知らない
  • SQL テクニックがあまりテクニックじゃない
    • 列の最大値、最小値を取得するにはって・・・
    • テクニックというか、ダイジェスト
  • 関係代数の説明が変
    • 関係代数に「表」はないだろう
    • タブル (正しくはタプル) は typo だと思いたい
  • 大文字・小文字の区別は文字セットの定義の仕方によるんじゃなくて、照合順序による
  • UNION より UNION ALL の方がソートしなくていいから高速、くらいは書いておいて欲しかった*6
  • + 演算子ANSI 標準になっていて、それはいいんだけど、SQL Server での文字列の結合もここで説明してるから、紛らわしい
  • CASE 演算子じゃなくて、CASE 式。ちなみに BNF 的には COALESCE も NULLIF も CASE 式 (case abbreviation で定義されている)

それと、この本に対する指摘ではないんだけど、このサイトはまずくないか?
この本まんまじゃん*7

【改訂第3版】 SQLポケットリファレンス (POCKET REFERENCE)

【改訂第3版】 SQLポケットリファレンス (POCKET REFERENCE)

*1:SQL に対する知識は自分もまだまだ足りてません・・・

*2:SELECT 文の評価順に関係する。UNION 等を用いない単純な SQL の場合、FROM 句 → WHERE 句 → GROUP BY 句 → HAVING 句 → SELECT 句 → ORDER BY 句の順に評価する。集約・極値関数が使えるのは、GROUP BY した後なので、WHERE 句では使えない

*3:つまり、言い回しの問題であったり、あまり問題にならない問題

*4:BNF の expression 側だけ取り出したような記法で記述されている

*5:SQL:2003 の BNF はこちら→[http://savage.net.au/SQL/sql-2003-2.bnf.html:title]

*6:ただし、UNION ALL だと重複は取り除かれない

*7:コマンド命令とか、FROM 句の中身とか