←講義のツボメニューへ
格納したデータを引き出すしくみ〜SQL概説
【2000.06.09 1限 第8回】
まえがき
- 前回までで、データベースを入れ物として作り、そこにデータを入れるまでの方法論は修得した。
- 今回は、苦労して入れたデータを使いこなすための仕組みについての概説である。
- 第3回で修得した「関係代数」(和、共通、差、直積、射影、選択、結合、商)は、リレーショナル・モデルにおけるデータ操作を比較的高い抽象度で表現したものであるが、実装段階では、よりプログラム寄りの/プログラムすることを考慮した表現があると効果的である。
- この条件を満たすものとして、SQL(Structured Query Language;構造化問合せ言語)がある。
- 位置的には、関係代数/あるいはデータベースユーザが選択したメニューとプログラミング言語の中間に位置する。
SQLとは
- SQLは、データ操作とともにデータ定義/スキーマ定義をも表現するデータベース言語である。
- ISO、JISにも制定され、標準化されている。
- 標準SQLを修得すると、それを採用したり、あるいはそれに添ったりしている種々のDBMSで応用がきく。
ex)Oracle,Sybase,DB2,INGRES,POSTGRES,Access,ほか。
※英語を覚えれば、微差こそあれイギリスでもU.S.Aでもオーストラリアでも話ができるようなもの。製品の新規導入時(営業側から見れば売りつけるとき)のハードルを低くできる。
- リレーショナル・モデルでも「リレーション(relation)」=SQLでも「テーブル(table)」
※相違点として、リレーショナル・モデルでは認めていなかった「タプルの重複」が、SQLでは許される。(詳しくは後述)
表の作成
問合せ
- いよいよ「格納したデータを使いこなすための仕組み」。
1.タプルの挿入:INSERT文により行われる。
ex)図6−2のようなデータベースの状態を作るために、
VALUES ('c61','菓子の山本','文京区根津');
などと記述する。
2.問合せ/検索
- 基本形は
SELECT 属性群
FROM テーブル
WHERE 条件式
例6−1が具体例。
- 以下は条件式の例:
- 単価 BETWEEN 100 AND 200
(100以上で200以下)
- 単価 in (97,98,99)
(97,98,99のどれか)
- 商品ID LIKE 'ch%'
(商品IDが簿時列'ch'で始まるもの)
- 住所 IS NULL
(空値であるもの)
- 複数の条件をANDやORで結んだり、NOTで否定したり、括弧でくくることも可能。
- 結果はまたテーブルになる。「閉包性(closure property)」と呼ばれる。
表結合を含むSQL操作
1.2つの表(テーブル)を結合しての問い合わせ(例6−2)
- FROM句に使う表を並べる。
- 直積が計算され、その中から、WHERE句の条件に見合うタプルのみが選択される。
- 異なるテーブルに同一の属性名がある場合には、”テーブル名.属性名”の書式で区別する。
cf.)結合はドメインさえ一致していれば可能で、属性名が一致している必要はない。
- 同一の属性名が他にない場合には、テーブル名は省略する。
- SELECT句に書いた属性で射影される。
2.4つのテーブルを結合しての問合せ(例6−3)
- テーブルの数が増えても方法論は同一。
- 意味的には、正規化によって分割してきたものを、必要に応じて結びつけている。
- (テーブルの数−1)個の条件が結合のために不可欠になる。
グループ化と集約関数
- 「group by 句」はグループ化を実現し、「・・・ごと」の意を表現。(例6−4)
- 集約関数には、SUM,AVG,MAX,MIN,COUNTなどがある。
- グループのうち、ある条件を満たすもののみを残したい場合用に、「HAVING 句」がある。(例6−5)
セルフジョイン(例6−6)
- 「セルフジョイン」=単一のテーブルで、自身と結合する。
- ”テーブル名.属性名”の書式で区別出来ないので、この例における'AA','BB'のように「別名」を使う。
- 'DISTINCT'は、タプルの重複を除去する。
cf.)SQLにおけるタプルの重複。
副問合せ(例6−7)
- SELECT-FROM-WHEREの入れ子利用。
- 入れ子になった部分を「副問合せ(subquery)」という。
- 例6-7は、
SELECT DISTINCT 扱い者
FROM 発注書、発注項目
WHERE 発注書.発注番号 = 発注項目.発注番号
AND 発注項目.数量 >= 50;
と等価。
- 等価であっても処理時間が同一とは限らない。
- 「最適化」は別途議論
- 例6-8は入れ子が多段階になっている例。
更新・消去のデータ操作
1.更新
- 具体例:
UPDATE 発注項目
SET 単価 = 単価 - 2
WHERE 数量 >= 100 ;
2.消去
- 具体例:
DELETE
FROM 発注項目
WHERE 発注番号 = 3499 ;
リレーショナル完備
- リレーショナル代数の8つの演算、和、共通、差、直積、射影、選択、結合、商を実現できる言語の事を、リレーショナル完備(relational complete)という。
- SQLはリレーショナル完備である。
←講義のツボメニューへ
←鈴木研究室ホームへ