2016-07-10 58 views
0

我在SQL-Basics的演講中對這部分有點麻煩。 我認爲這不是很好解釋,我很難在互聯網上找到任何好的信息。在我的書,它說:「這幾乎是百達如果兩個元組的屬性沒有被明確的聯接謂詞鏈接的錯誤:」 然後這個例子:這些SQL查詢究竟有什麼問題

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%' 

沒有其中解釋了顯式連接謂語。對我來說這個例子看起來很好。 事前有一個similair例如:

SELECT s.Name, c.Name AS Contact, c.Phone 
FROM Suppliers AS s, ContactPersons AS c 
WHERE s.SuppID = c.SuppID 

這是一個確定加入的書說。我真的不明白有什麼區別,什麼是JOIN謂語?

而且我對任何語法,錯誤(我不是母語)

THX對不起提前!

+0

意思是舊式連接通過where子句與「連接xyandz ON blah等等」或許 – Drew

+1

總是使用顯式的'JOIN'語法;從不在'FROM'子句中使用逗號。 –

回答

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個查詢的例子:

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 = ... 
     ....... 

正如你所看到的,我並沒有把連的條件一半,假設有可能是更多的條件和它看起來像廢話。

+0

你能告訴我爲什麼第一個隱式連接謂詞不起作用,第二個隱含連接謂詞不起作用?我仍然沒有得到那部分。至今爲止的答案,這真的幫了我很多的準備 –

+0

你是什麼意思不起作用?拋出錯誤? @TilmanZuckmantel – sagi

+0

在我的書中說,它導致廢話 –