SQL学习五-having,order by, limit

SQL学习五-having,order by, limit

今天将SQL使用的工具提升了,从workbench提升到了navicate.

数据准备

今天使用的数据是前面几节中使用到的数据

IDNAMECLASSID
1xiaoming1
2xiaowang1
3xiaotian2
4xiaoming2
5xiaowang3
6xiaotian4
7xiaogang1
8xiaoqiang1
9xiaojing2
10xiaotie2
11wangqiang3
12wangwei3
13liming4
14liqiang4

插入语句如下:

INSERT INTO Student
VALUES 
(1, 'xiaoming', 1),
 (2, 'xiaowang', 1),
 (3, 'xiaotian', 2),
 (4, 'xiaoming', 2),
 (5, 'xiaowang', 3),
 (6, 'xiaotian', 4),
(7, 'xiaogang', 1),
(8, 'xiaoqiang', 1),
(9, 'xiaojing', 2),
(10, 'xiaotie', 2),
(11, 'wangqiang', 3),
(12, 'wangwei', 3),
(13, 'liming', 4),
(14, 'liqiang', 4);

今天学习having,order by, limit就在这14条基础上学习。

简单复习一下各个语句的执行顺序

-- 各个语句写的顺序
SELECT ... 
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
LIMIT ...

-- 各个语句执行的顺序
FROM ...
WHERE ...
GROUP BY ...
SELECT ...
HAVING ...
ORDER BY ...
LIMIT ...

HAVING

HAVING的作用也是过滤,但是按照执行的顺序来看,HAVING的过滤是在GROUP BY/SELECT之后的过滤,

HAVING一般是用于什么样的过滤呢?GROUP BY 和SELECT之后的过滤,而WHERE则是在FROM之后的过滤,GROUP BY 和SELECT之后的内容无法过滤

看一个例子:

查询每个班级中人数大于3的班级号是多少?

首先在这个里面,需要写的内容有:FROM student ,因为有每个班级,故需要按照CLASSID进行分组,但是这个条件是在分组完成之后再进行判断的,故需要执行顺序在GROUP BY 后面的过滤语句,就是HAVING。

按照上面的分析写SQL:

SELECT  CLASSID FROM student
GROUP BY CLASSID 
HAVING COUNT(1) > 3;

根据上述使用的数据,其查询结果如下:
在这里插入图片描述

当前结果表明班级号为1和2的班级的人数是大于三的。

将当前的having语句和前面学习到的相关内容结合起来,搞一个新的语句,该语句查询了班级号大于3的班级,将相关信息拼接起来后的结果,该SQL的执行结果如下:

SELECT NAME, CLASSID, GROUP_CONCAT(ID, '@', NAME, '@', CLASSID)
FROM Student
GROUP BY CLASSID
HAVING CLASSID > 3;

在这里插入图片描述

ORDER BY

排序,ORDER BY的执行顺序是在HAVING之后的,该关键字的作用是将某列或者某些列按照某种顺序进行排序,默认是ASC,可以写DESC,

该字段可以使用的值是前面的SQL语句生成的字段都可以,例如下面的语句,除了可以用常规的字段排序之外,还可以使用生成的新列 n,进行排序

SELECT COUNT(1) AS n, CLASSID, NAME FROM student
GROUP BY CLASSID HAVING n >= 1;

在这里插入图片描述

对于上面的结果,再执行排序,即添加ORDER BY 字段,可得结果如下

SELECT COUNT(1) AS n, CLASSID, NAME FROM student
GROUP BY CLASSID HAVING n > =1
ORDER BY CLASSID DESC;

在这里插入图片描述

此外,ORDER BY 后面还可以写多个属性,表示,如果第一个属性的值相等,那么将按照下一个属性排序. 例如下面的SQL语句,从结果中可以看出,在CLASSID相同时,会按照ID属性排序

SELECT * FROM student
WHERE CLASSID IN (1, 2)
ORDER BY CLASSID, ID;

在这里插入图片描述

LIMIT

LIMIT是最后一个执行的SQL关键字,用于在前面的SQL执行后取部分结果,
比较简单的用法,LIMIT 5,是指取前5条记录

直接使用上面的SQL语句加上这句话,就是在刚才的结果下取前5条记录

SELECT * FROM student
WHERE CLASSID IN (1, 2)
ORDER BY CLASSID, ID
LIMIT 5;

在这里插入图片描述
还有另外一种用法,LIMIT A, B,是指从A开始取B条,例如在刚才的语句下取LIMIT 1, 4,是该刚才的记录下的第二条到第五条。

SELECT * FROM student
WHERE CLASSID IN (1, 2)
ORDER BY CLASSID, ID
LIMIT 1, 4;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值