一、高级操作
order by:排序
- select * from play_list order by createtime;
- select * from play_list order by bookedcount desc,createtime asc;
order by 语句用于根据指定的列对结果集进行排序
order by 语句默认按照升序对记录排序,使用desc则降序排序
order by 也可以多个字段排序,而desc只作用于一个字段;
distinct :去重
- select distinct userid from play_list;
- select distinct userid,play_name from play_list;
(userid,play_named都相同时去重)
distinct 用于去重,可以返回多列的唯一组合;
distinct 在后台做排序,所以很消耗CUP的;
group by having :分组、过滤
场景:统计云音乐创建歌单的用户列表和每人创建歌单的数量
mysql> select userid,count(*) AS play_num from play_list group by userid having count(*)>=2;
分组关键字userid,需要在查询中出现,且一般查询分组关键字后要加聚合函数;
like :模糊查询
select * from play_list where play_name like '%男孩%';
limit offset:分页查询
场景4:查询一个月内创建的歌单(从第6行开始显示10条记录)
select * from play_list where (createtime between 1427701323 and 1430383307) limit 10 offset 6
注意:offset 后面的值不要太大,假设offset1000,那它会扫描前1000条记录,这样IO开销会很大
case when:判断(case when...then...else...end)
case when 实现类似编程语言的 if else 功能,可以对SQL的输出结果进行选择判断;
场景5:对于未录入的歌单(trackcount = null),输出结果时歌曲数返回0
mysql> select play_name,case when trackcount is null then 0 else trackcount end from play_list;
join:表连接
用一个SQL 语句把多个表中相互关联的数据查询出来;
场景6:查询收藏“老男孩”歌单的用户列表
mysql> SELECT play_fav.userid FROM play_fav INNER JOIN play_list ON play_fav.play_id = play_list.id where play_list.play_name = '老男孩';
另一种写法:
mysql> select f.userid from play_list lst,play_fav f where lst.id = f.play_id and lst.play_name = '老男孩'
union:联合查询
作用:把不同表中相同的字段聚合在一个结果集中返回给用户
场景8:老板想看创建和收藏歌单的所有用户,查询play_list和play_fav两表中所有的userid;
mysql> select userid from play_list union select userid from play_fav;
默认的union 会对结果集进行去重处理,不想去重使用 union all;
二、常用函数
更多mysql函数学习可参考:
https://dev.mysql.com/doc/refman/5.6/en/func-op-summary-ref.html
https://www.cnblogs.com/xuyulin/p/5468102.html
https://www.cnblogs.com/noway-neway/p/5211401.html
1、聚合函数
场景:显示每张专辑的歌曲列表。例如:
mysql> select album,group_concat(song_name) from song_list group by album;
+------------------+-------------------------------------------------+
| album | group_concat(song_name) |
+------------------+-------------------------------------------------+
| 1701 | 大象,定西 |
| Straight Shooter | Good Lovin' Gone Bad,Weep No More,Shooting Star |
| 作品李宗盛 | 风柜来的人 |
| 红雪莲 | 红雪莲 |
+------------------+-------------------------------------------------+
group_concat 连接的最长字符是1024,可以通过参数调整;
2、字符串函数
3、日期函数
4、数值函数