ミックのレビュー一覧
-
Posted by ブクログ
SQLは一通りの構文書けるが、パフォーマンスが気になるクエリを早くする方法があまり検討つかない、そういう人にはかなり適した本だと思う。
インデックスやキャッシュに関する記述も多少押さえられている。見所は素直な発想で出てこないクエリのIOバウンドを、EXPLAIN句を使って実際に見ていくことを徹底して、なおかつ複数の解法を示しながら比較していくところか。
サブクエリやLoop処理・隣接リスト構造を、ウインドウ関数や分割関数でシンプルかつ高パフォーマンスなクエリとして記述しており、この辺の記述がかなりコンパクトにまとまっているのも類書と比べても面白い。SQLの黒魔術本もいいが、RDBに特化しているという点でははじめに本書を熟読してからでも他のテクニカルなSQL本を読み始めるのは遅くなさそう。
それにしてもこういうSQLの最近の関数駆使した書籍読んでると、MySQLの関数貧弱さがやっぱ目に付くな。。。 -
Posted by ブクログ
これで入門書と言われると、道は険しく果てしない感じがしてしまう。
ド級の初心者がこれで入門しようとしたら、
折れない気持ちを支える技術が身につくことは間違いない。
もちろんあわせてSQLの正しい技術も身につくのでお得ではある。
(以下抜粋。○:完全抜粋、●:簡略抜粋)
○SQLの世界のスキームは宣言型です。この世界では、主役は「文」ではなく「式」です。(P.98)
○RDBを考案したCoddは次のように言っています。
関係操作では、関係全体をまとめて操作の対象とする。
目的は繰り返し(ループ)をなくすることである。(P.125)
○SQLは、本省の最初で紹介したCoddの言葉からもわかるように
「脱・手続き型」を目指した言語です。
DBMSも内部的には手続き型言語で作られており、
実際の物理データへのアクセスは手続き的に行っているのですが、
その手続きレイヤを隠蔽することがSQLの理念でした。(P.159)
○「内部」が「直積の部分集合」という含意を持っていたことから類推できるとおり、
「外部」とは「直積の部分集合にならない」という意味です。(P.172)
○B-treeは、検索のアルゴリズムとしては飛び抜けて性能が良いわけではありません。
考案者の一人であるR.Bayerも、
「もし世界が完全に静的でデータが変化しないなら、
ほかのインデックス技術でも同程度のパフォーマンスは達成できるだろう」と言っています。(P.299) -
Posted by ブクログ
【目的】 データベースやSQLの知識が全くない、あるいは基礎から勉強し直したい人向けにSQLプログラミングの基礎知識を教える。
【収穫】 EXISTS、相関サブクエリなど使い方があまりわかっていなかったものについて再確認することができた。
【概要】
■句の記述順序: ①SELECT句→②FROM句→③WHERE句→④GROUP BY句→⑤HAVING句→⑥ORDER BY句
■句の実行順序: ①FROM句→②WHERE句→③GROUP BY句→④HAVING句→⑤SELECT句→⑥ORDER BY句
従って、SELECT句でつけた列の別名を、GROUP BY句では使えないがORDER BY句では使える。
■ACID特性: 原子性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、永続性(Durability)。
・SQLは真・偽だけでなく「不明(UNKNOWN)」=NULLを入れた3値論理。
・INSERT ... SELECT文によって、テーブルのデータをそのままコピーすることが可能。
・TRUNCATE文は細かい指定ができないが、DELETE文より削除処理は高速。
・ビューが保存しているのは、データではなくSELECT文そのもの。メリットは2つ→①データを存しないため記憶容量削減、②一度保存しておけば使いまわしがきく。
・スカラ・サブクエリは「1行1列の値を返すクエリ」。<や=の比較演算子の入力に使うなど用途はいろいろ。SELECT句、WHERE句、GROUP BY句、HAVING句などほとんど使える。
・相関サブクエリは、小分けしたグループ内での比較をする時に使う。サブクエリ内に結合条件を指定する。
・EXISTSは常に相関サブクエリを引数にとる。
・ウインドウ関数を使うことで高度な集計や分析もSQLで可能。
【感想】 初心者を想定した親切な解説でわかりやすい。元々仕事で使ってはいたため簡単な部分もあったが、体系的に勉強するための第一歩としては有用だった。PostgreSQLインストール用CDもついているので、独習向き。 -
Posted by ブクログ
□サマリ
良書。 SQL初級、中級者には、非常に参考になる。
本書は大きく、「魔法のSQL」、「リレーショナル・データベースの世界」の2部構成となっている
。1部ではSQLの実践的な使い方を、2部ではリレーショナルデータベースの歴史と原理・概念となっている。
2部は、SQL自体の概念に興味を持っている方向けの内容である。
1部では、SQLでこんなことができるのか!?、 と思うようなことをスマートに実現する方法が分かる。
開発者にとっては、今までAPサーバ側でクエリの結果を受け取った後に、手続き型言語(オブジェクト指向型言語)でループを回しながら処理していたようなことを、SQLで直接求めることができ、あちこちで加工処理を行うことがなくなる。
情報システム部門、SEの方にとってもAccessなどのDBクライアントでできることの幅が広がり、有用
である。
2部では、SQLの成り立ちから始まり、少し掘り下げたSQLの世界の根本をなす理論は何なのかについて、述べられている。うんちくを語るにはうってつけである。もちろん、学術的な興味をもっている方にもGood。
□良い点
普段何気なく行っていることを明文化し、こういうことをやりたい時はこうやればできる、と言ったパターンを自分の中で蓄積していく事は重要である。
本書で明示的に記載されているわけではないが、そのした方がよいなと感じる手法があちこちにあり、非常に為になったと感じた。
例えば、「既存のコード体系を新しい体系に変換して集計する」場合に、CASEとGroupBy(CASEをGroup Byの中に再度記載)を使用する、ということは頭の中の引出しに入れておきたい定石の1つである。
□悪い点
少しアカデミックな内容が多く、対象読者を狭めていると感じる(私自身は嫌いではないが…)
集合論的な内容が多かったり、関係モデルであったりと、SQLの根幹を成していることは理解できるし、筆者の熱意も伝わってくるが、果たして本書の表紙のお題目に沿っているかとうと疑問が残る。
その内容自体がすんなりと実用的なサンプル部分のバックグラウンドになっていることが納得できればよいが、少し乖離しているように感じた。