我正在探索某人的代码,我找到了这个查询。这个查询是使用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
答案 0 :(得分:7)
是的,没关系。它与INNER JOIN相同。
注意:
使用哪种语法?根据ANSI SQL规范,使用INNER JOIN语法更可取。此外,尽管使用WHERE 使用显式连接语法来定义连接的子句确实更简单 确保您永远不会忘记连接条件,它可以 也会影响性能(在某些情况下)。
答案 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;