銀河鉄道

集合で考えるSQL|結果を宣言すればエンジンが動く宣言型 Think in Sets

サムネイル
Think in SetsSQLはお願いする言語
Think in sets.
セットで考えよ

セット?

「集合」という数学の概念が
SQLのベースなの

SQLはset-based techniques|集合ベースのテクニック


ingrained procedural reflexes can often prevent us from seeing simpler set-based techniques.
(通常は)「手続き」に慣れすぎていて、集合ベースが理解しづらい

SQL for Smarties: Advanced SQL Programming

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

procedural(手続き)と
declarative(宣言型)の違い

手続き|procedural

  • 1行ごとの手続き処理
  • 順次処理
    • ひとつひとつ順番
  • フロー制御|flow control
    • ループやifのあわせ技

なんか安心

宣言型|declarative(デクララティブ)

  • 「何をしたいか」を記述する
  • 集合単位で処理する
    • セットベース

「集合単位」が意味不明

卵焼きの例で見てみよう

手続き|手順をひとつひとつ書く

  1. フライパンを熱する
  2. 油をひく
  3. 卵を割る
  4. 流し込んで巻く

これぞ卵焼き!

procedural
  • 「どうやるか」を細かく指示する
    • How
  • ひとつひとつの手順を命令する
  • 書く量が多くなるけど、細かい制御ができる

declarative「何が欲しいか」だけを伝える

  1. 卵焼き作って!

以上。

procedural
  • 「何がほしいか」を伝える
    • Query
  • コンピュータ(エンジン)がやり方を考えてくれる
  • 書くのがシンプルで、エラーも少ない

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

実は、裏には
実行部隊が隠れているからよ

SQLを実行する「SQLエンジン」


Thinking procedurally means you don’t trust the engine.
「手続き」を考えるのは、エンジンを信用してないから

SQL for Smarties: Advanced SQL Programming

隠れて仕事をするのが
エンジン

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

なんで隠れてるの?

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設計徹底指南書(ミック)

任せるためには
エンジンが何をしているかを
知っておくといいかも

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