テーブルの結合方法について

このQ&Aのポイント
  • テーブルの結合方法について説明します。
  • INNER JOINとWHERE句を使用した結合方法にはそれぞれ違いとメリット・デメリットがあります。
  • 適切な結合方法を選択することで、効率的なデータ検索が可能となります。
回答を見る
  • ベストアンサー

テーブルの結合に付いて

こんにちわ 2つのテーブルからデータを検索する方法に関してです。 テーブル AとB が有り、 お互いに、フィールド ExtID で関連付けがされているとします。 ここで、 SELECT A.NAME, B.ADDRESS FROM A INNER JOIN B ON A.ExtID = B.ExtID とする方法と SELECT A.NAME, B.ADDRESS FROM A,B WHERE A.ExtID = B.ExtID が有ります。 この2つに関して、違いとかメリット・デメリット有りましたら教えてください。 よろしくお願い致します。

  • sho_ta
  • お礼率68% (221/322)

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

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

論理的には違いはないんじゃないでしょうか。 ただ、DBMSにもよるでしょうが、一般的には INNER JOIN にした方が処理が速いということで。

関連するQ&A

  • テーブルを結合

    テーブルの結合に関して質問します。 ネットなどでinner joinを使った複数のテーブル結合が参考として 書いてあったのですが(3つまで), 4つテーブルを結合する事は 出来るのでしょうか? A,B,CテーブルにはID,NAMEがあります。 DテーブルにはA,B,CテーブルのIDがあります。 参考サイトを見て3つのテーブルを結合するSQLが以下になります。 SELECT a.name, b.name, c.name FROM a INNER JOIN (b INNER JOIN c ON b.id = c.id) ON a.id = c.id よろしければアドバイスお願いします。

  • joinの場合のテーブル名の別名の使用方法

    select * from table1 a,table2 b where a.field1=b.field1; とできますが select * from table1 as a left join table2 as b on a.field1=b.field1; とできません。 joinの場合にテーブル名の別名を使う方法を教えてください

  • テーブル結合について

    SQL Serverで、メイン、サブ1、サブ2、サブ3、サブ4というテーブルがあり、以下のSQLを実行すると、メインにあるすべてのデータ(10列)が抽出されます。 SELECT * FROM メイン INNER JOIN サブ1 ON メイン.name1=サブ1.id INNER JOIN サブ2 ON メイン.name2=サブ2.id INNER JOIN サブ3 ON メイン.name3=サブ3.id しかし、上記のSQL文に追加して、 SELECT * FROM メイン INNER JOIN サブ1 ON メイン.name1=サブ1.id INNER JOIN サブ2 ON メイン.name2=サブ2.id INNER JOIN サブ3 ON メイン.name3=サブ3.id INNER JOIN サブ4 ON メイン.name4=サブ4.id とすると、メイン内の10列のうち、2列しか抽出されません。 サブ4を結合しても、一つ目のSQL文と同じ結果を抽出したかったのですが、どこがおかしいのでしょうか? SQL文がまずいのか、サブ4のテーブル内容のせいなのか、SQL Serverの設定がおかしいのか、さっぱり見当がつきません。 足りない情報がありましたら補足いたしますので、どうぞよろしくお願いします。

  • 3つのテーブルを結合した場合のWHERE

    MySQLで3つのテーブルを結合した場合のWHEREがよくわかりません。 まず、下のような2つのテーブルがあるとします。 【テーブルaa】 ID | Name -------------- 1 | x 2 | y 3 | z 【テーブルbb】 ID | hizuke | category --------------------- 1 | stamp1 | a 1 | stamp2 | b 1 | stamp3 | c 2 | stamp1 | a 2 | stamp2 | d 3 | stamp1 | c この2つのテーブルを結合して、同じIDでhizukeが最大値のデータを抽出するクエリは、 http://okwave.jp/qa/q6918385.htmlを参考にして、 SELECT aa.Name, bb.category FROM bb INNER JOIN aa ON aa.ID = bb.ID where (bb.ID, bb.hizuke) in (SELECT bb.ID, max(bb.hizuke) FROM bb group by bb.ID ) ; でできました。 しかし、もう1つテーブルを結合すると期待した結果が得られなくなってしまいました。 【テーブルcc】 category | choice --------------------- a | ss b | tt c | uu というテーブルがあって、上のクエリで得られた bb.categoryと cc.categoryをリンクして、choiceを取得しようとしたのですがうまくいきません。 SELECT aa.Name, bb.hizuke, bb.category, cc.choice FROM bb INNER JOIN cc ON bb. category = cc. category INNER JOIN aa ON aa.ID = bb.ID where (bb.ID, bb.category, bb.hizuke) in (SELECT bb.ID, bb.category, max(bb.hizuke) FROM bb group by bb.ID ); というクエリでは、ダメなようです。 INNER JOINを入れ子にしたり、いろいろと試したのですがどうにもうまくいきません。 どうも私の力では解決困難なようです。どなたかヘルプを。

  • 3テーブル外部結合方法について

    3つのテーブルを外部結合したいのですが・・・、 こんがらがってしまいました。 A,B,Cの3テーブルがあり、A,B,Cの順に外部結合 (LEFT OUTER JOIN)したいのですが、 A,BのテーブルについてはWhere句の条件指定が 必要です。 Select From (Select AA.a From A AA Where b = xxxx) BB Left Outer Join (Select CC.b From B CC Where c = eeee and BB.a = CC.b) On ???? こんな感じでつまづいてしまいました・・・

  • テーブル結合で、結合フィールドをWHERE句に用いた時に、結合フィールドのデータがNULLになってしまう。

    MySQL 4.0.24-standard + PHP Version 4.3.11 を使用しています。 下記のような table_a, table_b があり、idフィールドで外部結合させています。 table_a id|value ------- 1 | 0 2 | 1 table_b id|name ------- 1 | A 2 | B SELECT * FROM table_a NATURAL LEFT OUTER JOIN table_b; result id|value|name -------------- 1 | 0 | A 2 | 1 | B しかし、下記のクエリでは、このようにidがNULLになってしまいます。 SELECT * FROM table_a NATURAL LEFT OUTER JOIN table_b WHERE table_a.id = 1; result id |value|name -------------- NULL| 0 | A 以下のような結果を得たいのですが、どうすれば良いのでしょうか? result id|value|name -------------- 1 | 0 | A

    • ベストアンサー
    • MySQL
  • inner joinとwhereでの結合の違いは?

    お世話になります。 たとえば、テーブルが複数(この場合2つ)ある場合。 (1) test(カラム:table_id,table_name) (2) tester(カラム:table_id,table_name) 以下のクエリは条件的に select a.table_id, a.table_name from test a inner join tester b on a.table_id = b.table_id ************* select a.table_id, a.table_name from test a , tester b where a.table_id = b.table_id 同じですよね? パフォーマンス的にもjoinすることのメリットが判りません。

  • テーブルの結合について

    以下の二つを実行すると、2 の方がかなり速いのですが理由が分かりません。 分かる方教えてもらっていいですか? DBはMYSQLでInoDBです。 ちなみに Aは1万件、B は10万件ほど 1 のSQL SELECT * FROM A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) B ON A.id = B.XXX WHERE ・・・ GROUP BY A.id 2 のSQL (SELECT * FROM A ・・・ GROUP BY ID ) A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) ON A.ID = B.XXX.ID

  • 結合が上手くいきません

    以下のテーブルがあるとします table1 名前|住所コード|勤務地コード table2 コード|名称 テーブル1の検索結果にテーブル2の名称を引っ張ってきて取得したいのですがどうやるのでしょうか? SELECT * from table1 INNER JOIN table1.住所コード ON table2.コード INNER JOIN table1.勤務地コード ON table2.コード これではうまくいきませんでした。 SELECT (select 名称 from table2 where table2.コード=table1.住所コード),(select 名称 from table2 where table2.コード=table1.勤務地コード) FROM table1 これは上手くいくのですが重いらしいので、、、

    • ベストアンサー
    • MySQL
  • ちょっと見かけないinner joinについて

    どなたか以下の構文について教えて下さい。 どこのDBMSで使用されるものなのでしょう? SELECT B.項目1, B.項目2, A.項目2, A.項目3 FROM ( ( SELECT * FROM Bテーブル WHERE 項目3>"1" ) B INNER JOIN ( SELECT * FROM Aテーブル WHERE 項目2=10 ) A ON B.項目1=A.項目1; 意味はわかるのですが、普通のinner joinとは違うもので。