矢沢久雄 グレープシティ アドバイザリースタッフ

今回のキーワード
・SELECT文
・LIKE演算子
・IS演算子

 前回の連載で,取得(選択),挿入,更新,削除というデータベースの4つの基本操作が,それぞれSELECT,INSERT,UPDATE,DELETEというSQLの命令で実現されることを説明しました。今回は,Microsoft Accessを使って実際にSQL文を実行し,その結果を確認してみたいと思います。SQLの命令の中で,最も頻繁に使われるのは,何と言ってもSELECT文です。「SELECT文を制する者はSQLを制す!」と言っても過言ではないでしょう。SELECT文を使いこなすには,WHERE以降に置かれる検索条件の指定方法をマスターすることがポイントとなります。

AccessでSQL文を実行する方法

 たぶん皆さんは,何らかの目的でAccessを使った経験があるでしょう。Accessでは,SQLを知らないユーザーであっても容易にデータベースを構築し利用できるように,あらゆる操作をビジュアルなツールで実現できるようになっています。ただし,Accessも立派なDBMSであり,直接SQL文を与えて操作することも可能なのです。実際にやってみましょう。

図1●MeishiTblテーブル
図2●SQL文を実行するための準備
図3●SQL文を入力するウインドウ
図4●SQL文の実行結果
 Accessには,いくつかのバージョンがありますが,ここではAccess 2000を使います(他のバージョンでも使い方は,ほとんど同じです)。まず,Accessを起動し,前回と同様に名刺データベースを想定したMeisiTblテーブル1つだけから構成されるサンプルのデータベースを作成したら,適当なデータを何件か入力してください。データベースは,Meisi.mdbというファイル名で保存します(図1[拡大表示])。

 Accessに常時表示されている「Meisi:データベース」というタイトルのウインドウの左側で「クエリ」アイコンをクリックし,右側の選択肢にある「デザインビューでクエリを作成する」をダブルクリックしてください(図2[拡大表示])。これによって,「テーブルの表示」という小さなウインドウが開きますが,[閉じる]ボタンをクリックして閉じてしまいましょう。

 「表示」メニューから「SQLビュー」を選択すると,「クエリ1:選択クエリ」という名前のテキスト・エディタのようなウインドウが表示されます。これで,準備完了です。このウインドウに任意のSQL文を入力し,「クエリ」メニューから「実行」を選択すれば,SQL文が実行されます。

 ためしに,SELECT * FROM MeisiTbl;というSQL文を入力して,実行してみましょう(図3[拡大表示])。結果として取得されたデータは,同じウインドウに表形式で表示されます(図4[拡大表示])。ウインドウのタイトル・バーを右クリックして表示されるメニューから「SQLビュー」を選択すれば,元のSQL文の表示に戻すこともできます。

SELECT文の構文

 前回の復習になりますが,SELECT文の基本構文は,以下のようになります。

SELECT 列名 FROM テーブル名 WHERE 検索条件;

「テーブル名」には,取得したいデータが格納されたテーブルの名前を指定します。「列名」には,テーブル内の列の名前を指定します。WHERE以降には,特定の行だけを取得するための検索条件を指定します。WHERE以降はオプションであり,省略可能です。省略すると無条件検索すなわち「すべてのデータを取得せよ」ということになります。先ほど実行したSELECT * FROM MeisiTbl;は,無条件検索です。

 複数の列名やテーブル名を指定する場合は,それらをカンマ(,)で区切ります。どのテーブルに属する列であるかを明示する場合は,列名に「テーブル名.列名」と指定します。具体例は,第4回でお見せします。

検索条件の指定

 SELECT文のWHERE節では,「WHERE 列名 演算子 値」という書式で検索条件を指定します。使用できる演算子には,表1に示したものがあります。

演算子意味
=等しい
<>等しくない
より大
より小
>=以上
<=以下
LIKE部分的な一致
ISヌルとの比較
表1●検索条件の演算子
図5●40歳未満の人の氏名と年齢を取得する

 具体例を示しましょう。以下は,MeisiTblテーブルからNenreiが40歳未満の人のShimeiとNenreiを取得するSQL文です。実行結果は,図5[拡大表示]のようになります。

SELECT Shimei,Nenrei FROM MeisiTbl WHERE Nenrei < 40;

LIKE演算子

 LIKE演算子は,部分的な一致で検索するものです。部分的な一致とは,例えば,氏名の中に '郎' という文字を含んでいる人を検索するような場合に使われます。この場合には,演算子の右側に指定される値に,任意の文字または文字列を表す記号である“ワイルド・カード”と呼ばれるものを挿入します。Accessでは,任意の文字をクエスチョン・マーク(?),任意の文字列をアスタリスク(*)で表します。これは,Windowsでファイル名を指定する時に使われるワイルド・カードと同じです。ただし他のDBMSでは“?”や“*”の代わりに,“_”や“%”を使う場合があるので注意してください。

 以下は,氏名の中に '郎' という文字を含んでいる人のShimeiを取得するSQL文です。実行結果は,「日経太郎」,「日経次郎」となります。

SELECT Shimei FROM MeisiTbl WHERE Shimei LIKE '*郎';

IS演算子

 IS演算子は,列の値がヌル(空)すなわち未入力であるかどうかを調べるものです。以下のSQLは,Neireiが未入力の行をすべて取得するものです。

SELECT * FROM MeishiTbl WHERE Nenrei IS NULL;

 NULLは,文字通りヌルを表しています。ヌルでないことを比較したい場合は,後で説明する論理演算子を使ってWHERE Nenrei IS NOT NULLのように指定します。

◎今回の復習
・SELECT文のWHERE節では「WHERE 列名 演算子 値」という書式で検索条件を指定する
・LIKE演算子は,部分的な一致で検索する
・IS演算子は,列の値がヌル(空)すなわち未入力であるかどうかを調べる