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语句中,使用了子查询,查询出部门的平均工资,从而实现了员工工资与部门平均工资的比較。

Oracle 学习笔记 14 -- 集合操作和高级子查询的更多相关文章

  1. 【Oracle学习笔记-5--】集合操作之union,intersect和minus操作

    --union并操作 select e.employee_id,e.last_name from hr.employees e where e.last_name like 'C%' union se ...

  2. Python学习笔记-Day3-set集合操作

    set集合,是一个无序且不重复的元素集合.定义方式类似字典使用{}创建 目前我们学过的数据类型: 1.字符串(str),2.整型(int),3.浮点型(float),4,列表(list) 5.元组(t ...

  3. 【Oracle】曾经的Oracle学习笔记(4-7)多表联合查询,子查询,动态条件查询

    一.多表联合查询 二.子查询 三.动态条件查询 LESSON 4 Displaying Data from Multiple Tables------------------------------- ...

  4. Java 学习笔记(14)—— 文件操作

    java文件操作主要封装在Java.io.File中,而文件读写一般采用的是流的方式,Java流封装在 java.io 包中.Java中流可以理解为一个有序的字符序列,从一端导向到另一端.建立了一个流 ...

  5. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  6. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  7. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  8. 并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理

    1. 概述 1.1 什么是线程池 与jdbc连接池类似,在创建线程池或销毁线程时,会消耗大量的系统资源,因此在java中提出了线程池的概念,预先创建好固定数量的线程,当有任务需要线程去执行时,不用再去 ...

  9. 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计

    [转] C#学习笔记14——Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计   .NET Framework 命名空 ...

随机推荐

  1. 命令模式之2 Invoker Vs. Client

    当程序中直接编写下达命令的语句如new Cmd1().execute()时.一般会将调用者与客户类合二为一. 在GUI程序中.下达命令的语句通常包括在底层框架中.或者说底层框架包括了调用者.这时程序猿 ...

  2. Access restriction: The method createJPEGEncoder(OutputStream) from the type JPEGCodec is not access

    准备使用Java进行图片压缩的时候,使用 import com.sun.image.codec.jpeg.*; 结果出现错误: Access restriction: The method creat ...

  3. Android编程获取手机型号,本机电话号码,sdk版本号及firmware版本号号(即系统版本号号)

    Android开发平台中,可通过TelephonyManager 获取本机号码. TelephonyManager phoneMgr=(TelephonyManager)this.getSystemS ...

  4. webRequest

    chrome.webRequest 描述: 使用 chrome.webRequest API 监控与分析流量,还可以实时地拦截.阻止或修改请求.  可用版本: 从 Chrome 17 开始支持.  权 ...

  5. hdoj--1162--Eddy's picture(最小生成树)

    Eddy's picture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  6. springmvc生成注册验证码

    通过SPRing MVC为系统添加验证码 1:布局登陆页面,用户名,密码,填写验证码的文本框,及验证码的图片及点击换图 <%@ taglib prefix="c" uri=& ...

  7. caffe遇到的错误记录

    Caffe——一个多么方便的深度学习工具,为啥安装和使用起来的bug这么多呢!把痛苦的记忆记录下来,把希望留给后人. Caffe的万丈高楼(Net)是按照我们的设计图纸(prototxt),用Blob ...

  8. 基于Socket的Winform例子

    一.直接上效果图 二.Socket握手 三.服务端 Thread threadWatch = null;// 负责监听客户端的线程 Socket socketWatch = null;// 负责监听客 ...

  9. Vue 菜单栏点击实现高亮显示

    步骤: 遍历对象(goods)获取菜单栏每一项的对象(item)和下标(index) 添加点击事件toggle(),传入下标参数:@click="fn1();fn2()" 动态切换 ...

  10. node——简单的服务器启动+乱码问题解决,响应报文头

    这个是一个比较简单的代码 // 1.加载hrrp模块 var http=require('http'); // 2.创建一个http服务对象 var server=http.createServer( ...