TIL

SQLの文と句と式をよくわかっていなかった

SQLでWHERE句とかCASE式とかSELECT文とかあるけど、明確に違いを説明できないことに気が付いた。

プログラミング言語でも似たような話があって、初心者の頃は式(Expression)と文(Statement)の違いがわかっていなかった。

SQLの構成要素

構成要素としては主にこの4つ。

  • 文(Statements)
  • 句(Clauses)
  • 式(Expressions)
  • 述語(Predicates)

SQLの実行単位。最後にセミコロン;を付ける。

SELECT, UPDATE, DELETE, ALTER, CREATEなどから始まってセミコロンまでが文。WHERECASEは文の構成要素だが文ではない。

文の構成要素。

FROM, WHERE, SETなどから始まるやつ。

SELECTUPDATEもそれ単独では句。これがちょっと難しい。

SELECT * --SELECT句
FROM hoge --FROM句
; --全部合わせてSELECT文

文の構成要素。

実行時に評価されて1つの値に定まる。平たく言うと値を返す。書ける場所が多い。

定数, 条件式, CASE式など。

述語

条件式のようなもの(理解が怪しい)。戻り値が必ず true, false, unknownになる。

BETWEEN, =, <>, EXISTSなど。

(2021-12-21追記)
述語の戻り値は3値だが、すべての述語が3値を返すわけではない。例えばEXISTStruefalseしか返さない。

SELECT * --SELECT句
FROM hoge --FROM句
WHERE id = 1 --WHERE句 と =述語
; --全部合わせてSELECT文

ということは、今までずっと『IN句』と覚えていたけど、正確には『IN述語』か。

他に気になること

  • SELECTでのサブクエリは文なのか?
  • 関数はどこに該当するのか?

気になるものの、今日はもう眠いので寝る

参考文献

できれば一次情報にあたりたかったが、ISO規格なので断念。(どうやら国会図書館なら見られるらしい)


ここまで書いて、理解を疎かにするのも駄目だけど、こういう細かいことを気にしすぎるのもよくないな、と思った。用語の理解よりも、実務で目的のクエリが書けることの方が大事である。


<< 記事一覧へ