web-dev-qa-db-ja.com

SQLで複数のテーブルを結合する

Sombodyは参加について説明できますか?

内部結合は、where条件に基づいて共通データを選択します。

左外部結合は、共通に関係なく左からすべてのデータを選択しますが、右外部からは右テーブルから共通データを取得します。

私は基本を知っていますが、5、8、10を超えるテーブルの参加に関して疑問が残ります。

結合するテーブルが10個あるとします。最初の5つのテーブルとの内部結合があり、6番目のテーブルとの左結合を適用しようとすると、クエリはどのように機能しますか?

つまり、最初の5つのテーブルの結果セットは左のテーブルとみなされ、6番目のテーブルは右のテーブルとみなされますか?または、5番目のテーブルのみが左と見なされ、6番目のテーブルが右と見なされますか?これに関して私を助けてください。

14
Prince

複数のテーブルを結合する場合、各結合の出力は論理的に次の結合に入る仮想テーブルを形成します。

したがって、あなたの質問の例では、最初の5つのテーブルを結合した複合結果は左側のテーブルとして扱われます。

詳細については、 Itzik Ben-Ganの論理クエリ処理ポスター を参照してください。

結合に関与する仮想テーブルは、ON句を配置することで制御できます。例えば

SELECT *
FROM   T1
       INNER JOIN T2
         ON T2.C = T1.C
       INNER JOIN T3
                  LEFT JOIN T4
                    ON T4.C = T3.C
         ON T3.C = T2.C 

(T1 Inner Join T2) Inner Join (T3 Left Join T4)と同等です

20
Martin Smith

JOINを順番に考えると役立つので、前者は正しいです。

SELECT *
  FROM a
  INNER JOIN b ON b.a = a.id
  INNER JOIN c ON c.b = b.id
  LEFT JOIN d ON d.c = c.id
  LEFT JOIN e ON e.d = d.id

すべてのa基準が一致するbおよびcおよびONのすべてのフィールドに加えて、dからの値基準が一致し、その基準がすべて一致するeのすべてのコンテンツ。

知っている RIGHT JOINは完全に受け入れられますが、経験上、それは不要であることがわかりました。ほとんどの場合、左から右に物事に参加するだけです。

8
Colselaw

> Simple INNER JOIN VIEW code ...

CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;
1
Manu R S

このように結合を適用できます。

select a.*,b.*,c.*,d.*,e.*  
from [DatabaseName].[Table_a] a 
INNER JOIN [DatabaseName].[Table_b] b ON a.id = b.id 
INNER JOIN [DatabaseName].[Table_c] c ON b.id=c.id 
INNER JOIN [DatabaseName].[Table_d] d on c.id=d.id 
INNER JOIN [DatabaseName].[Table_e] e on d.id=e.id where a.con=5  and 
b.con=6

ここで、a。*の場所とwhere条件で、好きなcolumn(filed)とwhere条件の条件を表示できます。選択に応じて、さらにテーブルとデータベースを挿入できます。ただし、別のデータベースで作業する場合は、データベース名とエイリアスについて言及する必要があることに注意してください。

0
Bha15