mysql随笔 -- 基本sql语句

常见查询语句:

select  ....  from .... where  .. group by ... having ... order by .. limit...

  输出  获取数据     过滤    分组    过滤       排序   限定个数 

 

以上为书写顺序,以下为执行顺序:

from  ->  where -> group by - >select - > having -> order by -> limit

例如:在select中定义的别名,在其之前是不能出现的;在之后可以再利用。

 

group by分组:

select * from 表名 group by 字段

表示该表的字段进行分组查询时,只输出该字段分组下的第一个出现的数据。

 

group by与聚合函数count()

出现select count(1) ,classId from stu group by classId,则输出结果为

分组后的对应的和

对比select count(name),如果name中有null,那么count不会记录null直接跳过,判断下一个是否为Null,其他情况二者一致。

 

select count(distinct name) from stu group by classId

表示按classId分完组后,各自除去相同名字后累加的行数。

 

 

聚集函数:

count  --计数

sum  -- 求和

max  -- 最大值

min -- 最小值

avg -- 平均值

group - concat 

 

 

 truncate 表名;//清空表的内容

mysql中 group by的执行机制是先对分组的字段进行排序的,默认升序的

select * from mysql_day1 GROUP BY clid DESC; //改成降序的

 

having :有时候限定分组条件比对元组限定条件更有用

例:select classId from mysql_day1 group by clid having count(1)>2

实现查询班级人数大于2的班级号

 

order by: 对结果集进行排序;

例如: order by clid,id;

先对clid排序,再对id排序(后一个在前一个相同的情况下才排序)

 

case when ..then..用法:

 

case when 与聚集函数:

 

 

若想查找成

 

利用分组group by后,重新写出三列,利用case when 实现

select name,
max(case when stage = '基础' THEN score ELSE NULL END)as '基础',
max(case when stage = 'sql' THEN score ELSE NULL END)as 'sql',
max(case when stage = 'web' THEN score ELSE NULL END)as 'web'
from scores group by name

注意: 使用聚合函数max的目的是找出分组后的各个字段对应的值

 

posted @ 2019-09-12 09:54  满满酱紫呦  阅读(111)  评论(0编辑  收藏  举报