• ベストアンサー

Left outer join とかのLeft

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

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

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

SQL文の記述としては「Table_A LEFT JOIN Table_B」と書きますよね。 このときJOIN文の左側(例だと Table_A)と右側(例だと Table_B)と言う意味で、どちらのテーブルを主としてデータを結合するかと言う意味になります。 LEFT JOIN ならJOIN文の左側を主として、RIGHT JOIN ならJOIN文の右側を主とすると言う事です。 なので、「Table_A LEFT JOIN Table_B」と「Table_B RIGHT JOIN Table_A」は同じ結果になります。 3つも4つもテーブルを結合する場合は、それぞれの結合順があるので RIGHT JOIN を使う事もありますが、2つのテーブルであれば書く順番の問題なので LEFT JOIN になるように記述することが多いですね。

spongetak
質問者

お礼

ありがとうございます。なるほど、Left outer join などのコマンドの、左側に書くか、右側に書くか、なのですね。 Left outer joinであれば、「左側のテーブルのある列を基準として、右側にもう一方のテーブルの対応する列があるレコードに関して、追加していく」ということであるわけですね?

関連するQ&A

  • 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 OUTER 外部結合で一致しない値も表示

    select table1.*, table2.no from table1 inner left outer join table2 on table1.id = table2.no 上記の文を使って、一致した値がなくても、 すべて表示させた表を完成させたいのですが、 エラー #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'left outer join table2 on table1.id = table2.no~ が出てしまいます。 何がいけないのか、LEFT OUTERなしでやってみると、 きちんと値が返ってきました。 詳しい方いらっしゃいましたら、どうかお知恵を貸してください。 お願いいたします。

    • ベストアンサー
    • MySQL
  • Left Join/Right Join の意味

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

  • OUTER JOIN と TOP10との組み合わせ

    LEFT OUTER JOIN と TOP10との組み合わせ テーブルAと LEFT OUTER JOIN するテーブルBがあり、 単にLEFT OUTER JOINすると、 レコードA01 レコードB01 レコードA01 レコードB02 レコードA01 レコードB03 のようにレコードBに対し、該当する同じレコードAが複数取得されます。 この状態でTOP10をかけると、テーブルAのTOP10が欲しいのに、 テーブルBも混じった数で取得されてしまいます。 (テーブルAは10レコード取得できない) これをテーブルAのTOP10を取得して、それにJOINするテーブルBの数は問わない方法は可能でしょうか?

  • MySQLでLEFT JOIN

    MySQL4.0.26でテーブルの左外部結合がしたいです。 左テーブルAと 右テーブルBをWHERE句で抽出したもの を結合することはできないのでしょうか? 考えた以下の式ではエラーが出てしまいます。 SELECT * FROM A LEFT JOIN ( SELECT * B WHERE id = 1 ) AS B2 ON A.id = B2.id

    • ベストアンサー
    • MySQL
  • 多数のテーブルでのFULL OUTER JOIN

    SQL Sever 2005 を利用しております。5つのテーブルから値を取得するSQL文を作成したいと考えております。3つまでのテーブルのFULL OUTER JOIN は例がるのですがそれ以上となると調べても判りませんでした。ご教授お願い致します。 TABLE1~TABLE2は同じ構成で発生した5つのテーブルを1つのテーブルに合体して データどれか1つのテーブルで発生すれば表示したい。 出来れば現在作成中のSQL文がFULL OUTER JOINで作成しているのでこれを流用したいので FULL OUTER JOIN の方法で教えて頂ければ幸いです。 以上よろしくお願い致します。 (※IDが主キー) テーブル名:TABLE1 ID-----金額 ----------- 01-----1000 11-----2000 テーブル名:TABLE2 ID-----金額 ----------- 02-----2000 12-----3000 テーブル名:TABLE3 ID-----金額 ----------- 03-----3000 テーブル名:TABLE4 ID-----金額 ----------- 02-----1000 04-----4000 テーブル名:TABLE5 ID-----金額 ----------- 01-----1000 05-----5000 作成したいSQL文の結果 ID-----TABLE1金額---TABLE2金額---TABLE3金額---TABLE4金額---TABLE5金額 01-----------1000----------------------------------------------------1000 02-------------------------2000------------------------1000 03----------------------------------------3000 04-----------------------------------------------------4000 05-------------------------------------------------------------------5000 11-----------2000 12-------------------------3000

  • left outer joinが上手くいきません

    四つのテーブルに分かれたデータを、結合しつつ、結合後のテーブルのデータがチェック用テーブルに含まれていないものを抽出したいのですが、left outer joinなど色々ためしても、構文エラーなどになって上手くいきません。 具体的に書くと、 【顧客名テーブル:customer】 顧客ID:customer_id 顧客コード:customer_code 顧客名:customer_name 【最新申込みテーブル:recently】 顧客ID:customer_id 日付:order_date 【過去申込みテーブル:old】 顧客ID1:customer_id1 顧客ID2:customer_id2 日付:order_date 【チェック用テーブル:check】 顧客コード:customer_code 顧客名:customer_name とあるとします。 【最新購入テーブル】と【過去購入テーブル】の両方の顧客IDを抽出し、【顧客名テーブル】の顧客IDと紐付けしてから、顧客コードの一覧を作り、【チェック用テーブル】の顧客コードに含まれない、【顧客名テーブル】の顧客コードを一覧で出力したいのですが、なかなか上手くいかなくて困っています。 ややこしいのは、【過去購入テーブル】の中に含まれる顧客ID1、顧客ID2ともに、フィールド名は違いますが、登録されるデータは、【顧客名テーブル】の顧客IDと同じになるので、【最新購入テーブル】と【過去購入テーブル】で抽出する顧客ID一覧は、 顧客ID:customer_id 顧客ID1:customer_id1 顧客ID2:customer_id2 の三つになります。 UNIONなどで結合した顧客ID一覧を【顧客名テーブル】とつないで顧客コードを出して...など色々やってはみましたが、構文エラーが多く、そもそもどこが間違っているかもよくわからなくて、困っています(>_<)

    • ベストアンサー
    • MySQL
  • エクセルでLEFT OUTER JOINをするには?

     別シートに2つの表がある場合を想定します。 【表1】 A B C 1 0 8 2 9 3 3 2 5 【表2】 A B C 1 f 8 2 l 3 3 r 5 A列をキーとして、SQLでいうところの外部結合(LEFT OUTER JOIN)をして 【表3】 A B C D E 1 0 8 f 8 2 9 3 l 3 3 2 5 r 5 という表3を作りたいのです。 アクセスでできる!といわずにご教授お願いします。

  • LEFT JOINとRIGHT JOINについて

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

  • 実行計画HASH JOIN RIGHT OUTER

    以下のようなSQLがあるとします。 ------------------------ SELECT * from (select * from TABLE-A where 条件色々) AA, TABLE-B BB where BB.x(+) = AA.x ------------------------ TABLE-Aの件数は非常に多く(例100万)、条件は複雑です。 TABLE-Bの件数は少ないです(例30件) この時、実行計画が HASH JOIN RIGHT OUTER TABLE ACCESS FULL TABLE-B のように出ましたが、どのように解釈すれば良いのでしょう? TABLE-Bは件数が少ないのでACCESS FULLでも問題ないでしょうか? HASH JOIN RIGHT OUTER のコストが高くなってて気になってます。 たとえば、この場合のより適切な実行計画ってありますか?