2012-09-13 81 views
3

我正在探索某人的代碼,並且我發現了這個查詢。這個查詢是使用連接獲取數據的。但是沒有內部連接,外部連接,左側或右側的使用。程序員只是寫這個查詢。寫入sql的智能方式加入

我發現這是智能寫作查詢方式,如果這個查詢是正確的?

SELECT 
    a.*,b.*,c.*,d.*,e.* 
FROM 
    property_photos a,property_promotions b,properties c, communities d,cities e 
WHERE 
    a.property_id = b.property_id AND 
    a.property_id = c.id AND 
    (b.promotion_id =2 OR b.promotion_id =1) AND 
    a.mainphoto="Y" AND 
    d.id=c.community_id AND 
    e.id = c.city_id AND 
    a.featured_status = 1 

此查詢語句正確嗎?

它這個查詢是正確的,我想,這是更多更好的方式來編寫查詢,因爲這將節省大量的硬盤空間,而不是使用LEFT JOIN /右加入類的字眼,這使得查詢長

SMARTY方式

+4

你有沒有試過看? – andrewsi

+0

當然,如果他寫的這意味着他必須經過測試!!!!它的工作原理...沒有故障出現在語法或邏輯... – user1655481

+0

我相信一個問號將指出它是一個問題。 – dbf

回答

7

是的,它是正常的。它與INNER JOIN相同。

注:

這句法使用?根據ANSI SQL規範,使用INNER JOIN語法更可取。此外,雖然使用WHERE 子句來定義聯接確實更簡單,但使用顯式聯接語法 可確保您永遠不會忘記聯接條件,並且它也可能影響性能(在某些情況下)。

來源:Sam's - MySQL Crash Course, page 139

+0

@embedded。凱爾謝謝! –

5

是的,這就是所謂的隱含JOIN語法。一旦ANSI-92定義了一個明確的JOIN語法,它已經不受歡迎了,隨着查詢變得更加複雜,這個數量級更容易理解。

Wikipedia

SQL指定兩個不同的語法方式來表達加入:「顯式連接符號」和「隱式連接符號」。

的「顯式連接符號」使用JOIN關鍵字來指定要連接的表,和ON關鍵字指定的連接謂詞,如下面的例子:

SELECT * 
FROM employee 
INNER JOIN department ON employee.DepartmentID = department.DepartmentID; 

的「隱式連接符號「只是在SELECT語句的FROM子句中使用逗號分隔它們來列出要加入的表。因此它指定了一個交叉連接,並且WHERE子句可能會應用附加的過濾謂詞(與顯式表示法中的連接謂詞相當)。

下面的例子是相當於以前的一個,但使用隱式連接符號此時:

SELECT * 
FROM employee, department 
WHERE employee.DepartmentID = department.DepartmentID; 
+0

怎麼樣???????????? – shail

+0

在MySQL> = 5.5中,它們不是完全等價的(儘管在你的例子中它恰好是它們):解析器現在賦予顯式連接更高的優先級,而不是隱式連接,這會導致一些意外人們並不期待它。搜索['JOIN'語法](http://dev.mysql.com/doc/en/join.html)獲取「優先級」。 – eggyal

+0

如果它們不完全等價,那麼在上面的查詢中使用的連接類型是什麼?還是說隱式???????? – shail