SQL標準
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/06/06 15:54 UTC 版)
SQL(Structured Query Language)は、最初に関係データベースの標準言語となったが、いくつかの面で関係モデル(リレーショナルモデル)から逸脱している。SQLは、これらの関係モデルからの逸脱を根拠として批判されることがある(Date C. J. "Database in Depth" 参照)。2008年現在、ISO SQL 標準は、関係モデルに言及しておらず、関係モデルの用語も概念も使っていない。しかしSQLを使って関係モデルに適合するデータベースを構築することは、いくつかのSQLの機能を使わなければ、可能である。 まずSQLの用語とそれに相当する関係モデルの用語の対応関係を示す。 SQLの用語と関係モデルの用語の対応関係SQLの用語関係モデルの用語表(テーブル; table) 関係変数(リレーション変数; relvar; relation variable) 行(row) 組(タプル; tuple) 列(カラム; column) 属性(attribute) 以下にSQL標準における関係モデルからの逸脱を記述する。ただしSQL標準の全てを実装しているデータベース管理システム (DBMS) はほとんど存在しない。ここで述べる関係モデルからの逸脱のいくつかについては、ほとんどの SQL DBMS で逸脱している。 NULLはほとんどの SQL DBMS にも存在するが、一つの表(関係モデルでは関係変数に相当)に同じ名称を2つ(以上)の列(属性に相当)に重複してつけることができるかどうか、名前の無い列が許容されるかどうかについては、SQL DBMS ごとにさまざまである。 行の重複 SQLの一つの表では、同一内容の行が2回以上出現することを許容する。関係モデルの一つの関係変数では、同一内容の組が2回以上出現することはありえない。 名前の無い列 SQLの表では、名前の無い列が存在することがあり、このためそのような列はSQLの式では参照できない。関係モデルでは、あらゆる属性に名前が必要であり参照可能である必要がある。 列の名前の重複 SQLの一つの表では、2つ以上の列に対して同じ名前をつけることができ、このためそのような列は明らかにあいまいでありSQLの式では参照できない。関係モデルの一つの関係変数では、2つ以上の属性に対して同じ名前をつけることはできず、そのためあらゆる属性は参照可能である。 列の順序づけの重要性 SQLの表では、列の順序が定義されており重要である。この結果の一つとして直積と和の演算のSQL実装は交換法則が成立する演算ではなくなっている。関係モデルの関係変数では、列は順序づけられていないため、直積演算と和演算における交換法則が成立する。 CHECK OPTION の無いビュー SQL では CHECK OPTION をつけずに定義されたビューに対して更新を行うことができる。しかしその結果そうしたビューへの更新は必ずしも更新対象(当該ビュー)に反映されるわけではない。例えばSQLでは、ビューに対する INSERT の実行は可能であるが、追加された行がビューに反映されないことがある。またビューに UPDATE を行った場合、ビューから更新対象データが消える可能性がある。関係モデルでは、ビューに対する更新は基底関係変数に対する更新と同じ結果になることが必要である。 表は必ず1つ以上の列を持つ SQLでは表は少なくとも1つの列を持つ必要があり、列が0個である表は定義できない。関係モデルでは属性が0個である関係が2つ存在する。そのうち1つは濃度(組の数)が1つであり、もう1つの関係は濃度が0である。関係モデルにおいてこの2つの関係は自由変数が0個である述語の外延を表現するために必要である。 NULL NULLという特別な印(マーク)は、ある行のある列の値など、原則としてどこであれSQLの値を設定できるところであれば値の代わりにつけることができる。この関係モデルからの逸脱は、SQLにおいてこの場当たり的な概念の実装が三値論理の採用と関連しているという事実から、生じる。三値論理においては、NULLをNULL自身と比較すると真(true)とは評価されず、unknown という第三の値に評価される。またNULLをNULL以外の何かと比較すると偽(false)とは評価されず、unknown と評価される。比較におけるこのような振る舞いのために、NULLは値ではなく印(マーク)であると説明されるのである。関係モデルは排中律に依拠している。排中律のもとでは、真と評価されないものは何であれ偽と評価され、偽と評価されないものは何であれ真と評価される。関係モデルでは、関係の本体の全ての組の全ての属性には必ず値が割り当てられている。この逸脱は一部の人々の間で論争の対象となった。なぜなら、エドガー・F・コッド自身が最終的に特殊な印と四値論理の採用を提唱したからである。ただしこの四値論理の提唱はコッドの見解に基づいていた。コッドの見解とは値の代わりに特殊な印をつけたいと思う背景には2つの異なる理由があるということである。こうした経緯はさらに多くの異なる理由の発見するであろうような四値論理の採用に対する反対者を招き、19もの異なる理由が言及された。その場合は二十一値論理が必要となるであろう。SQL自体は、NULLを「未知の値」の表現以外にもいくつかの用途に使っている。例えば、空集合にSUM関数(合計値計算)を適用するとNULLとなる。これは0を意味する。空集合の平均値はNULLである。これは未定義を意味する。NULLは左外部結合の結果でも現れる。これは「右側には対応する行が存在しないため値は無い」を意味する。
※この「SQL標準」の解説は、「関係モデル」の解説の一部です。
「SQL標準」を含む「関係モデル」の記事については、「関係モデル」の概要を参照ください。
- SQL標準のページへのリンク