勉強日記

チラ裏

達人に学ぶSQL徹底指南書 第2版 Chapter5 WIP

序文

  • SQLを支える基礎理論は2つ
  • SQLで使う述語論理は、「一階述語論理」...行の集合 = テーブルを対象とする
    • 0階: 行対象
    • 二階: 行の集合の集合 = テーブルの集合を対象とする
  • EXISTSは「量化」(quantification)を実現するために導入されたもの

理論編

述語とは何か

  • 論理値を返す関数
    • SQLは三値論理なのでt/f/u
  • 命題の分析に関数的アプローチを持ち込んだ点が画期的
  • テーブルは「行の集合」であるが、述語論理的に解釈すると、命題の集合(=文の集合)とみなせる
name sex age
田中 28

この表の1行目は「田中は男性で、28である」という命題を表す

  • WHERE句も、述語を組み合わせて1つの述語を作っているとみなせる
    • WHERE句全体としてtrueに評価される命題のみを抽出

存在の階層

  • =BETWEENなどと、EXISTSとの違いは、引数
    • 前者: 1行を引数にとる(一階の述語)
      • 「1行」はスカラ、0階の存在
    • 後者: 行の集合を引数にとる(二階の述語)
      • 「行の集合」は集合、一階の存在
      • 高階関数である

全称量化と存在量化

全称量化

  • 「すべてのxが条件Pを満たす」
  • For All x, ...
  • ∀xPx

存在量化

  • 「条件Pを満たすxが(少なくとも1つ)存在する」
  • There Exists x that ...
  • ∃xPx

変換公式

  • ∀xPx = ¬∃x¬Px
    • すべてのxが条件Pを満たす = 条件Pを満たさないxは一つも存在しない
  • ∃xPx = ¬∀x¬Px
    • 少なくとも1つのxが条件Pを満たす = すべてのxが条件Pを満たさないわけではない

SQLには∃にあたるEXISTSのみがある