聪明的写sql加入方式

时间:2012-09-13 17:19:52

标签: mysql

我正在探索某人的代码,我找到了这个查询。这个查询是使用join获取数据。但是没有使用内连接,外连接,左或右。程序员只需编写此查询。

我发现这是编写查询的SMART方式,如果这个查询是对的吗?

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

此查询是否正确?

这个查询是正确的,我认为,这是更好的编写查询的方法,因为它会节省大量的磁盘空间而不是使用左连接/右连接像使查询更长的单词

SMARTY WAY

2 个答案:

答案 0 :(得分:7)

是的,没关系。它与INNER JOIN相同。

注意:

  

使用哪种语法?根据ANSI SQL规范,使用INNER   JOIN语法更可取。此外,尽管使用WHERE   使用显式连接语法来定义连接的子句确实更简单   确保您永远不会忘记连接条件,它可以   也会影响性能(在某些情况下)。

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

答案 1 :(得分: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;