去重、合并结果集、通用分页

count(*)和count(字段的区别)

/*
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:表示长度(即:从下标345)
​
-- 案例3:取出工资排名在[5-9]名的员工
select ename,sal from emp order by sal desc limit 4,55名的下标位置是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; //5int pageSize = 10; //每页显示10int startIndex = (pageNo - 1) * pageSize;
    String sql = "select ... limit" + startIndex + "," + pageSize;
​
    }
*/
​
posted @   无敌大牛牛  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示