SQL基础总结-02
1、having
select … from … where … group by … having … order by … limit …;
过滤(条件) 分组 过滤(条件) 排序 限定个数
-- 上述语句执行顺序,先 from -> where -> group by -> select -> having -> order by -> limit
id | Name | clid |
---|---|---|
1 | A | 1 |
2 | B | 1 |
3 | C | 2 |
4 | D | 2 |
5 | E | 1 |
having:过滤作用, group by之后的过滤
select * from stu where 1=1 group by clid; -- where 1=1,因为1=1为真,且这只是个表达式,更没写一样,正常执行
结果显示:
id | Name | clid |
---|---|---|
1 | A | 1 |
3 | C | 2 |
如果还想对这张表进行过滤,就用having;
以第一张表为例:要查询每个班中人数大于2个的班级号是什么?
先看下面这句话:
select count(1),Name,clid as n from stu group by clid;
结果:
n | Name | clid |
---|---|---|
3 | A | 1 |
2 | C | 2 |
select count(1),Name,clid as n from stu group by clid having n>2; -- 因为having的执行在select之后,所以这句话相当于是从上面的表筛选n>2的;
结果:
n | Name | clid |
---|---|---|
3 | A | 1 |
这样就能解答提出的问题了:
-- 一般题目里包含每个班级,就要用到group by; as:取别名;人数及每条语句出现的次数可用count(1)计算
select count(1),clid as n from stu group by clid having n>2;
结果:
n | clid |
---|---|
3 | 1 |
班级号为1
这条语句还能优化:
select clid as n from stu where count(1)>2 group by clid; -- 注意where count(1)>2 不符合本题题意,因为我们要判断哪个班级的人数多少,所以先要区分出哪些班级,where比group by先执行,还没分组就用count(1),等价于给整张表计算有多少条记录,结果就是5,5>2恒成立,where还不如不写。
完美答案:
select clid from stu group by clid having count(1)>2; -- having执行顺序在group by后面;最终结果表示:班级号为1的人数大于2
clid |
---|
1 |
2、order by
去看上一个笔记有详解
3、limlit
1. limit 用来获取一张表中的某些数据
2. limit 只有 在Mysql 数据库中存在 不通用 , 如其他类型的数据库要使用此功能请自行百度
3. limit 出现在sql语句的最后一个
3.案例:找出前五条记录
// 两条查询语句结果一样,开始标0 可以省略
mysql> select ename from emp limit 0,5;
mysql> select ename from emp limit 5;
+--------+
| ename |
+--------+
| SIMITH |
| ALLEN |
| WARD |
| JONES |
| MARTIN |
+--------+
5 rows in set (0.00 sec)
4.案例:按照工资降序排列,只取前五个
mysql> select ename, sal from emp order by sal desc limit 5;
+-------+------+
| ename | sal |
+-------+------+
| KING | 5000 |
| FORD | 3000 |
| SCOTT | 3000 |
| JONES | 2975 |
| BLAKE | 2850 |
+-------+------+
5. 工资按照降序 查询出3到9的工资 索引是0开始的
mysql> select ename, sal from emp order by sal desc limit 2,7;
+--------+------+
| ename | sal |
+--------+------+
| SCOTT | 3000 |
| JONES | 2975 |
| BLAKE | 2850 |
| CLARK | 2450 |
| ALLEN | 1600 |
| TURNER | 1500 |
| MILLER | 1300 |
+--------+------+
7 rows in set (0.00 sec)
黑客信仰——世界上没有一个绝对安全的系统,只要这个系统是人设计的,就会有漏洞,因为人性具有弱点。