85796


以下の問題は基本情報技術者試験の問題です。SQL文で「結合」という意味がどうもわかりません。書籍の解説を読んだのですが説明が簡素でわかりません。参考サイトを見て大体理解したのですが以下の`知りたい事`が知りたいです。  
これはどういった理屈で抽出されているのでしょか？

##### 知りたい事

結合すると表がどのように変化するのか知りたいです。

参考サイト: <https://www.fe-siken.com/kakomon/31_haru/q29.html>

参考書:  
[令和04年 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室
(Amazon.co.jp)](https://www.amazon.co.jp/gp/product/4297123932/)

#### 問題

以下の学部と学生表に対してSQLを実行した結果として正しいものはどれか？

[code]

    SELECT 氏名 FROM 学生、学部
     WHERE 所属=学部名 AND 学部.住所 = '新宿'
    
[/code]

##### 学生

氏名 | 所属 | 住所  
---|---|---  
応用花子 | 理 | 新宿  
高度次郎 | 人文 | 渋谷  
午前花子 | 経済 | 新宿  
情報太郎 | 工 | 渋谷  
  
##### 学部

学部名 | 住所  
---|---  
工 | 新宿  
経済 | 渋谷  
人文 | 渋谷  
理 | 新宿  
  
##### 回答

氏名  
---  
応用花子  
情報太郎


CC BY-SA 4.0
2022-01-19T01:21:04.550
85784
2022-01-19T14:36:54.827
2022-01-19T09:24:50.633
question
sql
SQLの結合についての解説が知りたい


> 結合すると表がどのように変化するのか知りたいです。

参考サイト: <https://www.fe-siken.com/kakomon/31_haru/q29.html> の解説がわかりやすいと思います。

[![解説](https://i.stack.imgur.com/VWDaA.jpg)](https://i.stack.imgur.com/VWDaA.jpg)

また、結合に関しては <https://atmarkit.itmedia.co.jp/ait/articles/1703/01/news186.html>
にわかりやすい例が記載してあります。他サイトの引用ばかりで申し訳ありませんが参考になれば幸いです。


CC BY-SA 4.0
2022-01-19T07:37:25.960
85789
2022-01-19T07:44:32.753
2022-01-19T07:44:32.753
38270
38270
85784
answer


`FROM 学生, 学部`により、「学生」テーブルと「学部」テーブルの直積からなる表(クロス結合表)が作られます。

##### 学生×学部

学生.氏名 | 学生.所属 | 学生.住所 | 学部.学部名 | 学部.住所  
---|---|---|---|---  
応用花子 | 理 | 新宿 | 工 | 新宿  
応用花子 | 理 | 新宿 | 経済 | 渋谷  
応用花子 | 理 | 新宿 | 人文 | 渋谷  
応用花子 | 理 | 新宿 | 理 | 新宿  
高度次郎 | 人文 | 渋谷 | 工 | 新宿  
  
(長いので以下省略)

これに対して、`WHERE
所属=学部名`により、`所属=学部名`の行がフィルタされます。結合してもカラム名が重複しないので`所属=学部名`でもいいのですが、省略せずに書くなら`学生.所属=学部.学部名`です。

さらに`学部.住所 = '新宿'`によりフィルタされます。こちらは結合表でカラム名が重複しているので`学部`を明示する必要があります。

最後に`SELECT 氏名`で`氏名`カラムだけが選択されます。

これは原理的な話で、実際のRDBMSでは処理が少なくなるようよしなにやってくれるので全体を結合した表を作ったり順番通りフィルタしたりはしません。


CC BY-SA 4.0
2022-01-19T12:12:50.210
85796
2022-01-19T14:36:54.827
2022-01-19T14:36:54.827
5793
5793
85784
answer