Oracle自连接、三表联合查询、单行子查询、多行子查询

第三节课:自连接及三表联合查询
					
					查询员工姓名,职位,薪资,上级领导姓名
					  select e.ename,e.job,e.sal,m.ename from emp e,emp m where e.mgr=m.empno--sql92
					sql99实现:
						select e.ename,e.job,e.sal,m.ename
						from emp e
						inner join emp m
						on e.mgr=m.empno
					-----------------------------------------------------------------------
					sql99三表联合查询
					查询员工姓名,工作,薪资,部门名称,城市名称
					sql92实现:
						select e.ename,e.job,e.sal,d.dname,c.cname 
						from emp e,dept d,city c 
						where e.deptno=d.deptno and d.loc=c.cid
					sql99实现:
						select e.ename,e.job,e.sal,d.dname,c.cname
						from emp e
						inner join dept d
						on e.deptno=d.deptno
						inner join city c
						on d.loc=c.cid

					查询工资高于2000的员工姓名,工作,薪资,部门名称,城市名称
					sql92实现:
						select e.ename,e.job,e.sal,d.dname,c.cname 
						from emp e,dept d,city c 
						where e.deptno=d.deptno and d.loc=c.cid and sal>2000

					sql99实现:
						select e.ename,e.job,e.sal,d.dname,c.cname --查询内容
						from emp e                                 --查询表
						inner join dept d                          --链接表
						on e.deptno=d.deptno                       --链接条件
						inner join city c                          --链接表
						on d.loc=c.cid                             --链接条件
						where e.sal>2000                           --筛选条件
			第四节课:单行子查询
				
				子查询(单行子查询、多行子查询)
					单行子查询
							select 内容 from 表名 where 子查询语句
						1、什么时候使用单行子查询?
							--在不能直接获取有效信息的时候,考虑使用子查询
						2、单行子查询的注意事项?
							---子查询的结果必须只有一个值
							---可以直接使用算术链接符
							---子查询出现在where中,一般出现在条件语句的右边
				问题:查询所有比雇员“CLARK”工资高的员工信息
				解读1:查询雇员CLARK的工资
				select sal from emp where ename='CLARK'
				解读2:查询工资大于2450的员工信息
				select * from emp where sal>'2450'
				使用子查询
				select * from emp where sal>(select sal from emp where ename='CLARK')
				select * from emp where (select sal from emp where ename='CLARK')<sal
				查询工资高于平均工资的员工的名字和工资
				select * from emp where sal>(select avg(sal) from emp) order by sal
				查询和soctt属于同一部门且工资比他低的员工资料
				select * from emp where deptno=(select deptno from emp where ename='SCOTT') and sal<(select sal from emp where ename='SCOTT')
				查询工资最高的员工资料
				select * from emp where sal=(select max(sal) from emp)
				查询职务和scott相同,雇佣时间早的员工信息
				select * from emp where job=(select job from emp where ename='SCOTT') and hiredate<(select hiredate from emp where ename='SCOTT')
				查询工资比scott高或者雇佣时间早的员工编号和名字
				select empno,ename from emp where sal>(select sal from emp where ename='SCOTT') or hiredate<(select hiredate from emp where ename='SCOTT')

				查询工资高于任意一个CLERK的所有员工信息
				select * from emp where sal>(select min(sal) from emp where job='CLERK') and job<>'CLERK'
				----------------------------------------------------------------------------------------------
			第五节课:	多行子查询
				
				多行子查询学习:其实就使用使用关键字:any all in
				注意:子查询返回多个值建议使用多行子查询,返回的单个值使用单行子查询
				select * from emp where sal> any (select sal from emp where job='CLERK') and job<>'CLERK'
				查询工资高于所有SALESMAN的员工信息
				select * from emp where sal>(select max(sal) from emp where job='SALESMAN')--单行子查询的写法
				select * from emp where sal>all (select sal from emp where job='SALESMAN';
				查询部门20中同部门10的雇员工作一样的雇员信息
				select * from emp where deptno='20' and (job='MANAGER' or job='PRESIDENT' or job='CLERK')
				select * from emp where deptno='20' and job in ('MANAGER', 'PRESIDENT' , 'CLERK')
				select * from emp where deptno='20' and job in (select job from emp where deptno='10')
				select * from emp where deptno='20' and job= any (select job from emp where deptno='10')
				select job from emp where deptno='10'

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值