RDB
集合論に基づく。それまでのDBよりも実行効率は悪いが柔軟な利点があった 実践向け
CASE式のススメ
便利なのに意外に使われていないCASE式を、もっと活用しましょう。
レイアウトの見やすい CodeZine 版はこちら → 前編 後編。
自己結合の使い方
CASE式に劣らず強力だけど、動作がイメージしづらくてあまり利用されていない自己結合についての解説。「集合指向言語としてのSQL:その1」
HAVING句の力
「集合指向言語としてのSQL:その2」です。影の薄い脇役と思われがちなHAVING句の復権のために。いい出来だと思う。
外部結合の使い方
結合シリーズ第2弾。さあ、みんなで結合しよう。
SQLでループ! 相関サブクエリの使い方
初心者が必ずつまづく相関サブクエリについて、基礎から解説しました。相関サブクエリも集合の「カット」という操作なのだ、という点を理解してくれれば、マスターしたも同然。
相関サブクエリで行と行を比較する
「集合指向言語としてのSQL:その3」。これもなかなか。「自己結合の使い方」と併せ読むと面白いかも。
SQLで数列を扱う
「数列」というのは、あくまで順序集合の一番分かりやすい例として出したものなので、方法論自体は一般性の高いものです。なにげに量化の話まで入れてしまった欲張りな回。
SQLで連番を扱う
初出は『Web+DB Press』Vol.45。「連番」というのも、SQL ではなかなか素直に扱えない対象です。しかし、近年では ROW_NUMBER、RANK など手続き型の考え方で操作できる関数が追加されるようになったため、かなりとっつきやすくなっています。
SQLで集合演算
UNION、INTERSECT、EXCEPTなどを中心に、SQLでの集合演算の利用方法を解説した記事です。「集合指向言語としてのSQL:その4」
帰ってきたHAVING句
ジュワッ! 「HAVING句の力」第2弾です。HAVING と GROUP BY の解説としては決定版といって差し支えないでしょう。類別と特性関数の話も出せて満足な一品。
更新なんてこわくない!
SQL というと、どうしても検索に主眼が置かれますが、実は最近は更新の手段もかなり充実しており、DB 内部でさまざまなデータ編集をすることが可能になっています。
スカラ・サブクエリの使い方
スカラ値と複合値というのは、「第1正規形とは何か」という関係モデルの基礎に関わる重要な区分です。それを理解すると SQL の中でのスカラ値の使い方が分かります。
OLAP関数で強力な統計処理を実現!
『Web+DB Press』で2年間連載していた「SQLアタマアカデミー」の最終回。SQL:2003で標準に入った OLAP 関数(ウィンドウ関数、分析関数)について、基礎から応用まで一通り理解できるよう解説しています。
SQLアタマ養成講座 (PDF) (HTML)
初出は『Web+DB Press』Vol.44。SQLの重要な三機能:分岐(CASE式)、ループ(相関サブクエリ、OLAP関数)、カット(GROUP BY、PARTITION BY)の使い方を解説したもの。「中級入門」の対象者を意識して書きました。
SQLで木と階層構造のデータを扱う(1)――入れ子集合モデル
近年、データベースの世界で要望の高まりを見せている木構造の扱い方を、「入れ子集合モデル」という独創的な方法に基づいて解説します。このモデルは、初めて知るときはけっこう感動します。
『Web+DB Press』版はこちら。
SQLで木と階層構造のデータを扱う(2)――経路列挙モデル
木構造の扱い方第2弾です。今度は、ノードをディレクトリに見立てて、文字列操作を駆使します。ファイルシステムの発想とも共通点の多い興味深い方法論です。
SQLで木と階層構造のデータを扱う(3)――入れ子区間モデル
入れ子集合モデルには、整数を座標に使っているため、更新時のパフォーマンスが悪いという欠点がありました。それを克服するため、整数から有理数へ一般化したモデル。これも初めて知るときには震えがきます。
SQLで数学パズルを解く (数論編) (組み合わせ論編)
どうせ SQL を学ぶなら、楽しみながら学べた方が嬉しいもの。問題、解法も随時受付中。
設計・その他
テーブル設計のグレーゾーン
SQL のテクニックから離れて、テーブル設計の話。それもあまり行儀のよくない一癖ある連中ばかり集めてみました。
ビューの功罪
ビューは諸刃の剣です。ご利用は計画的に。
SQLプログラミング作法
大したことではないのですが、SQL にもマナーはあった方がいいでしょう。
手続き型から宣言型・集合指向に頭を切り替えるための7か条
SQL を学ぶときに一番の障壁となるのが、手続き型言語から無意識のうちに身に付けた考え方です。手続き型言語から SQL へ、うまくジャンプするためのコツをまとめました。
SQL緊急救命室
第1回 サブクエリ・パラノイア~副問い合わせ乱用による性能劣化を治療せよ!
第2回 冗長性症候群~条件分岐をUNIONで表現するなかれ
第3回 ループ依存症~手続き型の呪縛を打ち破れ!
第4回 スーパーソルジャー病~すべての問題をやみくもにコーディングで解くべからず
第5回 時代錯誤症候群~進化し続けるSQLに取り残されるな!
最終回 更新時合併症~冗長なサブクエリ,性能劣化,実装依存
アーキテクチャ
記憶装置のトレードオフとバッファの考え方
「DBアタマアカデミー」第1回。どんな DBMS でも必ず持っている「バッファ」というメモリ領域の背後にある仕組みと思想についての解説。
トランザクションを知ればデータベースがわかる
分かっているようでなかなか深く理解しないままになりがちな概念「トランザクション」について。同時実行制御、WAL、スラッシング、ACID など。
性能改善の鍵,インデックスの特性を知る
データベースのインデックスでよく使われるアルゴリズム B-tree(B+tree) および ハッシュの原理についての解説。なかなかよくまとめられた、と自賛の一品です。
バックアップとリカバリ
運用設計で外すことのできないバックアップ/リカバリについて。実際のところリカバリの手順というのは一本道なので、主にバリエーションの多いバックアップについて解説しています。
クエリ評価エンジンと実行計画
リレーショナル・データベースのパフォーマンスを決定する SQL の実行計画、およびそれを立案するクエリ評価エンジンの動作について。
基礎理論
なぜ"関係"モデルという名前なの?
なぜ「表モデル」という名前ではないのか?その疑問に答えるための小文。関係の正確な定義を知りたい人向け。
アドレス、この巨大な怪物
関係モデルはなぜ考え出されたのか。それはアドレスという怪物からデータベースを解放するためのアイデアでした。
SQLの中の述語論理
IN述語、EXISTS述語、LIKE述語 ・・・・・・ 述語って何だ? それは関数 ―― 正確には述語論理の基礎概念である「命題関数」 ―― のことです。データベースの世界から見た述語論理入門。
そんなあなたが大好きよ
いやあ、SQL って本当に、いいもんですね。
GROUP BYとPARTITION BY
普段なにげなく使っているGROUP BYとPARTITION BY。本当はどういう機能を果たしているか、分かりますか? SQL の背後にある集合論と群論の考え方を解説します。
再帰集合とSQL
ランキングや累計を求めるクエリでは、ノイマン型の再帰集合が重要な役割を果たします。そのアイデアの源泉は、自然数の帰納的定義という集合論の基礎にまで遡ります。その理論的背景を探るコラム。
歴史
リレーショナル・データベースの歴史 (1) (2) (3)
リレーショナル・データベースが誕生してから30年の歴史を、データベース界の指導的論客である C.J.Date が概観した連載の要約です。
ちなみにこの連載、好評だったのか本にもなってます。
国家・データベース・イノベーション
リレーショナル・データベースの歴史を見ると、関係モデルというアイデアが破壊的技術であり、その誕生史はそのままイノベーションのジレンマを地で行く展開だったことが分かります。
【決定版】RDBMSとNoSQLにみるDB近現代史
エンジニアHUBに掲載された記事。RDBからNoSQLまでの歴史を概観しています。
NULLにまつわる諸問題
3値論理――神のいない論理
3値論理という奇妙な体系にまつわるトピックを紹介します。なぜ「= NULL」ではなく「IS NULL」と書かなくてはならないのか分からない人へ向けて書きました。
3値論理とNULL
CodeZine用に具体例をかなり増やしました。
SQLにおける論理演算
あまり NULL 絡みの話はしておらず、どちらかというと論理演算の便利さを紹介したのですが、まあ分類で言うとやはりこの位置かな。
NULL撲滅委員会
万国のDBエンジニア団結せよ。
存在と無
NULL と空集合の違いって分かります?
130値論理
身の毛もよだつ多値論理の話。こえー。
その他
神は細部に宿る(图灵访谈)
『SQL ゼロからはじめるデータベース操作 第2版』の中国語版刊行時の出版社によるインタビュー。
『SQLパズル 第2版』サポートページ
拙訳 J.セルコ『SQLパズル 第2版』(翔泳社, 2007)のサポートページ。現在8刷。セルコの本が日本のSQLプログラマに親しまれるのは良いことです。
『SQL徹底指南書』サポートページ
拙著『達人に学ぶ SQL徹底指南書』(翔泳社, 2008)のサポートページ。皆様に愛されて10刷になりました。
「みんなまとめて面倒みよう」 (PDF)
2008年2月13日にデブサミで行った講演の資料。『指南書』発売に合わせたプロモーションということで、書籍の宣伝も兼ねて RDB と SQL について話しました。
「リレーショナルとはどんなことか」 (PDF)
2010年5月28日の Club DB2 第103回で行った講演の資料。破壊的技術としての RDB 、集合指向と手続き型の対比について。
「達人が語るこんなデータベース設計はヤダ!」 (PDF)
2012年7月13日の Club DB2 第146回で行った講演の資料。データベース設計の落とし穴やその背景にある理由などについて。
「ループをめぐる物語」 (PDF)
2015年5月15日の Club DB2 第200回で行った講演の資料。『SQL実践入門』出版記念もかねて、ウィンドウ関数を利用したレコードの順序を意識したコーディングのメリットについて。
「RDBパフォーマンス設計大全」 (PDF)
Database Lounge Tokyo #5 (2017.09.19)で行った講演の資料。パフォーマンス設計における考え方と注意点を中心に議論しました。 「SQL実践入門Night」 (PDF)
SQL実践入門Night (2018.01.25)で行った講演の資料。『SQL実践入門』のメインテーマである手続き型の復権について話しました。