我们平时使用的查询 sql 基本格式如下:
|
|
实际的执行顺序并不是如上书写顺序一样的:
FROM
: 对 from 左右的表计算笛卡尔积
,产生虚拟表VT1
;ON
: 对笛卡尔积进行筛选,只有符合条件的行才会被记录到虚拟表VT2
中;JOIN
: 如果是 OUT JOIN,那么将保留表中(如左表或者右表)未匹配的行作为外部行添加到虚拟表VT2
中,从而产生了虚拟表VT3
;WHERE
: 对 JOIN 之后的虚拟表VT3
进行进一步的筛选,满足条件的留下生成虚拟表VT4
;GROUP BY
: 对虚拟表VT4
进行分组,生成VT5
;HAVING
: 对分组后的VT5
进行筛选,生成虚拟表VT6
;SELECT
: 选择 SELECT 指定的列,插入到虚拟表VT7
中;DISTINCT
: 对虚拟表VT7
中的数据进行去重,产生VT8
;ORDER BY
: 对虚拟表VT8
的中的数据进行排序生成VT9
;LIMIT
: 取出VT9
中指定行的数据,产生虚拟表VT10
,并返回数据