集合で考えるSQL|結果を宣言すればエンジンが動く宣言型 Think in Sets
作成日:2025-05-05
更新日:2025-05-09

Think in sets.
セットで考えよ
セットで考えよ

セット?

「集合」という数学の概念が
SQLのベースなの
SQLはset-based techniques|集合ベースのテクニック
SQL for Smarties: Advanced SQL Programming
ingrained procedural reflexes can often prevent us from seeing simpler set-based techniques.
(通常は)「手続き」に慣れすぎていて、集合ベースが理解しづらい

「手続き」ってなんだっけ?

procedural(手続き)と
declarative(宣言型)の違い
手続き|procedural
- 1行ごとの手続き処理
- 順次処理
- ひとつひとつ順番
- フロー制御|flow control
- ループやifのあわせ技

なんか安心
宣言型|declarative(デクララティブ)
- 「何をしたいか」を記述する
- 集合単位で処理する
- セットベース

「集合単位」が意味不明

卵焼きの例で見てみよう
手続き|手順をひとつひとつ書く
- フライパンを熱する
- 油をひく
- 卵を割る
- 流し込んで巻く
これぞ卵焼き!
procedural
- 「どうやるか」を細かく指示する
- How
- ひとつひとつの手順を命令する
- 書く量が多くなるけど、細かい制御ができる
declarative|「何が欲しいか」だけを伝える
- 卵焼き作って!
以上。
procedural
- 「何がほしいか」を伝える
- Query
- コンピュータ(エンジン)がやり方を考えてくれる
- 書くのがシンプルで、エラーも少ない

なぜ「卵焼き作って」だけで
伝わるの?

実は、裏には
実行部隊が隠れているからよ
SQLを実行する「SQLエンジン」
SQL for Smarties: Advanced SQL Programming
Thinking procedurally means you don’t trust the engine.
「手続き」を考えるのは、エンジンを信用してないから

隠れて仕事をするのが
エンジン
SQLエンジン
- SQL文(命令書)を受け取り、
- 裏でガシガシ操作し、
- どう処理するのが最速かを考えつつ操作している
- 結果を返す

なんで隠れてるの?

SQLに限らず
隠したいのは常の欲求
処理はなるべく隠したい|そのほうが安全だから
人間が知る必要のないものは知らせない
- object-oriented (オブジェクト指向)
- 「どうやるか」をクラスに隠したい(encapsulation)
- SQL (set-oriented)
- 「どうやるか」すら書かせない
- エンジンがすべてやる

全部やってくれるエンジン、
すごい…

そもそもは
エンジンを作る人がエンジニアなのよ
誰かが作ってくれたエンジンを信用せよ
エンジンを信用しないと無駄が増える
- 「これお願い」で済むことを、
- 余計なおせっかいで
- 細かいところまで指示を出してしまう
- 結果的に遅くなる

エンジンを無視しない、
信頼して任せる

そもそもSQLとは
お願いする言語よね
SQLはお願いする( = Query) 言語
Tell the engine what, not how.
- 人間のすることは、“何がほしいか”を明確にすることだけ
- 手順は教えなくていい
- 結果を語れ
SQL文は“願いごと”
- Query とはお願いするという意味
- Say what you want.
- 欲しいものを言えばいい
- Let the engine figure out how.
- あとはエンジンにまかせよう

SQLエンジンって
秘書みたい

AIとの付き合い方とも似てるね
何が欲しいか
明確にすれば
答えは出る
明確にすれば
答えは出る
参考文献
- Joe Celko’s SQL for Smarties: Advanced SQL Programming
- 達人に学ぶ SQL徹底指南書(ミック)
- 達人に学ぶDB設計徹底指南書(ミック)

任せるためには
エンジンが何をしているかを
知っておくといいかも
2025-05-05
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-
The WHERE clause removesrows SQL[JOINとWHEREのNULLに注意]テーブルを繋げてふるいにかける -
sqlprocessingorder SQL|SELECT FROMの処理順をExcel方式で確認する -
[SQL]inner-most isthe center JOINの書き方[まずA+B]最も内側のテーブルが一番大事である|inner-most -
Think fromFROM SQLはFROMから考え始める|まず構造を作ってから詳細へ -
一斉変化がSQLを書くコツ SQLを書くコツ|集合は一斉に変化することを理解する -
起源は意味のあるロゴス データベースの論理キーとは|意味と理由を大事にするロゴスが起源