• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:基本情報)

SQLの違いを解説!複数のテーブルを結合する方法

このQ&Aのポイント
  • SQLで複数のテーブルを結合する方法には、2つの選択肢があります。
  • 選択肢1では、table1.hoge = table2.hogeと書くか、選択肢2ではtable1.hoge in (select hoge from table2)と書くことができます。
  • 選択肢1では、結合条件を指定したテーブル間の行のみを結合しますが、選択肢2ではテーブル2のhoge列の値と一致するテーブル1の行全てを結合します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

(2)は以下の理由より、求めているものを抽出するSQLではないでしょうね。 ・外側のSQLで ryorihyo, meisaihyoを等結合していない。 ・IN句でサブクエリをしている。 INの中でmeisaihyoテーブルが利用されてデータが抽出されており、その 条件にマッチしたryoricodeテーブルのレコードを抽出するでしょうが、 そもそも等結合して抽出しているわけではないです。 あっさり言ってしまうと、『抽出条件は正しいかもしれないけど、結合条件に 誤りがある』ということです。 select * from ryoricode, meisaihyo これだけ試してみれば分かりいいですね。 テーブルを複数使ってるくせに正しく結合してないから、クロス結合になって 大量にレコードを抽出します。 http://www.confrage.com/oracle/oracle_sql/join/cross_join/cross_join.html

その他の回答 (1)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

>table1.hoge = table2.hogeと書こうが, >table1.hoge in (select hoge from table2)と書こうが一緒だと思います. >なぜなら,inを使うとtable1.hogeと同じ行しか対象にならないと思いからです from table1,table2 where table1.hoge = table2.hoge と from table1 where table1.hoge in (select hoge from table2) なら、同じ行しか対象にならない(NULLはないとして)ですが、 問題の選択肢の内容は違うようですね。 from table1,table2 where table1.hoge = table2.hoge および from table1,table2 where table1.hoge in (select hoge from table2) となっています。 inの中にあるtable2は、fromの中にあるtable2と無関係です。 group by をはずしたほうが分りやすいのでそれで話をしますと 上記にしたがって、 inを使ったほうは、table1の4レコード×table2の2レコード、計8レコードが出力されます。 =で結んだほうは、table1の4レコード×それぞれのtable1と結合したtable2の1レコード、 計4レコードが出力されます。

関連するQ&A