3

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

我发现这是编写查询的 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

这个查询正确吗?

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

聪明的方式

4

2 回答 2

7

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

笔记:

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

资料来源:Sam's - MySQL 速成课程,第 139 页

于 2012-09-13T17:21:35.513 回答
6

是的,这称为隐式 JOIN语法。一旦 ANSI-92 定义了显式 JOIN语法,它就不再受欢迎,随着查询变得更加复杂,这种语法更容易阅读。

来自维基百科

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;
于 2012-09-13T17:21:48.710 回答