• ベストアンサー

LEFT JOINとRIGHT JOINについて

SQL初心者です。 基本的な質問ですみません、教えてください。 LEFT JOINとRIGHT JOINについて、どちらのテーブルを左側、どちらのテーブルを右側にするのかが分かっていません。どういう基準で左側、どういう基準で右側と考えれてばいいのでしょうか? 宜しくお願いします。

  • Oracle
  • 回答数3
  • ありがとう数0

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

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

>どちらのテーブルを左側 FROMの次の最初のテーブルが左側です。 尚、後で解析しやすいように、なるべくLEFT JOINを使い、どうしてもRIGHT JIONが必要な場合のみRIGHT JIONを使う事を推奨します。

その他の回答 (2)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

Google検索でたまたま次のページがヒットしたので http://www.pursue.ne.jp/jouhousyo/SQLDoc/select22.html 上記の【例題2】に登場するSELECT文で説明するなら, FROM 顧客表 LEFT JOIN 売上表 ON 顧客表.顧客CD=売上表.顧客CD と書いても FROM 売上表 RIGHT JOIN 顧客表 ON 顧客表.顧客CD=売上表.顧客CD と書いても 「実行結果」として抽出される列の並びに違いがあるだけで,実行結果は同じです。

  • t_ohta
  • ベストアンサー率38% (5028/13127)
回答No.1

FROM句に書いた順番 FROM A, B ならAが左側、Bが右側

