SQL(子查询连接查询)示例

--1.列出至少有一个雇员的所有部门
select dname from dept where deptno in (select deptno from emp);
--2.列出薪金比"SMITH"多的所有雇员
select ename from emp where sal>(select sal from emp where ename='SMITH');
--3.列出所有雇员的姓名及其直接上级的姓名
select ename,(select e1.ename from emp e1 where e2.mgr=e1.empno) mgr from emp e2;
--4.列出入职日期早于其直接上级的所有雇员
select ename from emp e2 where e2.hiredate<(select e1.hiredate from emp e1 where e2.mgr=e1.empno);
--5.列出所有部门的名称和这些部门的雇员编号及姓名(没有雇员的部门包含在内)
select dname,empno,ename from emp join dept on emp.deptno=dept.deptno;
--6.列出所有JOB为“CLERK”(办事员)的员工姓名及其部门名称
select ename,dname from emp join dept on emp.deptno=dept.deptno;
--7.列出各种工作类别的最低薪金,显示最低薪金大于1500的记录
select job,min(sal) from emp group by job having min(sal)>1500;
--8.列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号
select ename,deptno from emp where mgr=7698 or empno=7698;
--9.列出薪金高于公司全体员工薪金平均水平的所有雇员姓名
select ename from emp where sal>(select avg(sal) from emp);
--10.列出与“SCOTT”从事相同工作的所有雇员编号和姓名
select empno,ename from emp where job = (select job from emp where ename='SCOTT') and ename!='SCOTT';
--11.列出薪金等于30部门中任何一个雇员薪金的员工姓名和薪金
select ename,sal from emp where sal in (select sal from emp where deptno=30);
--12.列出薪金高于30部门中所有雇员薪金的员工姓名和薪金
select ename,sal from emp where sal > all(select sal from emp where deptno=30);
--13.列出所有部门的部门名称、地点以及该部门中雇员的数量
select dname,loc,count(empno) from emp join dept on emp.deptno=dept.deptno group by dname,loc;
--14.列出各种类别工作的最低工资
select job,min(sal) from emp group by job;
--15.列出各个部门的MANAGER(经理)的最低薪金
select job,min(sal) from emp group by job having job='MANAGER';
进阶:
--1.编写一查询,显示与Blake在同一部门工作的雇员的姓名和受雇日期,但是Blake不包含在结果内。
select ename,hiredate from emp where job = (select job from emp where ename='BLAKE') and ename!='BLAKE';
--2.创建一查询,显示工资大于平均工资水平的雇员的编号及姓名,输出结果按工资降序排列。
select empno,ename,sal from emp where sal>(select avg(sal) from emp) order by sal desc;
--3.显示位置在Dallas的部门内的雇员的姓名、编号及工作。
select ename,empno,job from emp join dept on emp.deptno=dept.deptno where loc='DALLAS';
--4.显示被King直接管理的雇员的姓名及其工资。
select ename,sal from emp where mgr=(select empno from emp where ename='KING');
--5.显示比其上级管理员更早进入公司的雇员的姓名(Employee)、受雇日期(Emp Hiredate)
--以及其上级管理员的姓名(Manager)及受雇日期(Mgr Hiredate)。
select e2.ename,e2.hiredate,
(select e1.hiredate from emp e1 where e2.mgr=e1.empno) as manger_hiredate,
(select e1.ename from emp e1 where e2.mgr=e1.empno) as manager_name from emp e2
where e2.hiredate<(select e1.hiredate from emp e1 where e2.mgr=e1.empno);

posted @   白snow  阅读(344)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示