12.1 関係データベースとSQL
現在の本格的なデータベースは,関係データモデルを基礎として実装さ れた関係データベースです. SML#のデータベース連携を理解し使いこなすための準備として, まず本節で,関係データベースとSQLの基本を復習しましょう.
関係データモデルでは,データを関係の集まりとして表します. 関係は,人の名前,年齢,給与などの複数の属性の関連を表し,通 常以下のような属性名をラベルとして持つテーブルで表現します.
name | age | salary |
---|---|---|
”Joe” | 21 | 10000 |
”Sue” | 31 | 20000 |
”Bob” | 41 | 20000 |
関係データベースは,これら関係の集まりを操作するシステムです. 関係は,数学的には与えられた領域の 積集合の部分集合です. 関係の要素は,個のタプルです. 実際のデータベースでは,タプルのそれぞれの要素にラベルを付け,レコー ドとして表現します. 例えば上のテーブルの1行目の要素は,レコード {name="Joe", age=21, salary=1000}に対応します. これら関係に対して,和集合演算,射影(項関係を項関 係に射影),選択(集合の特定の要素の選び出し),デカルト積 な どの演算が定義されています. これら演算系を関係代数と呼びます. ここで留意すべき点は,関係モデルはレコードの集合に対する代数的な 言語である点です. 代数的な言語は,関数定義を含まない関数型言語です.
関係データベースでは,この関係代数をSQLと呼ばれる集合操作言語で 表現します. SQLの中心は,以下のSELECT式です.
SELECT as ,, as
FROM as , , as
WHERE
ここでは,以下の約束に従ってメタ変数を使用しています.
-
•
:関係を表す式.
-
•
:関係の中の一つのレコード要素を代表する変数
-
•
:属性名
-
•
:の中の属性の値を表す式.
SELECT式の意味は以下の操作と理解できます.
-
1.
FROM節で列挙された関係式を評価し,デカルト積 を作る.
-
2.
デカルト積の任意の要素のタプルをとする.
-
3.
デカルト積から,WHERE節で指定された述語を 満たす要素のみを選び出す.
-
4.
上記の結果得られた集合の各要素に対して, レコード {=, , =} を構築する.
-
5.
それらレコードをすべて集めた集合を,この式全体の結果とする.
例えば,上の例のテーブルをPersonsとし,以下のSQL式を考えて みましょう.
SELECT P.name as name, P.age as age
FROM Persons as P
WHERE P.salary > 10000
この問い合わせ式は以下のように評価されます.
-
•
関係Personsのみのデカルト積は関係Personsそれ自身である.
-
•
関係Personsの任意のタプルをPとする.
-
•
P.Salary > 10000の条件を満たすタプルを選び出し,以下の集合を得 る.
name age salary ”Sue” 31 20000 ”Bob” 41 20000 -
•
この集合の各要素Pに対して{name=P.name, age=P.age}を 計算し,以下の集合を得る.
name age ”Sue” 31 ”Bob” 41 このテーブルは, {{name="Sue", age=31}, {name="Bob", age=31}} のようなレコードのリストの表現と理解できる.