SQL连接多个表

时间:2018-03-07 11:56:50

标签: sql join

如果我有这样的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

我是否正确地承担以下事项:

  1. 首先,表A与表B
  2. 结合
  3. 表C与表A独立于声明1
  4. 连接
  5. 表D与表C一起独立于Statement 1和2
  6. 陈述1,2和3的结果,并从选择
  7. 一起列出

1 个答案:

答案 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

我相信这基本上就是你所描述的。