MySQL之sql字句
MySQL之sql子句
一、sql子句
1、作用
<1> select:基本的查询语句,用来表中查询数据,确定结果集的内容。
<2> from(join):确定数据的来源,生成相应的临时表
<3> where:对from子句得到的临时表进行条件筛选,得到相应的临时表
<4> group by:把条件筛选后的结果进行分组
<5> having:与where子句作用类似,但是只作用于分组后的数据。对分组后的数据进行相关判断。
<6> order by:对生成的结果集进行相应的排序。
<7> limit:指定返回的结果集的行数。
2、执行顺序
from -> where -> select -> group by -> having -> order by -> limit
注:1、where中不能使用聚合函数,因为聚合函数针对结果集。
2、where中不能使用select中创建的别名,因为where在select前执行。
3、group by后的每个分组只会返回一条记录,对于多个值可在select中使用聚合函数进行合并
4、group by开始可以使用select中创建的别名。
3、实例
1 select a.user_id as uid,count(a.id) as count 2 from application as a 3 where a.created_at > '20180101' 4 group by uid 5 having count > 0 6 limit 8
二、union 和 in
1、union:总是会创建一个临时表,然后再将数据返回给用户。且不加all时会进行去重,影响效率
1 (select a.id,a.user_id 2 from application as a 3 limit 20 4 ) 5 union all 6 (select a.id,a.user_id 7 from application as a 8 limit 20 9 ) 10 limit 50
注:limit 20是对两个select语句分别limit,最后的limit对union all形成的临时表进行limit。虽然使用了limit 50,但临时表实际只有40条数据。
2、in:可在where子句中规定多个值。
注:1、in() 关联子查询效率比较差,避免使用。
2、避免使用多个范围条件,即where中使用多个in,会导致无法完全使用多列索引
三、count
作用:1、使用count(*)统计行数
2、使用count(col)统计某个列值的数量,但是要求这个列值是非空的(不统计null)
注:count(*) 会忽略所有的列而直接统计行数,而不会扩展为所有的列。
四、group by 和 distinct
1、group by:聚合函数,根据不同的列进行分组。但只会返回每个分组的一条记录,故可以实现去重的效果。
2、distinct:用于去重。
select count(distinct a.id) select distinct a.id, a.uer_id select a.id, distinct a.user_id from application as a from applicatin as a from application as a # 对id进行去重后count # 对id、user_id去重 # 语法错误
注:group by的效率低于distinct
版权声明:本文为yuluodisuihe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。