データの操作
選択・射影・結合という3つの取り出し方を区別し、欲しい形のデータを得る手順を説明できるようになります。
ねらい
データベースから必要なデータを取り出す方法を学びます。このレッスンを終えると、3つの基本操作を区別でき、欲しい形のデータをどう組み立てるかが分かるようになります。
取り出し方は3つの組み合わせ
| 操作 | 何をするか | 覚え方 |
|---|---|---|
| 選択 | 条件に合う行を取り出す | 横に切る |
| 射影 | 必要な列を取り出す | 縦に切る |
| 結合 | 2つの表を、共通の項目でつなぐ | 横に広げる |
選択と射影は、切る向きが違うだけです。「東京都の顧客だけ」は選択、「氏名と電話番号の列だけ」は射影です。
この3つは組み合わせて使います。「東京都の顧客の氏名と、その注文金額を出す」なら、顧客表と注文表を結合し、東京都という条件で選択し、氏名と金額の列を射影します。
動かして確かめる
顧客を選ぶと、顧客番号でつながる注文だけが結合結果に出ます。注文の無い顧客も試してみましょう。
スタディード / 動く解説
結合は、共通の項目でつながる行だけを結ぶ。
顧客を選ぶと、顧客番号が一致する注文だけが結びつきます。注文の無い顧客も試してください。
| 顧客番号 | 氏名 |
|---|---|
| C1 | さくら |
| C2 | はると |
| C3 | ゆい |
| 注文番号 | 顧客番号 | 金額 |
|---|---|---|
| O1 | C1 | 3,200円 |
| O2 | C1 | 1,500円 |
| O3 | C2 | 4,800円 |
| 氏名 | 注文番号 | 金額 |
|---|---|---|
| さくら | O1 | 3,200円 |
| さくら | O2 | 1,500円 |
集計と並べ替え
取り出したデータは、さらに加工できます。
- 並べ替え(ソート)… 指定した項目の順に並べます。昇順(小さい順)と降順(大きい順)があります。
- 集計… 合計、平均、件数、最大、最小を求めます。
- グループ化… 項目の値ごとにまとめて集計します。「顧客ごとの注文金額の合計」といった集計ができます。
グループ化は、まとめる単位を決める操作です。「都道府県ごと」「月ごと」「商品ごと」と単位を変えると、同じデータから違う見え方が得られます。
操作するための言葉
関係データベースを操作する言語をSQLといいます。ITパスポートでは細かい文法までは問われませんが、「どの表から、どの条件で、どの列を取り出すか」を指定するものだと理解しておきます。
データを守る操作
- 正規化… 重複を無くすように表を分ける設計の作業です。前のレッスンで見た「顧客表と注文表に分ける」がこれにあたります。
- 制約… データの正しさをしくみで守ります。
- 一意制約… 同じ値を2つ入れさせない。
- 非ナル制約… 空のままにさせない。
- 参照整合性… 存在しない相手を指させない。
制約は、入力する人の注意力に頼らない守り方です。人は必ず間違えるので、間違えられない形にしておくほうが確実です。
まとめ
データの取り出しは、行を絞る選択・列を絞る射影・表をつなぐ結合の3つを組み合わせて行います。取り出した後は、並べ替え・集計・グループ化で加工します。正規化は重複を無くす設計、制約は正しさをしくみで守る手立てです。
理解の確認
顧客表と注文表があります。「東京都に住む顧客の氏名と、その顧客の注文金額の一覧」を得るには、選択・射影・結合をどのように使えばよいでしょうか。
答え: 3つすべてを組み合わせます。
まず結合です。氏名は顧客表に、注文金額は注文表にあるため、共通の項目である顧客番号で2つの表をつなぎます。つながっていなければ、どの注文が誰のものか分かりません。
次に選択です。つないだ結果から、住所が東京都という条件に合う行だけを取り出します。行を絞る操作です。
最後に射影です。氏名と注文金額の列だけを取り出します。列を絞る操作で、住所や顧客番号は結果に不要なので落とします。
順序は、結合してから絞るのが分かりやすい説明ですが、実際のデータベースは同じ結果になるよう内部で効率の良い順に処理します。
分からなかった点・気になった点
読み込み中です。