父母和孩子並不是真正的最好的例子,當你看到這個時,他們會讓你想到特定的家庭關係,這會對你的想法產生限制。
我們需要兩個簡單的表:
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
而不是想父母和孩子認爲這些表就像數據集,這可能是什麼讓你感到困惑。
如果您願意,「RIGHT」或「LEFT」指的是「主」表。您正在採集所有記錄的表格,匹配且無法匹配。那麼,你想從哪張表中取出所有記錄? – Andrew 2015-03-30 19:30:09
所以方向總是指向父表,如果這是正確的,那麼我給的例子是錯誤的? – 2015-03-30 19:31:47
所以它會看起來像這樣呢?從ParentTable中選擇媽媽,兄弟在ParentTable上留下外部連接ChildTable.LastName = ChildTable.LastName – 2015-03-30 19:33:35