データ操作
選択・射影・結合などの関係演算、DDLとDMLの区別、SELECT文を中心としたSQLの基本操作を理解できるようになります。
ねらい
関係データベースからデータを取り出し、更新する方法を学びます。このレッスンを終えると、関係演算の種類を区別し、DDLとDMLの役割分担、SELECT文を中心としたSQLの基本を説明できるようになります。
ストーリー
上司から「東京の顧客だけ、名前の一覧がほしい」と頼まれました。顧客表には全国の顧客の、名前も住所も電話番号も入っています。必要なのは「東京の行」だけ、そして「名前の列」だけ。行を絞り、列を選ぶ。この2つの基本動作に、データ操作のすべてが始まります。
関係演算と集合演算
関係データベースの表に対する操作は、関係代数という理論で整理されています。
関係演算
| 演算 | 内容 |
|---|---|
| 選択 | 条件を満たす行を取り出す |
| 射影 | 必要な列を取り出す |
| 結合 | 共通の項目を手がかりに複数の表をつなぐ |
| 直積 | 2つの表のすべての行の組合せを作る |
| 商 | ある表の値の組をすべて含む行を求める |
冒頭の依頼は、「東京」という条件の選択と、「名前」という列の射影の組合せです。
集合演算
表を行の集合とみなすと、集合演算も使えます。2つの表の行を合わせる和、一方にだけある行を取り出す差、両方にある行を取り出す積(共通)です。
データベース言語:DDLとDML
データベース言語は役割で大別されます。
- DDL(データ定義言語)は、スキーマ、テーブル(実表)、ビュー、処理権限などの構造を定義します。
- DML(データ操作言語)は、データの検索や更新を行います。
SQLの使い方には、SQLを単独で対話的に使う独立言語方式(会話型SQL)と、プログラム言語の中に埋め込んで使う親言語方式(埋込みSQL)があります。埋込みSQLでは、問合せ結果の行を1行ずつ取り出すためにカーソルという仕組みを使います。利用者への問いかけの単位は問合せ(クエリ)と呼びます。
SQLの基本
定義:テーブルとビュー
テーブルの定義では、列ごとに文字型、数値型、日付型などのデータ型を指定し、一意性制約、参照制約、検査制約、非NULL制約といった制約を付けられます。実際のデータを持つ表を実表といい、実表から作った仮想的な見え方をビューといいます。ビューには更新できるものとできないものがあります。誰がどの表を操作できるかは、アクセス権をGRANT文で与えて管理します。
検索:SELECT文
データの検索はSELECT文で行います。「顧客表から東京の顧客の名前を取り出す」は次のように書きます。
SELECT 名前
FROM 顧客
WHERE 住所 = '東京'
SELECTの後ろが射影(列の指定)、WHEREが選択(行の条件)に当たります。条件には、範囲を指定するBETWEENや、値の一覧に含まれるかを調べるINなどの述語、パターン文字列によるあいまい検索が使えます。複数の表はFROM句で結合できます。
動かして確かめる
顧客を選ぶと、顧客番号でつながる注文だけが結合結果に出ます。注文の無い顧客も試してみましょう。
スタディード / 動く解説
結合は、共通の項目でつながる行だけを結ぶ。
顧客を選ぶと、顧客番号が一致する注文だけが結びつきます。注文の無い顧客も試してください。
| 顧客番号 | 氏名 |
|---|---|
| C1 | さくら |
| C2 | はると |
| C3 | ゆい |
| 注文番号 | 顧客番号 | 金額 |
|---|---|---|
| O1 | C1 | 3,200円 |
| O2 | C1 | 1,500円 |
| O3 | C2 | 4,800円 |
| 氏名 | 注文番号 | 金額 |
|---|---|---|
| さくら | O1 | 3,200円 |
| さくら | O2 | 1,500円 |
集計には、合計や平均などを求める集約関数(集合関数)を使い、GROUP BYで部署ごとのようにグループ化し、ORDER BYで並べ替えます。問合せの中に別の問合せを入れる副問合せ、外側の行を参照しながら評価する相関副問合せという書き方もあり、表に相関名という別名を付けて区別します。
更新:INSERT・UPDATE・DELETE
行の追加はINSERT文、値の変更はUPDATE文、行の削除はDELETE文で行います。UPDATE文とDELETE文では、WHERE句の条件を忘れると全行が対象になってしまう点に注意が必要です。
例題
次の問いに答えてください。
問1 表から必要な列だけを取り出す関係演算を何といいますか。
問2 テーブルの構造を定義するCREATE文は、DDLとDMLのどちらに分類されますか。
解答と解説
問1の答えは射影です。行を条件で絞るのが選択、列を選ぶのが射影です。「行の選択、列の射影」と対にして覚えましょう。
問2の答えはDDL(データ定義言語)です。構造を定義するのがDDL、データを検索・更新するSELECT文やUPDATE文などがDMLです。
応用
本試験を意識した問題を解いてみましょう。
問 関係データベースの表から、指定した条件を満たす行だけを取り出す関係演算はどれでしょうか。次の中から選んでください。
- 選択
- 射影
- 結合
- 直積
解答と解説
答えは1の選択です。WHERE句による行の絞り込みがこれに当たります。2の射影は行ではなく列を取り出す演算で、SELECT句の列指定に当たります。3の結合は、共通の項目を手がかりに複数の表をつなぐ演算です。4の直積は2つの表のすべての行の組合せを作る演算で、条件による絞り込みは行いません。
分からなかった点・気になった点
読み込み中です。