我们平时使用的查询 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,并返回数据