22.1、什么是子查询:

1、子查询就是在一条sql语句中嵌入select语句;

2、子查询可区分为关联子查询和非关联子查询,他们和主查询之间的执行顺序和关系是不同的;

22.2、关联子查询:

1、说明:

在关联子查询中,对于主查询返回的每一行数据,子查询都要执行一次。另外,关联子查询的信息流是双向的,

主查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回它的记录,之后主查询根据

返回的记录做出决策。

2、特点:

子查询引用主查询表的列,先执行主查询,再执行子查询,子查询和主查询都执行多遍。

3、示例:

update damsup.BHL_SUP_SEARCHREGISTER up

set up.sreg_date=(select down.sreg_date from dams.BHL_SUP_SEARCHREGISTER down where down.id=up.id)

where up.id<'7000';

22.3、非关联子查询:

1、说明:

非关联子查询是独立于主查询的子查询,先执行子查询,子查询的返回结果作为主查询的条件,再执行主

查询,子查询只执行一遍。

2、非关联子查询的注意事项:

(1)若子查询返回结果为多个值,oracle会去掉重复值之后再将结果返回给主查询

(2)若子查询的返回结果仅为一个值,可以用单值运算符如 =、 >、 <、 <> 等;

(3)若子查询的返回结果可能为多值,必须用多值运算符如 IN、not in、any、all等;

3、特点:

子查询不引用主查询表的列,先执行子查询,再执行主查询,子查询只执行一遍,主查询执行多遍。

4、示例:

(1)where型子查询:

1)查询id最大的一件商品:

SELECT goods_id,goods_name,shop_price FROM goods WHERE goods_id = (SELECT MAX(goods_id) FROM goods);

2)查询每个类别下id最大的商品:

SELECT goods_id,goods_name,cat_id,shop_price FROM goods WHERE goods_id IN (SELECT MAX(goods_id) FROM goods GROUP BY cat_id);

3)从类别表中取出其类别下有商品的类别(如果该类别下没有商品,则不取出):

SELECT c.cat_id,c.cat_name FROM category c WHERE c.cat_id IN (SELECT g.cat_id FROM goods g GROUP BY g.cat_id);

# 子查询能查出数据,则表示存在;为空则不存在;

(2)from型子查询:

把子查询的查询结果当成临时表,供主查询sql再次查询。查询结果集可以当成表看待,临时表要使用一个别名。

1)查询id小于10的商品:

SELECT goods_id,goods_name,shop_price FROM (SELECT goods_id,goods_name,shop_price FROM goods ORDER BY goods_id DESC) as tmp where goods_id<'10' ;

#子查询查出的结果使每个类别的第一条的商品id都为该类别下的最大值。然后将这个结果集作为一张临时表,然后使用where语句,即为每个类别下商品id小于10

#的商品;

22.4、ANY和ALL:

1、ANY:

(1)ANY关键字必须接在一个比较操作符的后面,ANY关键词的意思是,对于在子查询返回的列中的任一数值,如果比较结果为TRUE的话,则返回TRUE。

(2)in 的效果 和 =any 的效果是一样的。

(3)示例:

1)使用 any 查出类别大于任何一个num值的类别:

SELECT cat_id,cat_name FROM category WHERE cat_id > ANY (SELECT num FROM nums);

2)使用 in 查出cat_id 等于num的类别:

SELECT cat_id,cat_name FROM category WHERE cat_id IN (SELECT num FROM nums);

2、ALL:

(1)ALL关键字必须接在一个比较操作符的后面,ALL关键词的意思是“对于子查询返回的列中的所有值,如果比较结果为TRUE,则返回TRUE”。

(2)NOT IN 的效果和 <> ALL 的效果是一样的。

3、小结:

(1)any/in 可以理解为"或",all/not in可以理解为"且"。

(2)null永远不等于null,任何值和null进行四则运算结果都是null,任何值和null进行比较都不会返回任何的结果。

