2015-03-30 72 views
0

我一直在研究連接,我只是想讓別人確認我對它的理解。快速SQL Server加入評論

說到連接,它始終是ParentTable右外連接ChildTable 這也是正確的:ChildTable左外連接ParentTable。

這是什麼問題:ParentTable左外連接ChildTable會給 空值?

我在下面做了一個快速選擇,是不是?

Select Mom, Brother from ParentTable right outer join ChildTable 
on ParentTable.LastName = ChildTable.LastName 

或者它是左外連接還是內連接? 下週二我有一個即將到來的測試,這讓我感到困惑,任何幫助都會很棒!

+0

如果您願意,「RIGHT」或「LEFT」指的是「主」表。您正在採集所有記錄的表格,匹配且無法匹配。那麼,你想從哪張表中取出所有記錄? – Andrew 2015-03-30 19:30:09

+0

所以方向總是指向父表,如果這是正確的,那麼我給的例子是錯誤的? – 2015-03-30 19:31:47

+0

所以它會看起來像這樣呢?從ParentTable中選擇媽媽,兄弟在ParentTable上留下外部連接ChildTable.LastName = ChildTable.LastName – 2015-03-30 19:33:35

回答

1

父母和孩子並不是真正的最好的例子,當你看到這個時,他們會讓你想到特定的家庭關係,這會對你的想法產生限制。

我們需要兩個簡單的表:

 
    a:   b: 
    a.id a.val b.id b.val 
    1 a1  1 b1 
    2 a2  3 b3 
    4 a4  5 b5 
    6 a6  6 b6 
    7 a7 

下面是一個簡單的左外連接:

SELECT a.*, b.* FROM a LEFT OUTER JOIN b ON a.id = b.id; 

這裏 「a」 是左表,所以所有來自行將包括表「a」,但只有來自表「b」的行匹配,否則從該表中選擇的所有字段將爲「空」。

 
    result: 
    a.id a.val b.id b.val 
    1 a1 1 b1 
    2 a2 null null 
    4 a4 null null 
    6 a6 6 b6 
    7 a7 null null 

下面是一個簡單的右外連接:

SELECT a.*, b.* FROM a RIGHT OUTER JOIN b ON a.id = b.id; 

這裏的「一」仍是左表,但因爲我們已經指定了正確的從「B加入所有行「將被包括在內,但僅匹配來自a的行。

 
    result: 
    a.id a.val b.id b.val 
    1 a1 1 b1 
    null null 3 b3 
    null null 5 b5 
    6 a6 6 b6 

左和右只是指表的聯接子句中,並且都將給予靠的是表中的哪些數據空值。


如果換表和使用左右,而不是(或反之亦然)是一樣的,所以下面的是一樣的上述第一個查詢:

SELECT a.*, b.* FROM b RIGHT OUTER JOIN a ON a.id = b.id; 

注意SELECT或ON子句中的表的順序不會影響連接子句。


內連接並不需要向左或向右看,因爲它不顯示無論從左側或右側的所有記錄,只是那些匹配:

SELECT a.*, b.* FROM a INNER JOIN b ON a.id = b.id; 
 
    result: 
    a.id a.val b.id b.val 
    1 a1 1 b1 
    6 a6 6 b6 

而不是想父母和孩子認爲這些表就像數據集,這可能是什麼讓你感到困惑。