Oracle笔记第七章

本文主要探讨Oracle数据库中子查询的应用,包括单行子查询的练习和课堂案例,详细讲解了rownum伪列的使用,以及如何进行有效的分页查询。同时,提供了第七章的课后作业,帮助深化对rownum行号概念的理解和实际操作技巧。
摘要由CSDN通过智能技术生成

第七章 子查询

--例子: 查询工资最低的员工姓名
select ename from emp where sal = (select min(sal) from emp)

-- 按员工姓名分组
select ename, min(sal) from emp group by ename   
-- select ename, sal from emp order by sal
      
-- 子查询也叫内部查询, 作用是把子查询执行的结果作为外部查询的条件
-- 在嵌套查询中, 子查询要先于外部查询执行

--1. 查询最低工资
select min(sal)from emp;

--2. 把查询出的最低工资作为外部查询的条件
select ename from emp where sal = 800

--3. 括号内的查询优先于外部的查询,查询的结果作为外部执行的条件
select ename from emp where sal = (select min(sal) from emp)

--子查询可以使用哪些子句?
-- where having from 

--查询工资比json工资高员工姓名及工资   
select ename, sal from emp where sal >
(select sal from emp where ename = 'JSONS')

单行子查询

子查询的查询结果为一行一列(一个值)
可以使用单行运算符(< , >, = , >= , <=)
1. 显示和雇员7369从事相同工作并且工资大于7876的雇员的姓名及工作
--  7369的岗位
select job from emp where empno = 7369
--  7369 的岗位
select sal from emp where empno = 7876

select ename, job, sal from emp 
where job = (select job from emp where empno = 7369) 
and sal>(select sal from emp where empno=7876)

2查询部门最低工资比20部门最低工资高的部门编号及最低工资
 查询20号部门的最低工资
select min(sal) from emp where deptno = 10

--查询每个部门的工资
select deptno, min(sal)
from emp 
group by deptno
having min(sal)<(select min(sal) from emp where deptno = 10)

3 查询哪个部门的员工人数高于各部门平均人数
- 查询各个部门的平均人数
select  avg(count(*)) from emp group by deptno
select deptno, count(*)
from emp
group by deptno
having count(*)  > (select  avg(count(*)) from emp group by deptno)
--思考:下面SLQ语句是否正确
--1.每个部门的最高工资员工姓名(单行子查询不能返回多个行)
select deptno 
     from emp 
     where sal = (select max(sal) from emp group by deptno)
     
--2.查询与TOM岗位相同的员工(子查询为空值,相当于条件为NULL)
select ename, job 
     from emp
     where job = (select job from emp where ename = 'TOM')

--3.多行子查询 子查询返回的结果有多行,在进行运算时要使用多行运算符
select ename, empno, sal 
      from emp 
      where sal in (select max(sal) from emp group by deptno)
select ename, empno, sal 
      from emp where sal in (2850,3000,5000)
   
--4.查询谁是经理。
--查询MGR字段中出现的员工编号
select distinct mgr  
       from emp;
select empno, ename
      from emp 
      where empno 
      in(select distinct mgr from emp)
      
--5.查询谁不是经理
--子查询返回空值
--如果列表中存在null, 那么使用not in 运算符不会得到任何结果
select empno, ename
       from emp 
       where empno
       not in(select distinct mgr from emp) --结果为NULL     
--改正
--在使用多行子查询是,如果用到了not in运算符,必须保证子查询的结果不能存在NULL值
select empno, ename
       from emp 
       where empno
       not in(select distinct mgr from emp where mgr is not null)
       
--any 的介绍 任意 有一个符合的条件就行(2,4,5 ,8)
-- >any 大于结果中的任意一个(其中某一个即可)比最小的大 3
-- <any 小于结果中的任意一个(其中的某一个即可)比最大的小 7
-- ==any 相当于 in 从(2,4,5, 8)中任取一个
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值