我在关于SQL-Basics的讲座中遇到了这个问题。 我认为它没有得到很好的解释,我很难在互联网上找到任何好的信息。在我的书中它说:"如果两个元组属性没有通过显式连接谓词链接,那么几乎总是一个错误:" 然后这个例子:
SELECT s.Name, c.Name AS Contact, c.Phone
FROM Suppliers AS s, ContactPersons AS c
WHERE s.Name = 'Shop Rite'
AND c.Phone LIKE '+49 351%'
没有解释显式连接谓词是什么。对我来说这个例子看起来很好。 事先有一个类似的例子:
SELECT s.Name, c.Name AS Contact, c.Phone
FROM Suppliers AS s, ContactPersons AS c
WHERE s.SuppID = c.SuppID
如书中所述,这是一个很好的加入。我真的不明白区别是什么,JOIN-Predicate究竟是什么?
我也很抱歉任何语法错误(我不是母语人士)
提前谢谢!答案 0 :(得分:1)
隐式连接语法:
SELECT *
FROM Table1 , Table2
WHERE Table1.id = Table2.id
显式连接语法:
SELECT *
FROM Table1
JOIN Table2
ON Table1.id = Table2.id
隐式语法很好,它可以工作,但不建议。这是令人困惑的语法,可能会导致许多错误,主要是在处理两个以上的表时以及需要LEFT JOIN
时(愚蠢的加号)。你应该习惯只使用正确的连接语法。
以下是一个包含6个表LEFT JOIN
s:
SELECT <columns>
FROM YourTable,AnotherTable,ThirdTable,FourthTable,AnotherTable2,AnotherTable3
WHERE YourTable.id = AnotherTable.id(+) AND
YourTable.sec_id = AnotherTable.Sec_Id(+) AND
AnotherTable.id (+) = ThirdTable.id(+) AND
YourTable.id = FourthTable.id AND
FourthTable.Date = ...
.......
正如你所看到的,假设可能存在更多条件并且它看起来像废话,我甚至没有放置一半的条件。