SQLで重要なのはDML(データ操作言語)としてのSELECT,INSERT,UPDATE,DELETEの四つのコマンドです。このうちデータを取得するSELECTは最も多用するもので,値を集計したり,あいまい検索したり,二つのテーブルを結合する機能も持っています。テーブルの結合には,どちらのテーブルを親とするかで内部結合/外部結合の違いがあり,検索結果も変わってくるので注意が必要です。

 SQLはリレーショナル・データベース管理システム(RDBMS)を操作するための言語です。データベース・プログラミングでは,RDBMSへSQLを投げかける(「発行する」と言います)ようにプログラムを開発します。どんなプログラム言語を使っていても,プログラムから発行するSQLに違いはありません。また,SQLはANSI(米国規格協会)などによって国際的に規格化されていますので,どのRDBMS製品に対してもほとんど同じように使えます。

 SQLを覚えてしまえば,どんなプログラム言語を使っていても,様々なRDBMSにアクセスするプログラムを書けるようになります。およそ20年もの間,RDBMSがデータベースの主役の座にあり続けているのは,業界標準のSQL言語があるためといっても過言ではないでしょう。

SQLには三つの種類がある

 SQLのコマンド(SQL文と言います)は,処理内容によって大きく三つに分類できます(表1)。一つ目はDDL(Data Definition Language:データ定義言語)です。データベースやテーブルを作成するときに使います。二つ目はDML(Data Manipulation Language:データ操作言語)で,データを操作するときに使います。例えば,テーブルからデータを取得したり,テーブルにデータを追加するときに必要です。最後はDCL(DataControl Language:データ制御言語)です。トランザクション制御(データの整合性を保つための機能)などに使用します。

表1●SQLはDDL,DML,DCLの三つに大別できる。このうちプログラマが最も多く使うのはDMLだ
表1●SQLはDDL,DML,DCLの三つに大別できる。このうちプログラマが最も多く使うのはDMLだ

 プログラム上で最も多く使用するSQL文はDMLに含まれるものです。その中でも,一番重要なのがテーブルからレコードを取得するSELECT文です。SELECT文の構文を理解すれば,UPDATE文,DELETE文,INSERT文にも応用できます。

SELECTでデータ操作の基本を習得しよう

 それでは,SELECT文を使ってデータを取得してみましょう。最初に,表2の構造を持ったt_syohinテーブルにある全レコードを表示させます。

表2●商品管理テーブル「t_syohin」の定義
表2●商品管理テーブル「t_syohin」の定義

 t_syohinテーブルにはリスト1のようなデータが格納されています。通常,あるテーブルのすべての中身を確認するには次のように入力します。

SELECT * FROM テーブル名

100001   USBメモリ128             USBM   2500
100002   USBメモリ256             USBM   3500
100003   USBメモリ512             USBM   5000
100101   SDメモリカード128        SDMC   2300
100102   SDメモリカード256        SDMC   4900
100103   SDメモリカード512        SDMC   5400
100201   スマートメディア32       SM     1200
100202   スマートメディア64       SM     2500
100203   スマートメディア128      SM     5400
100C01   コンパクトフラッシュ1G   CF     8200
リスト1●t_syohinテーブルに追加するデータ

 ここではt_syohinテーブル内の全レコードを確認するので,「SELECT * FROM t_syohin;」を実行します。フリーのRDBMSであるMySQLで実行すると,図1のように結果は表の形で確認できることがわかります。SELECTの後のアスタリスク(*)は,テーブル内のすべての列を対象とすることを意味します。

図1●MySQL上にt_syohinテーブルを作成し,SELECT文を使って全レコードを確認したところ
図1●MySQL上にt_syohinテーブルを作成し,SELECT文を使って全レコードを確認したところ

 では,次に特定の列だけを表示させてみましょう。必要な列を指定してデータを取り出すには,次のように入力します。

SELECT 列名1,列名2,列名3,… FROM テーブル名

 ここではshnameとtankaの列を表示させてみます。どのようにコマンドを打てばよいかわかりますか。

SELECT shname,tanka FROM t_syohin;

とすれば,全レコードの商品名と定価を表示します。このように列を指定してデータを取り出す操作をデータベース用語で「射影」と言います。

 今度は,特定の条件に合ったレコードだけ取り出してみましょう。これを「選択」と呼びます。書式は以下の通りです。

SELECT 列名1,列名2,列名3,… FROM テーブル名 WHERE 条件式

 例えば,

SELECT shname,tanka FROM t_syohin WHERE kigou='SDMC';

を実行すると,kigou(分類記号)がSDMCのレコードを選択して,shnameとtankaの内容を表示します。

 さらに,条件式に「AND」や「OR」演算子を使うと複数の条件を記述できます。例えば,

SELECT shname,tanka FROM t_syohin WHERE tanka >= 4000 AND tanka <= 5000;

を実行すると,単価が4000円以上,5000円以下の商品を選択します。「USBメモリー512」と「SDメモリー・カード256」が表示されるはずです。

 条件式には,ある範囲内を意味する「between値1 and 値2」という書き方もできます。

SELECT shname,tanka FROM t_syohin WHERE tanka between 4000 and 5000;

を実行すると,上記と同様の結果が得られます。