mysql查询语句逻辑查询步骤

MYSQL逻辑查询步骤
查询操作是关系数据库中使用最为频繁的操作,也是构成其他 MySQL (如 DELETE UPDATE )的基础。查询处理的顺序如下 :
(7) SELECT (8) DISTINCT 
(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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值