如果我有这样的SQL查询:
SELECT * FROM tableA a
INNER JOIN TABLEB b on a.item = b.item
INNER JOIN TABLEC c on a.item = c.item
LEFT JOIN TABLED d on d.item = c.item
我是否正确地承担以下事项:
答案 0 :(得分:0)
不,你不对。 SQL是描述性语言,而不是过程语言。 SQL查询描述结果集,但未指定查询的实际执行方式。
事实上,几乎所有数据库都使用有向非循环图(DAG)执行查询。图中的运算符具有名称,但它们与SQL中的子句不对应。
换句话说,查询被编译为您无法识别的语言。一路上,它被优化。优化的关键部分是确定连接操作的顺序。
就解释查询的含义而言,join
从左到右分组(在没有括号的情况下):
SELECT *
FROM ((tableA a INNER JOIN
TABLEB b
on a.item = b.item
) INNER JOIN
TABLEC c
on a.item = c.item
) LEFT JOIN
TABLED d
on d.item = c.item
我相信这基本上就是你所描述的。