所有
我正在审核一些基本的MySQL JOIN
教程。 Jeff Atwood gives an example在他的博客上就是这样的:
SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
在我看来,从语义角度来看,查询不需要在第二行提及TableB
。我理解正确吗?在我看来,所有信息都已在第3行中提供。
我不是要试图引发任何关于SQL语言效率的麻烦,我只是想了解这个提及TableB
是否会带来任何新信息,在这种情况下或其他方面。
答案 0 :(得分:2)
TableB
仅出现在第三行,因为您加入的列未唯一命名。
例如,假设您想加入TableA
和TableB
列Foo
和Bar
,其中TableA
只有Foo
的ciolumn只有TableB
有一个名为Bar
的列。然后你可以这样写:
SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON Foo = Bar
答案 1 :(得分:2)
它没有带来新的信息,但它确实带来了精确性和你对表格进行别名的能力:
SELECT a.* FROM TableA a
LEFT OUTER JOIN TableBWhichHasAReallyLongUnweildyName b
ON a.name = b.name
请注意,在这个公式中,我可以明确地要求a中的数据,并在第3行中更容易地找出连接。但是,编译器不会有关于从何处获取该信息的非任意指导要使用的表,除非我明确声明它。考虑这是否是SQL的工作方式:
SELECT b.* FROM TableA a
LEFT OUTER JOIN
ON TableA.name = TableB.name b
WHERE TableB.value v > 1
我是说tableB是别名'b',还是TableB.name是别名'b'?这只是令人困惑;更好的是明确和权威。