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

时间: 2024-10-10 05:24:56

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

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

--union并操作 select e.employee_id,e.last_name from hr.employees e where e.last_name like 'C%' union select e.employee_id,e.last_name from hr.employees e where e.last_name like 'S%'; --等价于 select e.employee_id,e.last_name from hr.employees e where e.las

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

set集合,是一个无序且不重复的元素集合.定义方式类似字典使用{}创建 目前我们学过的数据类型: 1.字符串(str),2.整型(int),3.浮点型(float),4,列表(list) 5.元组(tuple),6.字典(dict),7.集合(set),8.布尔型(bool) 1.集合创建 2.集合操作   2.1 set.add 添加元素 往set中添加一个元素只有set中不存在该元素时,才会加入该元素   2.2 set.clear 清空所有元素 从set中移除所有元素   2.3 set.

【Java学习笔记】<集合框架>Iterator的子接口ListIterator

1 import java.util.ArrayList; 2 import java.util.Iterator; 3 import java.util.List; 4 5 public class Test3 { 6 7 public static void main(String[] args) { 8 List list = new ArrayList(); 9 10 list.add("abc1"); 11 list.add("abc2"); 12 lis

SQL查询初学者指南读书笔记(五)集合操作与多表查询介绍

PART III:Thinking in Sets CHAPTER7 Thinking in Sets The three mostcommon set operations are as follows. Intersection Difference Union 在SQL中相应的关键词分别是 Intersection Except Union 实际数据库实现一般支持以下相应的数据库集合操作 INNER JOIN OUTER JOIN UNION JOIN 不过其区别是前者集合操作涉及表中所有

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

一.多表联合查询 二.子查询 三.动态条件查询 LESSON 4 Displaying Data from Multiple Tables-------------------------------------------------------- 查询s_emp表中最大的工资数,并且显示出这个最大工资数的员工名字 select last_name,max(salary)from s_emp; 多表查询 查询多张表的时候会产生笛卡尔积 为了防止笛卡尔积的产生,我们需要使用某些条件把两张表或多张

oracle学习笔记 存储及raid技术概述

oracle学习笔记 存储及raid技术概述 本课以oracle数据库所运行的环境,讲一下存储和raid技术. 一)oralce生产环境里的结构 先说一下oracle所在的环境. 有一种结构: 两个服务器.两个光纤存储交换机.两个存储, 它们通过网线相互连接在一起. 每个服务器接两个交换机, 每个交换机连两个服务器同时连两个存储, 每个存储和两个交换机有连接. 这是oracle数据库相对比较典型的正规的运行环境. 每个服务器上都装Linux和oracle数据库软件, oracle数据库建在存储上

【我的Oracle学习笔记(二)】----- select语句补充

一.多表查询 多表查询是指从多个有关联的表中查询数据,其语法与单表查询类似.一般来说,多表查询的表要用连接联系起来,如果没连接,则查询结果是这多个查询表的笛卡尔积(注释1). 模拟查询雇员姓名和所在部门名称: select [雇员姓名],[部门名称] from [雇员表] a,scott,[部门表] b where a.[部门编号]=b.[部门编号]; 上例中,为每一个查询表指定了别名,便于SQL语句的书写. 模拟查询在”sales“部门工作的雇员其雇员姓名 select [雇员姓名] from

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH

Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)

触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的表进行的insert .update.delete操作或对视图进行类似的操作. 触发器是很多关系数据库系统都提供的一项技术.在Oracle系统里,触发器类似过程和函数,都有声明,运行和异常 处理过程的PL/SQL块. 触发器的组成: 触发事件:在何种情况下触发:比如:INSERT , UPDATE