Chapter 1. SQL

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

この章ではリレーショナルデータベースにおける数学的概念を紹介します。 これは必読書ではないので、SQL文で分からないことがあって行き詰まっている場合や、 SQLの簡単な例から取り掛かりたいのであれば、飛ばして次の章に進み、時間と忍耐力のあると きに読んで見て下さい。飽きさせない内容になっていますよ!

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

SQL はもっとも一般的なリレーショナルデータベースの 問い合わせ言語になりました。"SQL" という名前は Structured Query Language の省略形です。1974 年 に Donald Chamberlin らが 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/DS (IBM) DB2 (IBM) ORACLE (オラクル) DG/SQL (データゼネラル) SYBASE (サイベース) といったSQL製品を発表しました。

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はテーブルに対して定義された通 りの動作を行います。ただその前に、リレーショナルモデルの理論につい て学んでみたいと思います。