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. Linux_配置本地YUM源(RHEL8)

    [RHEL8] Linux-RHEL8配置本地YUM 源,按照之前传统的配置本地YUM的方法肯定不行,在RHEL8版本的软件源发生了变化,在RHEL8版本的软件仓库分成了两部分:[AppStream] ...

  2. 云计算OpenStack核心组件---horizon Web管理界面(9)

    一.horizon介绍 Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 , 管理员可以使用通过 W ...

  3. HarmonyOS之DevEco2中真实手机调试应用

    本文将带你了解如何在真机上调试HarmonyOS应用 本人按照官方文档执行,还是遇到几个问题,特此记录下 https://developer.harmonyos.com/cn/docs/documen ...

  4. 使用Typora编写Markdown你真的会了吗

    目录 Typora 介绍 使用 常用快捷键 概述 标题 一级标题 二级标题 方式(推荐) 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落 粗体斜体删除线 下划线 注释 分割线 脚注 ...

  5. DDD兴起的原因以及与微服务的关系

    DDD为什么能火起来? 我们先不讨论DDD的定义, 先梳理一下DDD火起来的背景, 根据我学习的套路, 永远是为什么为先,再是解决什么问题,是什么东西, 最后如何使用.我们都知道这些年随着设备以及技术 ...

  6. Go基础结构与类型05---程序运算

    package main import ( "fmt" "math" ) func main() { /*加减乘除,求余*/ fmt.Println(" ...

  7. npm基本用法及原理(10000+)

       作为前端开发者,应该每个人都用过npm,那么npm到底是什么东西呢?npm run,npm install的时候发生了哪些事情呢?下面做详细说明. 1.npm是什么 npm是JavaScript ...

  8. 使用Relay部署编译ONNX模型

    使用Relay部署编译ONNX模型 本文介绍如何使用Relay部署ONNX模型的入门. 首先,必须安装ONNX软件包. 一个快速的解决方案是安装protobuf编译器,然后 pip install o ...

  9. 细粒度语义分割:ICCV2019论文解析

    细粒度语义分割:ICCV2019论文解析 Fine-Grained Segmentation Networks: Self-Supervised Segmentation for Improved L ...

  10. XLearning - 深度学习调度平台

    XLearning - 深度学习调度平台 软件简介 XLearning **** 是奇虎 360 开源的一款支持多种机器学习.深度学习框架调度系统.基于 Hadoop Yarn 完成了对TensorF ...