データベースマネジメント:SQL(最終更新:2015/12/06 16:33:44 JST)
データベースの特徴は格納されたデータを利用可能なことである.つまり何らかの方法でデータを処理する仕組みがなければならない.その1つの方法がSQLと呼ばれる言語である.このSQLは実際のデータベースでの処理で重要であるのは当然であるが,情報処理技術者試験でもいろいろな分野で出題されているため,正しく理解することが重要である.
この章の内容
データベースを利用する際には,利用者がデータベースからデータを自由に取り出す仕組みが必要である.その操作のために用いるデータベース言語として現在もっとも広く利用されているのがSQLである.もともとIBMにより開発されたが現在はANSIやISOによって標準として規格化されている.そのため関係データベースを利用したDBMSであれば利用可能となっている.SQLは次の3つの機能から構成されている.
SQLはデータベースに対する1つの操作を,1つの文(sentence)により行う.また文中の意味のある1つのまとまりを句(phrase)と呼ぶ.
次の例はSELECT文の文法を表したものである.全体がSELECT文であり,その中にSELECT句とFROM句がある(教科書70ページ参照).
/* SELECT文の例 */ SELECT * -- ← SELECT句 FROM 商品 -- ← FROM句
なお,この文や句で用いられる主要なキーワードは教科書71ページに掲載されているので,参照のこと.
SQLの文の中でもっともよく利用されるものがSELECT文である.SELECT文は表からデータを取り出すために利用される.
SELECT文ではSELECT句の後に取り出すフィールド名を書き,FROM句の後に取り出す対象となる表(テーブル)名を書く.例えば,教科書73ページの[商品]表から{商品名,単価}という2つのフィールドを取り出す場合は次のように指定する(教科書74ページ).
/* 特定のフィールドの取り出しの例 */ SELECT 商品名, 単価 FROM 商品
関係演算の射影に相当すると考えればよい.
また表のすべてのフィールドを取り出す場合は,SELECT句の後に「*」(アスタリスク)を指定する(教科書74ページ).
/* すべてのフィールドの取り出しの例 */ SELECT * FROM 商品
取り出したフィールドに別名をつける場合はSELECT句のフィールド名にAS句とつける別名を指定する(教科書74ページ).例えば<商品名>に<在庫品名>という名前をつける場合は次のようになる.
/* 取り出したフィールドに別名を指定する場合の例 */ SELECT 商品名 AS 在庫品名 FROM 商品
行方向にデータを取り出すことは,何らかの条件をつけてレコードを検索することに相当する.このためにはSELECT文にWHERE句を追加し検索の条件を指定してやる.
/* フィールド<商品名>のデータが「あられ」であるレコードを取り出す例 */ SELECT 商品名, 単価 FROM 商品 WHERE 商品名 = 'あられ' -- ← WHERE句
WHERE句で検索対象とするフィールドの内容が文字列の場合はシングルクオーテーションで括る必要がある.数字の場合は括ってはいけない.
WHERE句でいろいろな検索の条件を指定するために利用される記号は比較演算子と呼ばれる.比較演算子は次のようなものが利用可能である(教科書77ページの比較演算子の表も参照).
比較演算子 | 意味 | 例 | 意味 |
---|---|---|---|
= | 等しい | 単価 = 500 | 単価が500 |
> | (左)が(右)より大 | 単価 > 500 | 単価が500より大 |
>= | (左)が(右)以上 | 単価 >= 500 | 単価が500以上 |
< | (左)が(右)より小 | 単価 < 500 | 単価が500より小 |
<= | (左)が(右)以下 | 単価 <= 500 | 単価が500以下 |
<> | (左)と(右)が等しくない | 単価 <> 500 | 単価が500以外 |
「等しくない」は「!=」でも可.「単価 != 500」と書いても同じ結果が得られる.
比較演算子で指定された複数の条件を組み合わせて指定する演算子として論理演算子が用意されている.
論理演算子 | 例 | 例の意味 |
---|---|---|
AND | 単価 >= 500 AND 商品コード < 200 | 単価が500以上かつ商品コードが200より小 |
OR | 単価 >= 500 OR 商品コード < 200 | 単価が500以上または商品コードが200より小 |
NOT | NOT 単価 = 500 | 単価が500でない |
/* 単価が300以上かつ400以下 */ SELECT 商品名, 単価 FROM 商品 WHERE 単価 >= 300 AND 単価 <= 400
SQLで使用可能な算術演算子,比較演算子,論理演算子には優先順位が存在する.各種演算子の優先順位は次のとおり.下に行くほど優先順位が低くなる.
優先順位を変更したい場合は,丸括弧で括る必要がある.
/* 「単価が150より小または400より大」ではない */ SELECT 商品名, 単価 FROM 商品 WHERE NOT( 単価 < 150 OR 単価 > 400 ) WHERE NOT 単価 < 150 OR 単価 > 400 /* これだと「単価が150以上(150より小ではない)または400より大」 */
あるフィールドがNULL値であるレコードを取り出すためには,「IS NULL」条件を利用する.
/* <数量>フィールドのNULL値であるレコードを抽出 */ SELECT * FROM 注文 WHERE 数量 IS NULL
逆に,あるフィールドがNULL値以外であるレコードを取り出すためには,「IS NOT NULL」条件を利用する.
/* <数量>フィールドがNULL値以外のレコードを抽出 */ SELECT * FROM 注文 WHERE 数量 IS NOT NULL
SELECTでの取り出すフィールド名の前に「DISTINCT」をつけるとそれらのフィールドの重複するデータを取り除いて出力する.
SELECT DISTINCT 背番号, 名前 FROM 選手
|
|