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    5000.00               10

 7900 JAMES      CLERK      7698 1981/12/3     2000.00               30

 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20

 

6 rows selected

EXISTS操作符

    EXISTS操作符检查在子查询中是否存在满足条件的行,若存在。不在子查询中继续寻找。返回true,如不存
在。返回false 。继续子查询中寻找。NOT EXISTS操作符检查在子查询中是否不存在满足条件的行

with子句

使用 WITH子句, 能够避免在 SELECT语句中反复书写同样的语句块
WITH子句将该子句中的语句块运行一次并存储到用户的暂时表空间中
使用 WITH子句能够提高查询效率

嵌套子查询

例:查询比本部门工资高的员工信息

select deptno  ,  ename,sal , avgsal

from  emp e ,(select avg(sal) avgsal from emp  group by  deptno )

where  sal > avgsal

DEPTNO ENAME            SAL     AVGSAL

------ ---------- --------- ----------

    30 JAMES        2000.00 1741.66666

    10 CLARK        2450.00 1741.66666

    30 BLAKE        2850.00 1741.66666

    20 JONES        2975.00 1741.66666

    20 SCOTT        3000.00 1741.66666

    20 FORD         3000.00 1741.66666

    10 KING         5000.00 1741.66666

    10 CLARK        2450.00       2175

    30 BLAKE        2850.00       2175

    20 JONES        2975.00       2175

    20 SCOTT        3000.00       2175

    20 FORD         3000.00       2175

    10 KING         5000.00       2175

    20 JONES        2975.00 2916.66666

    20 SCOTT        3000.00 2916.66666

    20 FORD         3000.00 2916.66666

    10 KING         5000.00 2916.66666

 

17 rows selected

在from语句中,使用了子查询,查询出部门的平均工资,从而实现了员工工资与部门平均工资的比較。

最新文章

  1. Cron表达式简单学习
  2. DispatcherServlet默认配置
  3. [转帖]MATLAB曲线绘制及颜色类型
  4. SAX解析
  5. html天气预报小插件
  6. hyper中安装wdOS-1.0-x86_64(wdlinux)遇到的网卡问题
  7. BZOJ 1974: [Sdoi2010]auction 代码拍卖会( dp )
  8. c++,派生类对象可以对基类赋值,基类对派生类不可以赋值
  9. PHP高级编程SPL
  10. error U1087: cannot have : and :: dependents for same target
  11. FineUI Grid 缓存列显示隐藏状态
  12. JavaScript中如何检测一个变量是一个String类型?
  13. 工作中拓展的加密解密传输方式. DES对称加密传输.
  14. Function、Object、Prototype 之间的关系解析
  15. js FormData方法介绍
  16. python - 发送带各种类型附件的邮件
  17. mysql列的处理
  18. P1007 独木桥
  19. 学JS的心路历程 -数组常见处理方法
  20. Primitive Data Types

热门文章

  1. Android error--No implementation found for native Lcomd
  2. android TextView加边框
  3. Hibernate Tools-代码生成
  4. C# 用ManulResetEvent 控制Thread的 Suspend、Resume
  5. Nginx系列(三)--管理进程、多工作进程设计
  6. input 框输入数字相关
  7. C++利用函数模板得到数组的长度
  8. 如何在ZBrush 4R7中设置背面遮罩
  9. STL中的迭代器的使用
  10. MySQL---Day2