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

今回のキーワード
・SQLの構文
・SELECT文

 今回は,SQL(SQL文)の構文を説明します。前回説明したように,SQLは,DBMSに与えるクエリー(問い合わせ命令)を記述するものであり,DBMSの中には,リレーショナル・データベースがある,ということを念頭に置いて読んでください。あらかじめ申し上げておきますが,およそコンピュータの世界で言語と呼ばれているものは,構文がすべて英語に似ています。言語を使って命令を記述するわけですから,命令文の構文になっています。英語の命令文の構文は,“Give me money.”のように「動詞+目的語」となります。これは,SQLでも同様です。

 SQLは,DBMSに命令を与えるものですが,DBMSのすべての機能を操作できるわけではありません。SQLにできることは,データベースの作成,データベースの読み書き,及びアクセス権の設定などをDBMSに指示することです。SQLにできないことは,データベースのバックアップやXML形式への変換などのように,DBMSの種類に応じてオプションで提供されている機能です。とはいえ,あらゆるDBMSに共通した,一般的にデータベース操作と呼べるような機能は,SQLで実現できると考えて間違いありません。

 SQLの文法で記述するSQL文は,すべて命令文なのですから,「○○せよ」に相当する動詞(命令)が数多く用意されています。これらの命令は,データベース作成,アクセス権の設定などをするDDL(Data Definition Language)と,データベースの読み書きをするDML(Data Management Language)に大別されます。この連載では,DMLを取り上げます。データベースの操作とは,「取得(選択)」,「挿入」,「更新」,「削除」の4つが基本であり,これらを表すSQLの命令は,それぞれSELECT,INSERT,UPDATE,DELETEとなります。

SQLの基本構文

図1●SQLの構文は英語の命令文に似ている
 くどうようですが,SQLの構文は,英語の命令文に似ています。さまざまなSQL文を分析してみると,すべて「動詞+目的語+修飾語」の順序になっています(修飾語がない場合もあります)。SQL文の末尾には,ピリオドでなくセミコロン(;)を置きます。当然のことですが,世界共通言語であるSQLは,半角英数記号で命令を記述します。ただし,テーブル名,フィールド名などのデータは,全角文字でも構いません(図1[拡大表示])。

図2●MeisiTblテーブル
 まずは,SQL文の具体例を示しましょう。実際にどのようにSQL文を入力するかについては第3回で説明します。ここでは,SQL文とはこんなものかということを掴んでください。図2[拡大表示]に示したMeisiTblテーブル(名刺データベースを想定しています)からShimeiフィールドを取得するSQL文は,以下のようになります。

 SELECT Shimei FROM MeisiTbl;  

 SELECTが動詞,Shimeiが目的語,FROM MeisiTblが修飾語です。SQLを英語のつもりで翻訳してみてください。”SELECT Shimei FROM MeisiTbl”=「MeisiTblからShimeiを選択せよ」ですから,本当に英語に似ていることが分かりますね。

 このSQL文を実行すると,「日経太郎」,「日経次郎」,「日経花子」というShimeiフィールドの値が読み出されます。SQL文の実行は,何らかのアプリケーションで行われ,読み出されたデータは,アプリケーションの画面に表示されます。データベース・アプリケーションの作成方法は,連載の第5回で説明する予定です。

 SQLは,命令の大文字と小文字を区別しません。したがって,SELECTをselectやSelectと記述しても構いません。この連載では,すべて大文字でSQLを記述することにします。

 検索条件などとして,SQL文の中に数値や文字列のデータを記述する場合もあります。数値はそのまま記述し,文字列はシングル・クォーテーション(')で囲みます。例えば,123は数値ですが,'123' や '漢字' は文字列とみなされます。

 SELECT Shimei FROM MeisiTbl WHERE Nenrei >= 30;  

 上の文は,MeisiTblテーブルから,Nenreiが30歳以上の人の氏名を取得するSQL文です。30という数値が使われていることに注目してください。実行結果は,「日経太郎」,「日経次郎」となります。検索条件を指定するWHEREに関しては,連載の第3回で説明します。

◎今回の復習
・SQLの構文は英語の命令文に似ている
・SELECT文はテーブルからフィールドの値を取得する