我一直在研究加入,我只是想让某人确认我对它的理解。
当涉及到连接时,它始终是ParentTable右外连接ChildTable 这也是正确的:ChildTable左外连接ParentTable。
这有什么问题:ParentTable左外连接ChildTable将给出 空值?
我在下面做了一个快速选择,是不是?
Select Mom, Brother from ParentTable right outer join ChildTable
on ParentTable.LastName = ChildTable.LastName
或者是左外连接还是内连接? 我下周二即将进行测试,这让我很困惑,任何帮助都会很棒!
答案 0 :(得分: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"将被包括在内,但只有表格中的行和#34; b"它们匹配的位置,否则从该表中选择的所有字段将为" null"。
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;
这里" a"仍然是左表,但因为我们已经指定了一个右连接来自" 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
LEFT和RIGHT只是引用JOIN子句中的表,并且根据表中的数据给出空值。
如果您交换表并使用LEFT而不是RIGHT(反之亦然)它只是相同,所以以下内容与上面的第一个查询相同:
SELECT a.*, b.* FROM b RIGHT OUTER JOIN a ON a.id = b.id;
请注意,SELECT或ON子句中表的顺序不会影响join子句。
INNER JOIN不会使用LEFT或RIGHT术语,因为它不会显示左侧或右侧的所有记录,只会显示匹配的记录:
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
不要认为父母和孩子将表视为数据集,这可能会让您感到困惑。