mysql-提升篇

一、高级操作

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、数值函数

猜你喜欢

转载自blog.csdn.net/qq_15901351/article/details/81147956
今日推荐