先笛卡尔积, 然后再on过滤, 如果join是inner的, 就继续往下走, 如果join 是left join, 就把on过滤掉的左主表中的数据再添加回来; 然后再执行where里的过滤; on中不是最终过滤, 因为后面left join还可能添加回来, 而where才是最终过滤. 只有当使用外连接(left, right)时, on 和 where 才有这个区别, 如果...
#FROM ...,...-> ON -> (LEFT/RIGNT JOIN) -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT 我们来简单分析一下 一、select是先执行FROM这一步的,如果是多表连接查询,还会分出以下几个步骤 1. 通过join进行表连接求得笛卡尔积,相当于得到虚拟表(virtual table)表...
JOIN:生成临时表 🚕 JOIN子句会补充数据并生成临时表。比如LEFT JOIN会添加左表剩余的数据。 WHERE:再次过滤 🚙 然后,WHERE子句会对临时表进行第二次行级过滤,这次是根据WHERE后面的条件。 GROUP BY:分组聚合 🚌 GROUP BY子句会将数据按照指定字段进行分组聚合。比如,原本是学校-班级-学生的明细数据,经过GROUP...
1. FROM 在这一步,无论后面跟那种联接运算(LEFT JOIN、RIGHT JOIN等),都首先执行交叉联接(CROSS JOIN),计算笛卡尔积,生成虚拟表 VT-1 2. ON 根据ON 的筛选条件对 VT-1 进行筛选,生成 VT-2 3. JOIN 如果指定了OUTER JOIN(如 LEFT JOIN、RIGHT JOIN),将上一步没有匹配的行添加到 VT-2,生成 VT-3。...
然而其执行顺序却是下面这样的 FROM <表名># 笛卡尔积 ON <筛选条件># 对笛卡尔积的虚表进行筛选 JOIN<join,leftjoin,rightjoin...> <join表># 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中 WHERE <where条件># 对上述虚表进行筛选 ...
SELECT 语句中各个子句的执行顺序与 SELECT 语句中子句的语法顺序是不一样的。 一、SELECT 语句的语法顺序 SELECT 语句在书写时各个关键字要保持下面的顺序: select [distinct] 字段或表达式列表 from 表名 join(left join, right join) on 连接条件
SQL 语言不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。 但在SQL 语句中,第一个被处理的子句式 FROM,而不是第一出现的 SELECT。SQL 查询处理的步骤序号: (1) FROM <left_table> (2) <join_type> JOIN <right_table> ...
一、查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_condition (4) WHERE where_condition (5) GROUP BY group_by_list (6) WITH {cube | rollup} (7) HAVING having_condition (8) SELECT (9) DISTINCT (11) top_specification select_list ...
mssql select 执行顺序 1 查询语法:(8)SELECT (9)DISTINCT(11)<TOP_specification> <select_list>(1)FROM <left_table>(3) <join_type> JOIN <right_table>(2) ON <join_condition>(4)WHERE <where_condition>(5)GROUP BY <group_by_list>(6)WITH {CUBE | ROLLUP}(7)HAVING <having_condition...
针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。 针对第3个结集执行having xx进行筛选,返回第4个结果集。 针对第4个结果集排序。 多表查询 多表查询的区别 cross join:交叉连接 inner join:内连接 left join:左外连接 right join:右外连接 union、union all:全...