SQL 关联表的执行顺序
时间: 2023-09-03 08:11:34 浏览: 45
执行关联表查询时,SQL 引擎会按照以下顺序执行:
1. 执行 FROM 子句中的表,生成虚拟表 VT1。
2. 执行第一个 ON 子句的条件,VT1 中不符合条件的行将被过滤掉,生成虚拟表 VT2。
3. 如果还有更多的 ON 子句,重复步骤 2,使用 VT2 作为输入表,生成 VT3、VT4 等等,直到所有的 ON 子句都被处理完。
4. 如果有 WHERE 子句,执行 WHERE 子句,过滤掉不符合条件的行,生成虚拟表 VT5。
5. 如果有 GROUP BY 子句,按照 GROUP BY 子句中的列对 VT5 中的行进行分组,生成虚拟表 VT6。
6. 如果有 HAVING 子句,执行 HAVING 子句,过滤掉不符合条件的分组,生成虚拟表 VT7。
7. 如果有 SELECT 子句,计算 SELECT 子句中的表达式,生成虚拟表 VT8。
8. 如果有 ORDER BY 子句,按照 ORDER BY 子句中的列对 VT8 的行进行排序,生成虚拟表 VT9。
9. 如果有 LIMIT 子句,选取前 N 行,生成虚拟表 VT10。
最终,SQL 引擎将输出 VT10 中的行作为查询结果。
相关问题
sql语句from多表执行顺序
当SQL语句中涉及到多个表的时候,SQL引擎的执行顺序一般如下:
1. FROM子句:指定要查询的表或视图
2. JOIN子句:连接需要关联的表
3. ON子句:指定连接条件
4. WHERE子句:筛选满足条件的记录
5. GROUP BY子句:按指定的列对记录进行分组
6. HAVING子句:筛选满足条件的分组
7. SELECT子句:选择要查询的列
8. ORDER BY子句:按指定的列对记录进行排序
需要注意的是,当FROM子句中涉及到多个表时,JOIN子句会根据连接条件将这些表进行关联,这个过程可能会涉及到多次比较和排序操作,所以JOIN子句的执行顺序往往比较复杂,具体执行顺序会根据SQL引擎的优化策略而定。
mysql中多表关联有inner join和left join ,他们的执行顺序是什么
在MySQL中,多表关联可以使用INNER JOIN和LEFT JOIN两种方式。它们的执行顺序如下:
1. INNER JOIN:内连接会返回两个表中匹配的记录。它的执行顺序是先对两个表进行笛卡尔积,然后根据连接条件筛选出匹配的记录。只有在连接条件满足的情况下,才会返回结果。
2. LEFT JOIN:左连接会返回左表中的所有记录,以及与之匹配的右表记录。它的执行顺序是先对两个表进行笛卡尔积,然后根据连接条件筛选出匹配的记录。如果右表中没有与左表匹配的记录,那么右表的字段将会被填充为NULL。
下面是一个示例:
```sql
SELECT *
FROM table1
INNER JOIN table2 ON table1.id = table2.id
```
这个查询将返回table1和table2中id字段匹配的记录。
```sql
SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
```
这个查询将返回table1中的所有记录,以及与之匹配的table2中的记录。如果没有匹配的记录,table2的字段将会被填充为NULL。