関連するQ&A

  • Left Join/Right Join の意味

    Left Join/Right Join を、accessクエリのデザイン画面では使っています。 SQLではLeft Join/Right Join となりますが、この「右」「左」という言葉を使う意味を教えていただけないでしょうか。 #なぜ「右」「左」というのかよくわからないため。 #まことに初歩的な質問だと思いますが。

  • LEFT JOIN とRIGHT JOINの合体版のような結合方法。

    LEFT JOIN とRIGHT JOINの合体版のような結合方法。 使用DBはMySQL5.0.45です。 2つのテーブルの結合方式で、結合条件に合致しなかった場合、 両方のデータを結果セットに含めることはできますか? LEFT JOINだと、左側のテーブルのデータは結果に返ってきて、右側のデータはNULLになります。 RIGHT JOINだと、右側のテーブルのデータは結果に返ってきて、左側のデータはNULLになります。 これを「左側データあり右側NULL」「左側NULL右側データあり」というレコードを混ぜて結果として返したいです。 具体的には、 以下二つのテーブルがあるとします。 table : test1 value  id ------------------- ああ   3 いい   4 うう     5 table : test2 value  id -------------------- AAA   1 BBB   2 CCC   3 DDD   4 id を結合条件のキーとして、以下のような結果を得たいです。 NULL  NULL  AAA   1 NULL  NULL  BBB   2 ああ   3     CCC   3 いい   4     DDD   4 うう    5    NULL   NULL LEFT JOINだと以下の結果に、 SELECT * FROM test1 LEFT JOIN test2 ON test1.id=test2.id ああ   3     CCC   3 いい   4     DDD   4 うう    5    NULL   NULL RIGHT JOINだと以下の結果になってしまいます。 SELECT * FROM test1 RIGHT JOIN test2 ON test1.id=test2.id NULL  NULL  AAA   1 NULL  NULL  BBB   2 ああ   3     CCC   3 いい   4     DDD   4 以上、ご教示お願い致します。

    • ベストアンサー
    • MySQL
  • Left outer join とかのLeft

    Left outer join とright outer join ですが、解説などをみると、左右に表が描かれてあって、線を引いたりして結合していくのですが、 何をもって左とか右とかいうのでしょうか? テーブル1が左で、テーブル2が右みたいな感じで解説されるのですが、先に出てきた1も、あとに出てきた2も、単に出てきた順番であり、記号と思われます。1と2を入れ替えたら同じことです。Left outer join Table1 もRight outer join Table2 も同じことのように思われます。私はなにか勘違いしているのでしょうか?

  • inner join left joinについて

    inner join left joinの動きについては 理解しているつもりなのですが どういったテーブルの時innerにして どんなテーブルの時left joinにするかが わかりません inner join left join の選択方法 ※どっちを使えばよいかの見極め方について 教えて下さい

  • どちらのLEFT JOINが早いでしょうか?

    下記2つのテーブルがあったとします。 ・大テーブルA 7000万件 ・小テーブルB 2000件(※現在はWHERE句で指定すると1件) をJOINする場合、下記のどちらの方法が望ましいでしょうか? 案1)子テーブルを親とする方法 テーブルA(ON句により1件~2000件) LEFT JOIN 7000万件のテーブルB 案2)親テーブルを子とする方法 7000万件のテーブルB LEFT JOIN テーブルA(ON句により1件~2000件) 又、LEFT JOINの、ON句で条件を絞るのと、 WHERE句で条件を絞るのではどちらが好ましいでしょうか?

    • ベストアンサー
    • MySQL
  • SQL LEFT JOIN

    SQLでわからないことがあるので質問させていただきます。 例えばの話ですが在庫テーブルというテーブルがあってそこに商品マスタ をLEFT JOINする際に SELECT *  FROM 在庫テーブル LEFT JOIN 商品マスタ ON 品番 = 品番 として実行すると返ってくる結果は在庫テーブルの全レコードと 品番で結んだ商品マスタに存在するデータってことですか? 上記のSQLと SELECT * FROM 在庫テーブル で返ってくるレコード件数が違うという時はどういう可能性が考えられるでしょうか? ちなみに商品マスタの品番レコードはすべてユニークになっていて 色やサイズで品番が複数存在するものではありません。 何回やってもレコード件数が前者のほうが多くなってしまいます。 分かる方がいらしたらぜひ教えていただきたいです。

  • left outer joinで抽出したい

    SELECT (TABLE1 INNER JOIN TABLE2 ON TABLE1.CODE = TABLE2.CODE) INNER JOIN TABLE3 ON TABLE1.JAN = TABLE3.JAN というSQL文があります。この文を変更して下記の条件での抽出をおこないたいと思います。 ■TABLE1.JANを元にする。 ■TABLE1.JAN = TABLE3.JANは抽出に含めない ■TABLE1.JANに存在していて、TABLE3.JANに存在しないJANをTABLE1.JANから抽出 このようなSQL文をかきたいのですが、どのようなSQL文にしたらよいでしょうか? left outer joinを使えばいいとは思うのですが、そこから先が思い浮かびません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • LEFT JOINが2つあるSQL文でANDの意味

    ■下記SQL文の意味を教えてください SELECT a.*, b.being_name FROM alive a  LEFT JOIN being b ON a.hoge_id = b.id  LEFT JOIN call c ON c.call_id = a.hoge_id   AND f.hoge_id = 12  WHERE f.hoge_id = 12 OR b.id = 12 ※12の部分は動的に切り替わります ・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか? ・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか? >SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式2 >「AND」は2つの条件式の論理積 ・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか? それともこのSQLの「AND」は違う使い方をしているのでしょうか? 何か、LEFT JOINに関係しているのでしょうか?

    • ベストアンサー
    • MySQL
  • 少し複雑な left join

    まだデーターベースを独学で始めて数ヶ月の初心者です。 以下(3行目のleft join)の記述では動かないのですが、どのように 記述したらよいのでしょうか? やりたい内容は3行目にあるようにbookedというテーブルの中のdateが 2013-06-05だけ抽出した形のテーブルを、timeTplというテーブルとleft join させたいです。 1 "select * 2 from 3 timeTpl as t left join (SELECT * FROM booked where date ="2013-06-05") as b 4 on 5 t.start >= b.startTime and t.start < b.finishTime || 6 t.finish > b.startTime and t.finish <= b.finishTime 7 where 8 t.time > 9 (select start 10 from class as c left join member as m 11 on c.className = m.class 12 where m.name = '$name') 13 ) 14 "; よろしくお願いします。

  • LEFT JOIN について

    table a ------ user_id ------ user1 user2 user3 user4 user5 ------ table b --------------- user_id role_id --------------- user1 role1 user2 role1 user3 role1 user2 role2 user4 role2 --------------- とします。 1つのSQL文で、a のすべてのユーザそれぞれが指定role_id に属しているかどうかを検索したいです。 例えば、すべてのユーザそれぞれが role1 に属しているかどうかを検索します。 欲しい結果は以下の通りです。 ------------ user1 true user2 true user3 true user4 false user5 false ------------ LEFT JOIN だと思いますが、うまくいきません。 SELECT a.user_id, b.role_id FROM a LEFT JOIN b ON a.user_id = b.user_id WHERE b.role_id='role1'; 結果は以下になります。 ------------ user1 role1 user2 role1 user3 role1 ------------ #Whereで絞って、当然の結果です SQLをどうかければよいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • MySQL