22、oracle子查询的更多相关文章

  1. Oracle子查询相关内容(包含TOP-N查询和分页查询)

    本节介绍Oracle子查询的相关内容: 实例用到的数据为oracle中scott用户下的emp员工表,dept部门表,数据如下: 一.子查询 1.概念:嵌入在一个查询中的另一个查询语句,也就是说一个查 ...

  2. oracle 子查询和组合函数

    oracle 子查询和组合函数 --查询与"SCOTT"在同一个部门的员工 select empno,ename,deptno from emp where deptno in ( ...

  3. 一道Oracle子查询小练习

    一道Oracle子查询小练习   昨天晚上躺在床上看Oracle(最近在学习这个),室友说出个题目让我试试.题目如下: 有如下表结构,请选择出成绩为前三名的人的信息(如果成绩相同,则算并列),表名为t ...

  4. Oracle 子查询

    1.子查询在SELECT.UPDATE.DELETE语句内部可以出现SELECT语句.内部的SELECT语句结果可以作为外部语句中条件子句的一部分,也可以作为外部查询的临时表.子查询的类型有: ① 单 ...

  5. oracle 子查询因子化 浅谈(with的使用)

    近来学习oracle,想要提高自己所写语句的效率和易读性,今天的笔记是关于子查询因子话这么一个东西 因子化的查询不一定可以提高效率,但是一定可以再提高程序的可读性方面成效显著 --with 语句 wi ...

  6. Oracle子查询中any、some、all之间的区别

    用some,any和all对子查询中返回的多行结果进行处理. 下面我们来简单介一下这几个关键词的含义. * Some在此表示满足其中一个的意义,是用or串起来的比较从句. * Any也表示满足其中一个 ...

  7. Oracle子查询之高级子查询

    Oracle 高级子查询 高级子查询相对于简单子查询来说,返回的数据行不再是一列,而是多列数据. 1,多列子查询 主查询与子查询返回的多个列进行比较 查询与141号或174号员工的manager_id ...

  8. Oracle子查询之简单子查询

    Oracle 简单子查询 顾名思义,简单子查询是嵌套在 SQL 语句中的另一个SELECT 语句,并且子查询只返回一列数据 1,单行子查询: 子查询 (内查询) 在主查询之前一次执行完成.子查询的结果 ...

  9. Oracle子查询和多表查询

    多表查询需要用到表的连接 连接可以分为:(自行百度) 交叉连接(数字逻辑的笛卡尔积,不做解释) 等值连接 例如:select * from t_a, t_b where t_a.xx = t_b.xx ...

随机推荐

  1. 关于flume中涉及到时间戳的错误解决,Expected timestamp in the Flume even

    在搭建flume集群收集日志写入hdfs时发生了下面的错误: java.lang.NullPointerException: Expected timestamp in the Flume event ...

  2. Python re 截取文本中IP地址及用户名

    文本示例: ts=2019-07-10T06:43:06523942Z pid=1875 tid=6320 version=e73c536 proto=http id=5a61a613e395f883 ...

  3. 006.Python循环语句while循环

    循环结构 优点 减少代码冗余 提升效率 while循环 语法结构 while 条件表达式: 循环体 code1 code2 打印0-100 i = 0 while i <= 100: print ...

  4. STM32电路设计注意

    以后画STM32的电路板 VDDA一定要接 张JF说  VDDA是给内部的时钟电路供电的 还有一定要留 串口或者  下载调试口(串口) 或者显示器接口 输入输出设备最好都留着 这样才能方便调试

  5. 10.21 nmap:网络探测工具和安全/端口扫描器

    nmap命令 是一款开放源代码的网络探测和安全审核工具,是Network Mapper的缩写.其设计目标是快速地扫描大型网络.nmap可以发现网络上有哪些主机,主机提供了什么服务(应用程序名称和版本号 ...

  6. JDK5.0新特性 (Day_07)

      JDK5.0新特性   目录 静态导入 自动装箱/拆箱 for-each循环 可变参数 枚举 JDK 5.0 新特性简介 JDK 5.0 的一个重要主题就是通过新增一些特性来简化开发,这些特性包括 ...

  7. 西门子 S7300 以太网模块连接组态王方法

    北京华科远创科技有限研发的远创智控ETH-YC模块,以太网通讯模块型号有MPI-ETH-YC01和PPI-ETH-YC01,适用于西门子S7-200/S7-300/S7-400.SMART S7-20 ...

  8. synchronized 的超多干货!

    前言 synchronized 这个关键字的重要性不言而喻,几乎可以说是并发.多线程必须会问到的关键字了.synchronized 会涉及到锁.升级降级操作.锁的撤销.对象头等.所以理解 synchr ...

  9. Linux 安装配置 tftp 服务器

    1.安装TFTP服务 安装服务端 sudo apt-get install tftpd-hpa 安装客服端 sudo apt-get install tftp-hpa 2.创建TFTP服务器目录 cd ...

  10. [leetcode] 45. 跳跃游戏 II(Java)(动态规划)

    45. 跳跃游戏 II 动态规划 此题可以倒着想. 看示例: [2,3,1,1,4] 我们从后往前推,对于第4个数1,跳一次 对于第3个数1,显然只能跳到第4个数上,那么从第3个数开始跳到最后需要两次 ...