MySQL入门(5)- 子查询&union&limit&case...when...then...when...then...end

这篇博客介绍了MySQL中的子查询、UNION操作、LIMIT分页以及CASE...WHEN...THEN...END条件判断的用法。通过实例详细解释了如何在WHERE、FROM和SELECT子句中使用子查询,如何合并查询结果,如何限制查询返回的行数,以及如何根据条件计算新的字段值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子查询&union&limit&case...when...then...when...then...end

此系列记录PN视频学习笔记


* 本博客涉及到的数据为bjpowernode.sql,数据见文末,SQL文见MySQL入门(9)文末。

* 该数据有三张表,分别是部门表dept(deptno部门编号、dname部门名称、loc位置)、

                                       员工表emp(empno工号、ename员工姓名、job职位、mgr直属领导工号、

                                                            hiredate入职日期、sal月薪、comm补贴、deptno部门编号)、

                                        薪水等级表salgrade(grade等级、losal区间下限、hisal区间上限)

一、子查询

子查询就是嵌套select语句

    1、什么是子查询?

           -select语句嵌套select语句

 

    2、子查询可以出现在哪儿?

           select...(select).

           from...(select).

           where...(select).

 

    3、where后使用select子查询

案例:找出薪水比公司平均薪水高的员工,要求显示员工名和薪水

    selectename,sal from emp e where sal > avg(sal);

    以上语句执行报错,分组函数不能直接使用在where后

    select avg(sal)from emp;【得到值AVG】

    select ename,sal fromemp e where sal > AVG;

    上面语句可用如下显示

    select ename,sal

select e.类型,b.数量,e.不良率 from (select a.年月,'报废不良' as 类型,b.数量,round((cast(b.数量 as float)/cast(c.实绩 as float)),4) as 不良率 from( SELECT [Year], [Month], 年月, 生产线 FROM 现场DB.dbo.V_CurrentYearMonths where 生产线='缸体') a left join (SELECT left(cast(日期 as date),7) as 年月,sum(cast(数量 as int)) as 数量 FROM [dbo].[TB_ SCRAPPED] where [生产线] in ('缸体','缸盖') and[机型] in ('TNGA1.5','TNGA2.0','TNGA2.5') and 报废原因 in ('加工不良','其他不良-试验件','其它不良-品质解析','材料不良-缸盖毛坯(铸造加工不良)','其他不良-刀具试验','材料不良-IN/EX门座','其它不良-设备调试') and (生产线)='缸体' and(报废原因)='加工不良' group by left(cast(日期 as date),7) ) b on a.年月=b.年月 left join (SELECT REPLACE(日期 ,'/','-') as 日期, 产线, 线别, 实绩 FROM 现场DB.dbo.V_加工线每月生产台数 where 线别='缸体') c on b.年月=c.日期 order by a.年月) e union all select f.类型,f.数量,f.不良率 from(select a.年月,'返工不良' as 类型, --case --when b.线别='1#' then '1#' --when b.线别='2#' then '2#' --when b.线别 is null then '1#' --else ''end as 线别, b.数量,round((cast(b.数量 as float)/cast(c.实绩 as float)),4) as 不良率 from( SELECT [Year], [Month], 年月, 生产线 FROM 现场DB.dbo.V_CurrentYearMonths where 生产线='缸体') a left join (SELECT --id, left(convert (date,日期,120),7) as 日期 ,生产线,sum(cast(数量 as int)) as 数量 --case --when 线别='1#' then '1' --when 线别='2#' then '2' --else ''end as 线别, --生产线, 工序, 工件号, 模号, 不良区分, 返修项目, 返修方法, 品质判断, 班次, bisid, rep_top_id, def_top_org, create_time, 科室, 备注, 特别信息 FROM GLKANBAN.dbo.dwd_加工返修记录表 where 科室='第3制造科' and 生产线='缸体' and 数量>0 and 线别 is not null group by left(convert (date,日期,120),7) ,生产线) b on a.年月=b.日期 left join (SELECT REPLACE(日期 ,'/','-') as 日期, 产线, 线别, 实绩 FROM 现场DB.dbo.V_加工线每月生产台数 where 线别='缸体') c on b.日期=c.日期 order by a.年月) f
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值