去重、合并结果集、通用分页
/*
count(具体字段):表示统计该字段下所有不为null的元素总数
count(*):统计表当中的总数行数
因为每一行记录不可能所有的列都为NULL,一行数据中有至少有一列数据不为null,则这行数据就是有效的
*/
distinct
distinct 只能出现所有字段的前面
select distinct job from test;
select ename,distinct jodb from emp; -- 错误写法,因为distinct只能出现在所有字段的最前方
-- distinct 出现在两个字段之前,表示两个字段联合起来去重(即作为一个整体)
select distinct job,depto from emp;
# 案例--统计工作岗位的数量
select count(distinct(job)) from emp;
子查询
/*
什么是子查询?
select 语句中嵌套select的语句,被嵌套的select语句称为子查询
子查询都可以出现在哪里
select
..(select).
from
..(select).
where
..(select).
注意:对于select 后面的子查询只能返回1条结果,多于1条就报错了
*/
-- 案例
/*
查询大于最低工资的
思路:
1.先查询出最低工资是多少
select min(sal) from emp;
*/
select * from emp where sal > (select min(sal) from emp);
union并集
完成两个结果集的拼接
union的效率要比表连接的效率要高一些,对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积
/*
注意事项:
1.union在进行结果集合并的时候,要求两个结果集的列数必须相同,且列和列的数据类型也要相同(mysql中可以不相同,oracle中则必须相同),但列名则不一定需要相同;oracle会将第一个结果的列名作为结果集的列名
2.我们没有必要在每一个select结果集中使用order by子句来进行排序,我们可以在最后使用一条order by来对整个结果进行排序
3.union 和 union all的区别
都是取结果的交集
unionUNION 会对结果去重且排序,union 执行的排序是全量排序,即对select 语句所包含的所有字段进行排序
union all:直接返回合并的结果,不去重也不排序
union all速度会快很多
*/
/*
案例:查询工作岗位是MANAGER和SALESMAN的员工?
select ename,job from emp where job in ('MANAGER','SALESMAN')
*/
select ename,job from emp where job = MANAGER
union
select ename,job from emp where job = SALESMAN
交集、差集
/*
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
*/
limit
limit是将查询结果集的一部分取出来,通常使用在分页查询当中
/*
完整用法: limit startIndex,length
startIndex 是起始下标且是从0开始,length是长度
缺省用法:limit 5;这是取前5
-- 案例1:按照薪资降序,取出排名在前5名的员工?
select * from emp order by sal desc limit 5
等价于
select * from emp order by sal desc limit 0,5
-- 案例2:取出工资排名在[3-5]名的员工?
select * from emp order by sal desc limit 2,3
2:表示起始位置从下标2开始,也就是第三条记录
3:表示长度(即:从下标3,4,5)
-- 案例3:取出工资排名在[5-9]名的员工
select ename,sal from emp order by sal desc limit 4,5
第5名的下标位置是4
5-9名一共5条记录,所以是4,5
*/
通用分页
通用公式:
limit (pageNo-1) * pageSize , pageSize
/*
每页显示3条记录:
第1页:limit 0,3 [0,1,2]
第2页:limit 3,3 [3,4,5]
第3页:limit 6,3 [6,7,8]
第4页:limit 9,3 [9,10,11]
每条显示pageSize条记录
第pageNo页:limit (pageNo-1) * pageSize , pageSize
public static void main(String[] args){
// 用户提交过来一个页码,以及煤业显示的记录条数
int pageNo = 5; //第5页
int pageSize = 10; //每页显示10条
int startIndex = (pageNo - 1) * pageSize;
String sql = "select ... limit" + startIndex + "," + pageSize;
}
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下