Lesson2 SQL基礎


データベースとの対話を効率よく実現するための言語、それがSQLです。1974年、IBMのサンノゼの研究所の人々によって開発されました。Structured Query Languageの略で、「エス、キュー、エル」または「シークェル」と読みます。なぜ、シークェルと呼ばれるのかというと、元々はSEQUELという名前だったのですが、この名前が登録商標で問題になりでSQLと改名されたからです。これはSystemRと呼ばれるプロトタイプに実装され、大成功を収めました。(なお、SQLを実装した最初の商用データベースエンジンはORACLEです。)
SQLの最大の特徴は、データの定義や操作をリレーショナル代数に基づく2次元の表の集合として扱うことができるようになっている点です。これによって、リレーショナルデータベースの利点を十分に引き出すことが可能になり、データの独立性や柔軟性を十分に活用できるようになります。また、データベースとのインターフェースを非手続き的にすることにより、独立対話型のデータベースにも応用できるようにもなっています。非手続き的とは、1つ1つの命令を順に記述していく(手続き型)のではなくて、1つの命令ですべてを機能させる方法を言います。言い換えると、1つの文(命令)で1つの完結した意味を持つことになります。

ここでは、SQLの意味合いとその基本構文について扱います。

2.1 SQLの基礎
SQLも基本的に通常のプログラミング言語と同じように定められた規則(文法)が存在し、その文法通りに記述してデータベースとの対話を実現します。
ただ、相手がデータベースであることが前提条件のため、一般に通常のプログラミング言語とわけてデータベース言語と呼ばれることもあります。
SQLの特徴は、その全てが基本的に1つの完結した文で成り立っているということです。つまり、1つの文で(1回の問い合わせて)1つの完結した意味を持ちます。
言い換えると手続き型の条件分岐や繰り返し処理といった論理的な処理を行うことはできません。

注意:
現在リリースされているほとんどのリレーショナルデータベースでは、独自にSQL文を拡張して前途の条件文や繰り返し処理といった手続き型インターフェースを提供しています。例えば、Oracle8では PL/SQLと呼ばれています。( PL は Procedured Language の略です。)

では、まず簡単なSQL文を実際に実行してみてその文法的な意味合いを確認してみましょう。

SELECT * FROM TABLE; --テーブル情報取得

このSQL文の意味は「表TABLE から全ての行を取得せよ」という意味になります。リレーショナルデータベースでは全てのデータを表という概念でとらえます。行という言葉を別の言い方をすると、レコードということになります。また、全てということの意味で、*(アスタリスク)が使われています。

SELECTやFROMなどの句はSQL言語によって予約されているキーワードです。これらのキーワードは厳密に定められた場所に、かつ正確なパラメータを必要とします。これらの、意味合いについては後の章でもそれぞれのコマンドについて扱います。

TABLEは対象としている表の名前です。次に付いている ;(セミコロン)はここでのSQL文の終わりを意味する記号です。ただし、ここで注意したいのは全てのデータベースについてこの規則が当てはまらないということです。SQL文の終わりを示す条件は各データベースプラットフォームによります。また、同じデータベースでもそのデータベースにSQL文を発行するツールによってさまざまです。また、改行が文の終わりとして認識されるものもあります。ここでは、全てのSQL文について基本的に ; を使用します。実際に実行するプラットフォームによっては異なる場合もありますので注意しましょう。
次の --(アンダーバー2個)はコメントの始まりを示す記号です。これ以降から改行までがコメントとみなされ実際のSQL文自体に影響を与えません。

さて、ここで注意しておきたいことは、もしこの文を実行した場合に取得される(表示される)行データの順番は(基本的に)まったく意味がないということです。言い換えると、この場合、順番をあてにすることは出来ないということになります。

注意:
各リレーショナルデータベースによっては表の行の順番をインデックスや拡張された機能で必ず同じ順番ということを保証する機能を提供するシステムも沢山あります。

2.2 探索条件
先ほどのSQL文では、全ての行の取得が行われました。では、行を絞り込んで出力することは出来るのでしょうか?もちろん、できます。 WHERE句をつけて探索条件を指定します。

SELECT * FROM TABLE WHERE NO > 10;

先ほどのSQL文に WHERE NO > 10 という句が追加されています。この句の意味は「列 NO の値が 10 より大きいもの」という意味です。
すなわち、全体としてみれば「表TABLE から列 NO の値が 10 より大きい全ての行を取得せよ」という意味になります。
簡単ですよね。

まとめ
SQLは非手続きなデータベース言語です。すなわち、その全てが基本的に1つの完結した文で成り立っているということです。つまり、1つの文で(1回の問い合わせて)1つの完結した意味を持ちます。その文法は正確に定められさまざまな意味をもちます。また、探索条件の指定によって、ある限られた情報の取得のみ行うことも可能です。



本書での要点

  1. SQLの全体的な機能概要
  2. 他のプログラムとのインターフェースについて
  3. プラットフォームによるデータ型の比較
  4. 列の指定の方法
  5. さまざまなSQL文とその例題


<戻る>