oracle子查询

来源:互联网 发布:暖男的同义网络词 编辑:程序博客网 时间:2024/05/22 20:58

子查询:

■ 什么是子查询

子查询是指嵌入在其它sql语句中的select语句,也叫嵌套查询

■ 单行子查询

单行子查询是指只返回一行数据的子查询语句

select * from emp where deptno=(select deptno from dept where deptno=30);

请思考:如何显示与SMITH同一部门的所有员工?

■ 多行子查询

多行子查询指返回多行数据的子查询

select * from emp where deptno in (10,20,30,40);

->select * from emp where deptno in ( select deptno from emp );

select * from emp where deptno in(30);

->select * from emp where deptno in( select deptno from dept where deptno=30)

->select * from emp where deptno in( select deptno from dept where dname='SALES')

#多列子查询:返回多个字段的多行数据

select * from emp where (deptno,ename) in (select deptno,ename from emp where sal>800);

多表查询:

#多表查询是指基于两个和两个以上的表或是视图的查询.在实际应用中,查询单个表可能不能满足你的需求

1、如显示sales部门位置和其员工的姓名),这种情况下需要使用到(dept表和emp表)

思路:找到sales部门的编号deptno,根据编号找到对应的员工,工作地址

select e.ename ,d.loc from emp e,dept d where (e.deptno,d.deptno) in (select dd.deptno,dd.deptno from dept dd where dd.dname='SALES');

长的,笨的

select e.ename,d.loc from emp e,dept d where e.deptno =(select deptno from dept where dname='SALES') and d.deptno =(select deptno from dept            where dname='SALES');


0 0