keyword 8 SQL(Structured Query Language)
データベースを操作する際、個々のDBMS製品ごとにやり方や文法が異なると、製品が異なる業務システムを開発するたびに勉強しなければなりません。そうならないように、データベース(リレーショナル)の操作を行なう言語はSQL(Structured Query Language)として統一化されています。
SQLはアメリカ規格協会(ANSI)や国際標準化機構(ISO)によって標準化され規格化されています。この規格化によって、どの製品のデータベースであっても同一の文法で検索や更新を行なえるようになっています。ただし、個々の製品ごとに独自拡張が数多くあり、完全な互換性の確保はなかなか進んでいないのが現状です。
SQLを使用してデータベースを操作する場合、大きく2つのやり方に分かれます。
アプリケーションプログラムにSQL文を組み込む
JavaやC言語などで作成するアプリケーションの中にSQL文を埋め込み、アプリケーションからSQL文を発行してデータベースに接続して操作する方法です。JavaやCといった一般的な言語では、直接データベースの操作を行なうことはできません。これらの言語の中ではSQL文をデータベースに送ったり、データベースへの操作結果を受け取るためのインターフェイスを用意しています(図18)。

業務処理用に開発されたアプリケーションを使用しいてる場合、ほとんどがこのやり方となります。例えばJavaでデータを入力するための画面入出力アプリケーションを作成し、そのアプリケーションの中で入力されたデータをデータベースに登録するなどです。
直接呼び出し
通常、データベース製品には直接ユーザーがSQL文をデータベースに実行を指示するためのツールが付属されています。このツールを使用して操作することを「直接呼び出し」と言います。以前はコマンドラインツールがほとんどでしたが、GUIを用いたツールもあります。なおこのツールは製品ごとに固有であり、OracleだとSQL*Plusというツールがあります。ツールを使用した場合、データベースの操作結果は同一ウィンドウ内に表示されます。データベースの各種の管理作業をするときに使用されるケースが多いようです(図19)。

また、SQLは大きく分けて次の3種類で構成されています。
- データ定義言語(DDL:Data Definition Language)
- データ操作言語(DML:Data Manipulation Language)
- データ制御言語(DCL:Data Control Language)
DDLには表や制約条件などを定義するCREATE文や、表などを削除するDROP文などがあります。DMLには行の抽出を行なうSELECT文や、表に行を挿入するINSERT文、行を削除するDELETE文、特定の行のフィールドを更新するUPDATE文などがあります。DCLにはトランザクション処理の開始を宣言するBEGIN文、トランザクションの確定(完了)を指示するCOMMIT文、トランザクションを取り消すROLLBACK文などが含まれます(表4)。
| 言語 | SQL | 説明 |
|---|---|---|
| DML | SELECT INSERT UPDATE DELETE |
データを検索する 表に新しい行を挿入する 表の既存の行の内容を変更する 表の既存の行の内容を削除する |
| DDL | CREATE TABLE ALTER TABLE DROP TABLE |
表を作成する 表の構造を修正する 表を削除する(行も一緒に削除される) |
| DCL | COMMIT ROLLBACK |
トランザクションを確定する トランザクションを取り消す |
なお、SQL文は言語なので文法があります。その文法について基本的なものを簡単に紹介します。文法はSQLの種類によって異なります。カコミでSELECT、UPDATE、CREATE TABLEについて触れておきます。
(1)SELECT文
表からデータを検索するときに使用する
SELECT 列リスト…検索したい列を順番で指定する FROM 表リスト…対象となる表を指定する WHERE 条件式…検索したい行を絞り込みたいときに指定する(省略可) GROUP BY 列リスト…グルーピングして表示したいときに指定する(省略可) HAVING 条件式…グルーピングした結果をより絞り込みたいときに指定する(省略化) ORDER BY 列リスト…行を指定した列で並べ替えて表示したいときに指定する(省略化)
SELECT 社員番号, 氏名 FROM 社員表 WHERE 部署コード=101

(2)UPDATE文
表の既存の行の内容を変更する。変更結果は表示されないため、変更結果を確認したい場合にはSELECT文を使用する
UPDATE 表…対象の表を指定する SET 列=値, 列=値, … …修正する列と値を必要分指定する WHERE 条件式…修正の対象の行を絞り込む(省略可)
UPDATE 社員表 SET 部署コード=102 WHERE 氏名='D'
文字型の値を指定する場合は「'」(シングルクォーテーション)で値を囲む

(3)CREATE TABLE 文
表を作成するときに使用。DML 文を実行する前に対象となる表を作成しておく必要がある
CREATE 表 …表の名前を指定する (列 データ型(長さ), 列 データ型(長さ), …) …表を構成する
列をデータ型やサイズとともに指定する
CRETAE 社員表 (社員番号NUMBER(5), 氏名VARCHAR2(20), 部署コードNUMBER(3))
