MYSQL基础
基础语句
distinct:返回唯一不同的值
having:筛选 group by 后的数据(例 having avg(score) > 60)(转化顺序为 where group having)
if:if 语句(例 if('sex'=1,'男','其他') )(不建议使用)
case when:类似 if / else 语句 (例1 case sex when '1' then '男' when '2' then '女' else '其他' end)(例2 case when sex='1' then '男' else '女' end)
concat:将多个字符串连接成一个字符串,返回一个字符串。可以另外加入固定字符(例 concat(str1, str2) )
concat_ws:与上大致相同,另第一个参数指定分隔符(例 concat_ws(separator, str1, str2) )
group_concat:
功能实现
行转列:
列转行:
排序:order by 后 set @rank= 0; 再 @rank:=@rank+1
查询学生的总成绩,并进行排名,总分重复时保留名次空缺 set @rank= 0; select sc_1.sid, sc_1.sum_score, (@rank:=@rank+1) as rank from ( select sid, sum(score) as sum_score from sc group by sid order by sum_score desc ) as sc_1;
分组排序:left join 后 group by
按各科成绩进行排序,并显示排名,Score 重复时合并名次 select sc_1.*, count(*) as rank from sc as sc_1 left join sc as sc_2 on sc_1.score < sc_2.score and sc_1.cid = sc_2.cid group by sc_1.sid, sc_1.cid, sc_1.score order by sc_1.cid, sc_1.score desc;
排序主流是 order by 后 set @rank= 0。
分组排序
1,order by 后 set @rank= 0
2,left join 后 group by
在限定前或者后几名的情况下,可以在 where 里比较大小与的个数来判断
查询各科成绩前三名的记录 select * from sc where (select count(*) from sc as sc_1 where sc_1.cid=sc.cid and sc_1.score<sc.score) >= 3 order by sc.cid, sc.score desc;
语句优化
where in 和 join:当 in 内大于1000时选择 join
相关/转载:
一
1,SQL 教程
二

浙公网安备 33010602011771号