Chapter 1. SQL

Table of Contents
1.1. リレーショナルデータモデル
1.2. リレーショナルデータモデルの形式
1.3. リレーショナルデータモデルの操作
1.4. SQL 言語

この章ではリレーショナルデータベースにおける数学的概念を紹介します。 これは必読書ではないので、泥沼にはまりそうになったり簡単な例から取 り掛かりたいのであれば、飛ばして次の章に進み、時間と忍耐力のあると きに戻ってきてください。内容はおもしろくぎっしり詰め込まれています!

この内容の元になっているのは Stefan Simkovics の修士論文 (Simkovics, 1998) の一部です。

SQL はもっとも一般的なリレーショナルデータベースの 問い合わせ言語になっています。"SQL" という名前は Structured Query Language の省略形です。1974 年 に Bonald Chambelin らが IBMの研究所において SEQUEL (Structured English Query Language)という言語を 定義しました。この言語は 1974 年から 75 年にかけて SEQUEL-XRM という名 称で IBM が最初にプロトタイプを実装しました。1976 年から 77 年には SEQUEL/2 と言われる SEQUEL の改定版が定義され、その後名称が SQLへと変更されました。

System R と呼ばれた新しいプロトタイプが 1977年に IBM によって開発され ました。System R は SEQUEL/2 (現在の SQL) の大部分 をサブセットとして実装し、そのプロジェクトの間にたくさんの変更が SQLに対して施されました。System R は IBM 内のサイト やいくつかの選ばれた顧客サイトなどの多数のユーザサイトにインストールさ れました。これらのユーザサイトで System R は受け入れられ成功し IBM は System R をベースとしたSQL 言語を実装した商用製品の 開発を開始しました。

次の年以降、IBM とその他のベンダーが以下のような SQL製品を発表しました。 SQL/DS (IBM) DB2 (IBM) ORACLE (Oracle Corp.) DG/SQL (Data General Corp.) SYBASE (Sybase Inc.)

SQLは現在では公式の規格です。1982年に米国規格協会 (ANSI)が標準リレーショナル言語のための提案の開発を X3H2 というデータベース委員会に依頼しました。この提案は1986年に批准さ れ、本質的にSQLのIBM方言からなっていました。1987 年 にこのANSI規格が国際標準化機構 (ISO)によって国際標準として受け入れられました。非公 式に、SQLの最初の規格バージョンは "SQL/86"と呼ばれます。1989年に最初の規格は拡張され、 この新しい規格はしばしば、また非公式に"SQL/89"と呼ば れています。また1989年には、Database Language Embedded SQL(ESQL)と呼ばれる 関連した規格が開発されました。

ISOANSIの両委員会は長年最初 の規格の大いに拡張されたバージョンの定義に取り組んでいました。これが非 公式にSQL2 もしくは SQL/92と呼ばれました。このバー ジョンは1992年の遅くに「国際標準 ISO/IEC 9075:1992 データベース言語 SQL」 として批准された規格となりました。 "SQL規格"に言及するときに通常意味するバージョンが SQL/92です。SQL/92の詳細な定義は Date and Darwen, 1997に決められています。このドキュ メントを書いている時点でSQL3 と非公式に呼ばれる新しい規格が開発中です。SQL をチュー リング完備にする計画があります。すなわち、計算可能なあらゆる問い合わせ (例えば再帰問い合わせ)ができるというものです。これは非常に複雑な作業で す。したがって新しい規格の完成は1999年より前とは考えられません。

[訳注]SQL3 は、SQL92 の制定から約7年の歳月をかけて大幅に改訂され、1999 年に SQL99 として ISO,ANSIで認可されています。SQL92 はリレーショナルデー タベースのための完全な言語となることを目指していましたが、SQL99 ではオ ブジェクト指向の考え方を SQL に取り入れています。

1.1. リレーショナルデータモデル

先にのべたように、SQLはリレーショナル言語です、これ は 1970 年に E.F. Codd が初めて出版したrelational data modelに基づくことを意味しています。後でリレーショナルモデ ル(リレーショナルデータモデルの形式) の形式記述 を与えますが、まず最初により直感的な見解からそれを見てみたいと思います。

リレーショナルデータベースはユーザからは、 テーブルの(そしてテーブルだけからなる)集合に見えます。テーブルは行 と列からなります。各行はテーブルにあるレコードの属性を表します。 SUPPLIER と PART データベースは3つのテーブ ルからなるデータベースの例を示しています。

Example 1-1. SUPPLIER と PART データベース

SUPPLIER:                   SELLS:
 SNO |  SNAME  |  CITY       SNO | PNO
----+---------+--------     -----+-----
 1  |  Smith  | London        1  |  1
 2  |  Jones  | Paris         1  |  2
 3  |  Adams  | Vienna        2  |  4
 4  |  Blake  | Rome          3  |  1
                              3  |  3
                              4  |  2
PART:                         4  |  3
 PNO |  PNAME  |  PRICE       4  |  4
----+---------+---------
 1  |  Screw  |   10
 2  |  Nut    |    8
 3  |  Bolt   |   15
 4  |  Cam    |   25
     

PART や SUPPLIER テーブル は実体として考え られ、SELLS テーブルは特定の PART と特定の SUPPLIER 間の 関連と考えられるかもしれません。

後に示す通り、SQLはまさに定義されたテーブルの通 り操作をしますが、その前にリレーショナルモデルの理論について学んで みたいと思います。