日期:2014-05-16  浏览次数:20521 次

Oracle 学习笔记 14 -- 集合操作和高级子查询

Oracel提供了三种类型的集合操作:分别是并(UNION) 、交(INTERSECT)、 差(MINUS)

UNION :将多个操作的结果合并到一个查询结果中,返回查询结果的并集,自动去掉重复的部分。

UNION ALL:将多个操作的结果合并到一个查询结果中,但是保留重复的内容。

INTERSECT: 返回多个操作结果中相同的部分。

MINUS:返回两个查询结果的差集,去掉重复的部分。

基本语法格式为:

SELECT * FROM  table_name 1

[union , union all , intersect , minus]

SELECT * FROM  table_name2

注意:只能有一个Order by 语句 ,并且该语句要放在末尾。语句表达式要使用第一个select的列名,别名或者是位

置编号号。在select 列表中的列名和表达式在数量和数据类型上也要对应。

 

高级子查询

子查询:前面已经说过,即:SQL语句内部嵌套另一个select语句。内部查询要先于外边查询进行,内部查询返回的

结果要给外部查询使用。

多列子查询

在笔记7中的子查询,都是基于单列的查询,现在学习的是多列的子查询。主查询要与子查询返回的多个列进行比

较,不在是一个列。

基本语法:

SELECT * FROM table_name

where (column1 , column2) = | in (

   SELECT  column1 , column2 from table_name2  where ...

)

返回的结果不在是单列,而是多列。外层查询中where语句后面的多个列名要用括号括起来。

相关子查询

子查询中使用主查询的列。主查询的每一行的数据都执行一次子查询。

例,求emp表中工资大于平均工资的员工信息

select * from emp e
where sal > (
      select avg(sal) from emp
      where deptno  = e.deptno    
)

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17&nbs