有时我的同事会给我这样的查询:
SEL c.col1, b.col2, a.somecol, a.somemore
FROM db.tbl1 A, db.tbl2 B, db.tbl3 C
WHERE A.id = B.id and B.otherId = C.otherID
GROUP BY 1,2 ORDER BY 1
我只想澄清这实际意味着什么。是这样的:
SELECT
c.col1
b.col2
a.somecol
a.somemore
FROM
db.tbl1 AS A
INNER JOIN db.tbl2 AS B
ON B.id = A.id
INNER JOIN db.tbl3 AS C
ON C.otherId = B.otherID
GROUP BY
c.col1,
b.col2
ORDER BY
c.col1
我只是想让事情变得更加清晰和可读,但我想确保从表演的角度来看,我并没有误解任何事情。我也用更易读的名字等替换别名......
答案 0 :(得分:3)
其他人声称这种方式没有任何好处,但这是不正确的。使用显式连接有好处。使用隐式连接没有任何好处,除非您的数据库太旧而不会使用显式连接。
使用显式连接可防止许多意外交叉连接。
当您真正想要交叉连接时,意图很明确。
隐式连接更难维护,特别是如果您需要更改为左连接,因为混合两个(并且某些数据库不支持隐式的左连接语法)通常会导致错误的结果。
除非您正在处理这样一个旧版本的数据库,否则它只需要隐式连接,因此在更好地发布更多内容之后的20年内写一个是不错的选择。我看到了,他们没有通过代码审查。隐式连接是一种SQL反模式,如果使用现代数据库,则没有理由使用它。
答案 1 :(得分:1)
这与JOIN相同。
SQL于1986年标准化,但在1992年第3次修订之前没有加入。
正如评论者所说,我不知道GROUP BY正在做什么。它们与聚合一起使用。
答案 2 :(得分:-1)
他们正在编写IMPLICIT JOINS,你正在编写EXPLICIT JOINS。几十年来,ANSI联盟试图将这种隐式联接放在一个已弃用的黑名单中,但有许多遗留系统(和传统程序员)。 除了显式连接之外,在一种或另一种形式中没有任何好处更具可读性。在某些地方,你找不到文件告诉连接在where子句之前,但真实的是引擎可以在幕后重新排列它。