628 Views
January 12, 22
スライド概要
リレーショナルデータベースの基本(スライド資料とプログラム例)
https://www.kkaneko.jp/de/ds/index.html
ds-1. データベースとは,データベースシステムとは,情報とデータ
ds-2. SQL,SQL のデータ型,テーブル定義,問い合わせ(クエリ)
ds-3. ER 図,関連,異状, テーブル分解
ds-4. 問い合わせ(クエリ)
ds-5. 集計・集約
ds-6. 並べ替え(ソート)
ds-7. 結合
ds-8. データベースの異状,分解と結合
ds-9. 主キー,参照整合性制約,従属
ds-10. 中間まとめ,データベースの応用,データベースの種類
ds-11. SQL のIN,副問い合わせ
ds-12. データベースの AND,OR,NOT
ds-13. データベース操作,トランザクション,リカバリ,ロック,同時実行制御
ds-14. 従属,正規形,正規化
ds-15. さまざまなデータベース
YouTube 再生リスト「リレーショナルデータベースの基本」
https://youtube.com/playlist?list=PLwoDcGBEg9WGKPP6dExr8DcUf9nV2kYGD
金子邦彦研究室ホームページ:
https://www.kkaneko.jp/index.html
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
7. 結合 URL: https://www.kkaneko.jp/de/ds/index.html 金子邦彦 謝辞:この資料では「いらすとや」のイラストを使用しています 1
2つのテーブルを結合し1つに 2
リレーショナルデータベースシステム データベースシステムの一種 コンピュータ 記憶 装置 リレーショナル リレーショナル データベース データベース 管理システム たくさんのテーブルが格納される あわせて リレーショナルデータベースシステム 3
問い合わせ(クエリ)の仕組み 問い合わせ(クエリ) の結果は,テーブル形式の データ 問い合わせ (クエリ) のコマンド リレーショナル データベースシステム データの種類ごとに分かれ た、たくさんのテーブル 4
Access で SQLビューを開く. ①「作成」タブで、 「クエリデザイン」 をクリック このような 表示が出た ときは 「閉じる」を クリック ②「デザイン」タブで、 「表示」を展開し「SQL ビュー」を選ぶ 5
アウトライン 番号 項目 説明時間の 目安 7-1 結合 4分 7-2 SQL での結合の書き方 14分 7-3 結合に関する演習 4分 7-4 実データを用いた演習 13分 6
全体まとめ • 結合: 2つのテーブルを1つにまとめる SELECT * FROM S, T ・・・ 結合条件なしで S と T を結合 2行のテーブル 3行のテーブル 2×3で,6行のテーブル • 結合条件 SELECT * FROM S, T WHERE a = b; ・・・ 結合条件は「a = b」 7
7-1. 結合 8
結合はどういう場合に役に立つのか 違うテーブルに分かれているデータを,1つにま とめたいとき • 結合は2つのテーブルを1つにまとめる • 結合を繰り返すことにより,3つ以上のテーブル を1つにまとめることも可能 データベースの異状の解決とも関係する(次回説 明) 9
商品 商品 ID 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 10
購入 購入 購入者 商品番号 X 1 X 3 Y 2 11
「商品」と「購入」の関連 商品 ID 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 購入 購入者 商品番号 X 1 X 3 Y 2 Xさんは、1 のみかんと, 3 のメロンを買った Yさんは、 2 のりんごを買った 購入テーブルの情報 商品テーブルの情報 12
「商品」と「購入」の結合 商品 ID 購入者 商品番号 購入 X 1 X 3 Y 2 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 商品名 ID ペアは9通り 結合の結果 ⇒ (結合条件が無い場合) SELECT * FROM 商品, 購入; 単価 購入者 商品番号 1 みかん 50 X 1 1 みかん 50 X 3 1 みかん 50 Y 2 2 りんご 100 X 1 2 りんご 100 X 3 2 りんご 100 Y 2 3 メロン 500 X 1 3 メロン 500 X 3 3 メロン 500 Y 2 13
「商品」と「購入」の結合 商品 ID 購入者 商品番号 購入 X 1 X 3 Y 2 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 結合条件があると 選択が行われる ⇒ 商品名 ID 単価 購入者 商品番号 1 みかん 50 X 1 2 りんご 100 Y 2 3 メロン 500 X 3 SELECT * FROM 商品, 購入 WHERE ID = 商品番号; 14
ペア の取り扱い A B C 1 2 リレーショナルデータベースでは A A B B C C 1 2 1 2 1 2 結合は、 この考え方を ベースにしている 15
結合(結合条件なし) SQL SELECT * FROM 商品, 購入; 商品 ID 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 購入 購入者 商品番号 X 1 X Y 3 2 商品名 ID 結合 単価 購入者 商品番号 1 みかん 50 X 1 1 みかん 50 X 3 1 みかん 50 Y 2 2 りんご 100 X 1 2 りんご 100 X 3 2 りんご 100 Y 2 3 メロン 500 X 1 3 メロン 500 X 3 3 メロン 500 Y 2 結果 16
結合(結合条件あり) SQL 商品 ID 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 SELECT * FROM 商品, 購入 WHERE ID = 商品番号; 購入 購入者 商品番号 X 1 X Y 3 2 商品名 ID 結合 結合条件 単価 購入者 商品番号 1 みかん 50 X 1 2 りんご 100 Y 2 3 メロン 500 X 3 結果 17
まとめ 結合は、2つのテーブルを、1つにまとめる. 結合条件が付く場合がある. 商品 ID テーブル 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 新しい テーブル 購入 購入者 テーブル 商品番号 X 1 X Y 3 2 結合 18
7-2. SQL での結合の書き方 19
SQL での結合の書き方 ■ 結合条件なし SELECT ○, ○, ○ FROM <結合したいテーブル名>; ■ 結合条件あり SELECT ○, ○, ○ FROM <結合したいテーブル名> WHERE 結合条件; その他付け加えることもある 20
結合(結合条件なし) 結合は,2つのテーブルの行(レコード)の すべてのペアを作る SQL SELECT * FROM 商品, 購入; 商品 ID 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 購入 購入者 商品番号 X 1 X Y 3 2 商品名 ID 結合 単価 購入者 商品番号 1 みかん 50 X 1 1 みかん 50 X 3 1 みかん 50 Y 2 2 りんご 100 X 1 2 りんご 100 X 3 2 りんご 100 Y 2 3 メロン 500 X 1 3 メロン 500 X 3 3 メロン 500 Y 2 結果 21
結合(結合条件あり) 結合条件があるときは、選択が行われる SQL 商品 ID 商品名 単価 1 みかん 50 2 りんご 100 3 メロン 500 SELECT * FROM 商品, 購入 WHERE ID = 商品番号; 購入 購入者 商品番号 X X 1 3 Y 2 商品名 ID 結合 結合条件 単価 購入者 商品番号 1 みかん 50 X 1 2 りんご 100 Y 2 3 メロン 500 X 3 結果 22
SQL での結合条件の書き方 • 結合したいテーブル(複数)で、同じ属性名があ る場合の書き方 SELECT 名前, 購入者 FROM 商品, 購入 WHERE 商品.ID = 購入.商品ID; ← この部分を結合条件という 結合条件の書き方 <テーブル名>.<属性名> = <テーブル名>.<属性名> ※ 他のテーブルに同じ属性名が無いときは、「テーブル名」を省略可 ※ 「=」のところは: =, <>, <, <=, >, >= が可能 23
全体まとめ • 結合: 2つのテーブルを1つにまとめる SELECT * FROM S, T ・・・ 結合条件なしで S と T を結合 2行のテーブル 3行のテーブル 2×3で,6行のテーブル • 結合条件 SELECT * FROM S, T WHERE a = b; ・・・ 結合条件は「a = b」 24
7-3. 結合に関する演習 25
演習用のデータベースファイル • 演習用の Access データベースファイル セレッソの利用者は,セレッソからもダウンロード可能 ファイル名: db7-3.accdb • 「コンテンツの有効化」のメッセージが出たときは、確認 のうえ、次にすすむ • つぎのような表示が出たときは、確認のうえ、「はい」 26
• 次の2つのテーブルの関する演習 テーブル T テーブル S 上の2つのテーブルはすでに作成済みである。 27
① 次の SQL の結果を実行し,結果を確認 SELECT * FROM T, S; テーブル T テーブル S 28
② 次の SQL の結果を実行し,結果を確認 SELECT a FROM T, S; 29
③ 次の SQL の結果を実行し,結果を確認 SELECT * FROM T, S WHERE a = b; 30
7-4. 実データを用いた演習 31
演習で行うこと 前の演習と同じデータベースを使用 ①,② 選択を行う SQL (復習) ③,④ 結合条件有りの結合 ③,④では,次の2つのテーブルを結合する テーブル名: 米国成人調査データ テーブル名:対象国 32
実演・実習で使うデータベース 米国成人調査データ (1994年、米国における統計調査データのうち 32561 人分) ※ このデータを使います (演習では、特定の職業、学歴、性別、母国を差別的に見ないようにしてください) データの出典:Lichman, M. (2013). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science (米国) 33
米国成人調査データ 34
① 選択 (まだ結合しない) SELECT * FROM 米国成人調査データ WHERE 母国 = '日本'; ・空白文字や *は半角 ・「;」は最後にだけ 35
② 選択 (まだ結合しない) SELECT * FROM 米国成人調査データ WHERE 母国 = '日本' or 母国 = 'インド'; ・空白文字や *は半角 ・「;」は最後にだけ 選択(結果は 162行) 36
③ 結合条件ありの結合 SELECT * FROM 米国成人調査データ, 対象国 WHERE 母国 = 名前; ・空白文字や *は半角 ・「;」は最後にだけ (結果は 162行) 37
④ 結合条件ありの結合 • 「対象国」のテーブルを次のように書き換え • 前のページと同じ SQL を再度実行 SELECT * FROM 米国成人調査データ, 対象国 WHERE 母国 = 名前; • 結果は,どのように変わるか,各自で確認 38
全体まとめ • 結合: 2つのテーブルを1つにまとめる SELECT * FROM S, T ・・・ 結合条件なしで S と T を結合 2行のテーブル 3行のテーブル 2×3で,6行のテーブル • 結合条件 SELECT * FROM S, T WHERE a = b; ・・・ 結合条件は「a = b」 39