MYSQL逻辑查询步骤
(7) SELECT (8) DISTINCT
(1) FROM
(3) JOIN
(2) ON
(4) WHERE
(5) GROUP BY
(6) HAVING
(9) ORDER BY
(10) LIMIT
(1) FROM
(3) JOIN
(2) ON
(4) WHERE
(5) GROUP BY
(6) HAVING
(9) ORDER BY
(10) LIMIT
1
)
FROM
:对
FROM
子句中的左表和右表执行笛卡儿积(
Cartesian product
),产生虚拟表
VT1
。
2 ) ON :对虚拟表 VT1 应用 ON 筛选,只有那些符合的行才**入虚拟表 VT2 中。
3 ) JOIN :如果指定了 OUTER JOIN (如 LEFT OUTERJOIN 、 RIGHT OUTER JOIN ),那么保留表中未匹配的行作为外部行添加到虚拟表 VT2 中,产生虚拟表 VT3 。如果 FROM 子句包含两个以上表,则对上一个连接生成的结果表 VT3 和下一个表重复执行步骤 1 )~步骤 3 ),直到处理完所有的表为止。
4 ) WHERE :对虚拟表 VT3 应用 WHERE 过滤条件,只有符合的记录才**入虚拟表 VT4 中。此时数据还没有分组,所以不能在 where 中出现对统计的过滤
5 ) GROUP BY :根据 GROUP BY 子句中的列,对 VT4 中的记录进行分组操作,产生 VT5 。在 GROUP BY 阶段,数据库认为两个 NULL 值是相等的,因此会将 NULL 值分到同一个分组中。
6 ) CUBE|ROLLUP :对表 VT5 进行 CUBE 或 ROLLUP 操作,产生表 VT6 。
7 ) HAVING :对虚拟表 VT6 应用 HAVING 过滤器,只有符合的记录才**入虚拟表 VT7 中。 count(expr) 会返回 expr 不为 NULL 的行数, count(1) 、 count(*) 会返回包括 NULL 值在内的所有数量
8 ) SELECT :第二次执行 SELECT 操作,选择指定的列,插入到虚拟表 VT8 中。
9 ) DISTINCT :去除重复数据,产生虚拟表 VT9 。
10 ) ORDER BY :将虚拟表 VT9 中的记录按照进行排序操作,产生虚拟表 VT10 。如果不指定排序,数据并非总是按照主键顺序进行排序的。 NULL 被视为最小值
11 ) LIMIT :取出指定行的记录,产生虚拟表 VT11 ,并返回给查询用户。 LIMIT n, m 的效率是十分低的 , 一般可以通过在 where 条件中指定范围来优化 where id> ? limit 10
2 ) ON :对虚拟表 VT1 应用 ON 筛选,只有那些符合的行才**入虚拟表 VT2 中。
3 ) JOIN :如果指定了 OUTER JOIN (如 LEFT OUTERJOIN 、 RIGHT OUTER JOIN ),那么保留表中未匹配的行作为外部行添加到虚拟表 VT2 中,产生虚拟表 VT3 。如果 FROM 子句包含两个以上表,则对上一个连接生成的结果表 VT3 和下一个表重复执行步骤 1 )~步骤 3 ),直到处理完所有的表为止。
4 ) WHERE :对虚拟表 VT3 应用 WHERE 过滤条件,只有符合的记录才**入虚拟表 VT4 中。此时数据还没有分组,所以不能在 where 中出现对统计的过滤
5 ) GROUP BY :根据 GROUP BY 子句中的列,对 VT4 中的记录进行分组操作,产生 VT5 。在 GROUP BY 阶段,数据库认为两个 NULL 值是相等的,因此会将 NULL 值分到同一个分组中。
6 ) CUBE|ROLLUP :对表 VT5 进行 CUBE 或 ROLLUP 操作,产生表 VT6 。
7 ) HAVING :对虚拟表 VT6 应用 HAVING 过滤器,只有符合的记录才**入虚拟表 VT7 中。 count(expr) 会返回 expr 不为 NULL 的行数, count(1) 、 count(*) 会返回包括 NULL 值在内的所有数量
8 ) SELECT :第二次执行 SELECT 操作,选择指定的列,插入到虚拟表 VT8 中。
9 ) DISTINCT :去除重复数据,产生虚拟表 VT9 。
10 ) ORDER BY :将虚拟表 VT9 中的记录按照进行排序操作,产生虚拟表 VT10 。如果不指定排序,数据并非总是按照主键顺序进行排序的。 NULL 被视为最小值
11 ) LIMIT :取出指定行的记录,产生虚拟表 VT11 ,并返回给查询用户。 LIMIT n, m 的效率是十分低的 , 一般可以通过在 where 条件中指定范围来优化 where id> ? limit 10