热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

OracleDB使用子查询来解决查询

子查询是一个SELECT语句,它嵌入到另一个SELECT语句的子句中。通过使用子查询,可以用简单的语句构建功能强大的语句。当需要从表

子查询是一个SELECT语句,它嵌入到另一个SELECT语句的子句中。通过使用子查询,可以用简单的语句构建功能强大的语句。当需要从表

定义子查询

• 描述子查询可以解决的问题类型

• 列出子查询的类型

• 编写单行和多行子查询

• 子查询:类型、语法和准则

• 单行子查询:

– 子查询中的组函数

– 带有子查询的HAVING子句

• 多行子查询

– 使用ALL或ANY运算符

• 使用EXISTS运算符

• 子查询中的空值

  • 使用子查询解决问题
  • 谁的薪金高于Abel 的薪金?

    子查询:

    Abel 的薪金是多少?

    查询:

    哪些雇员的薪金高于Abel 的薪金?

    使用子查询解决问题

    假设要编写一个查询来找出谁的薪金高于Abel 的薪金。

    要解决此问题,需要使用两个查询:一个查询用于查找Abel 的薪金,另一个查询用于查找薪金超过该金额的人员。

    通过组合这两个查询,即将一个查询放在另一个查询中,可以解决此问题。

    内部查询(即子查询)会返回一个外部查询(即主查询)要使用的值。使用子查询等同于执行两个连续的查询,而且将第一个查询的结果用作第二个查询中的搜索值。

  • 子查询语法
  • • 先执行子查询(内部查询),再执行主查询(外部查询)。

    • 主查询会使用子查询的结果。

    SELECT select_list FROM table WHERE expr operator

    (SELECT select_list FROM table);

    子查询是一个SELECT语句,它嵌入到另一个SELECT语句的子句中。通过使用子查询,可以用简单的语句构建功能强大的语句。当需要从表中选择行,而选择条件却取决于该表自身中的数据时,子查询非常有用。

    可以在许多SQL 子句中使用子查询,其中包括以下子句:

    • WHERE子句

    • HAVING子句

    • FROM子句

    在该语法中:

    operator包括比较条件,,例如>、=或IN

    注:比较条件分为以下两类:单行运算符(>、=、>=、<、<>、<=)和多行运算符(IN、ANY、ALL、EXISTS)。

    子查询通常被称为嵌套SELECT语句、子SELECT语句或内部SELECT语句。通常先执行子查询,然后使用其输出来完善主查询(即外部查询)的查询条件。

  • 使用子查询
  • SELECT last_name, salary FROM employees

    WHERE salary >

    (SELECT salary FROM employees WHERE last_name = 'Abel');

    在示例中,内部查询确定了雇员Abel 的薪金。外部查询会采用内部查询的结果并根据此结果显示薪金超过雇员Abel 的所有雇员。

  • 使用子查询的准则
  • • 子查询必须放在括号中。

    • 子查询放在比较条件的右侧可增加可读性。但是,子查询可出现在比较运算符的任意一侧。

    • 在子查询中可以使用两类比较条件:单行运算符和多行运算符。对单行子查询使用单行运算符,对多行子查询使用多行运算符。

  • 子查询的类型
  • • 单行子查询:从内部SELECT语句中仅返回一行的查询

    • 多行子查询:从内部SELECT语句中返回多行的查询

    注:此外,还有多列子查询,此类查询从内部SELECT语句中返回多个列。

  • 单行子查询
  • 仅返回一行

    使用单行比较运算符

    单行子查询是从内部SELECT语句中返回一行的一种查询。此类子查询使用单行运算符。

    上图给出了单行运算符的列表。

    示例:

    显示其职务ID 与雇员141 的职务ID 相同的雇员:

    SELECT last_name, job_id FROM employees

    WHERE job_id =

    (SELECT job_id FROM employees WHERE employee_id = 141);

  • 执行单行子查询
  • SELECT last_name,job_id, salary FROM employees

    WHERE job_id =

    (SELECT job_id FROM employees WHERE last_name= 'Taylor')

    AND salary >

    (SELECT salary FROM employees WHERE last_name= 'Taylor');

    可以将SELECT语句看作一个查询块。示例显示其职务与Taylor 相同但薪金高于Taylor 的雇员。

    该示例由三个查询块组成:一个外部查询和两个内部查询。先执行内部查询块,生成的查询结果分别为SA_REP和8600。然后可以处理外部查询块,使用内部查询返回的值来完善其搜索条件。

    两个内部查询都返回单个值(分别为SA_REP和8600),因此将此SQL 语句称为单行子查询。

    注:外部查询和内部查询可以从不同的表中获得数据。

    更多详情见请继续阅读下一页的精彩内容

    推荐阅读:

    Oracle中from中子查询实例应用

    WITH子句:子查询命名

    Oracle子查询第一行与最后一行相运算

    Oracle子查询详解

    Oracle 10g数据库基础之基本查询语句-下-连接&子查询


    推荐阅读
    • PostgreSQL 12 版本预览:分离 max_wal_senders 和 max_connections 的连接槽处理
      本文介绍了 PostgreSQL 12 中的一项重要改进,即 max_wal_senders 参数不再计入 max_connections,从而解决了流复制连接槽不足的问题。 ... [详细]
    • MySQL 5.7 服务端在 Windows 上的安装与配置
      本文详细介绍了在 Windows 系统上安装和配置 MySQL 5.7 服务端的方法,包括 my.ini 配置文件的设置、初始化数据库、启动服务以及设置用户权限等步骤。 ... [详细]
    • 本文详细介绍了如何将Spring框架与Hibernate ORM框架进行集成,包括配置文件的设置和数据持久化操作的实现。 ... [详细]
    • 如何将两个具有相同主键的Excel表格合并
      本文介绍如何将两个具有相同主键的Excel表格进行合并,通过左连接的方式将表2的数据插入到表1中。具体步骤包括在表1中添加新的列、使用VLOOKUP函数进行数据匹配,以及通过SQL语句实现数据库中的表连接。 ... [详细]
    • 解决Win7安装SQL Server时NetFx3启动失败的问题
      在使用Win7系统安装SQL Server时,部分用户可能会遇到“启动Windows功能NetFx3时出错”的提示。本文将详细介绍这一问题的原因及解决方法。 ... [详细]
    • WPF项目学习.一
      WPF项目搭建版权声明:本文为博主初学经验,未经博主允许不得转载。一、前言记录在学习与制作WPF过程中遇到的解决方案。使用MVVM的优点是数据和视图分离,双向绑定,低耦合,可重用行 ... [详细]
    • 本文讨论了在 Oracle 10gR2 和 Solaris 10 64-bit 环境下,从 XMLType 列中提取数据并插入到 VARCHAR2 列时遇到的性能问题,并提供了优化建议。 ... [详细]
    • 本文探讨了在 SQL Server 2012 的 Integration Services 项目中配置 ADO.NET 源时遇到的错误及其解决方案。 ... [详细]
    • MongoDB核心概念详解
      本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
    • 数据仓库ETL开发过程中,如何有效进行测试是一个关键问题。由于数据仓库通常包含大量数据,并且出于安全考虑,开发库和测试库的数据与生产库不完全一致,这给测试带来了挑战。本文将探讨适用于ETL开发的测试方法,包括单元测试、集成测试以及具体测试技术。 ... [详细]
    • 周排行与月排行榜开发总结
      本文详细介绍了如何在PHP中实现周排行和月排行榜的开发,包括数据库设计、数据记录和查询方法。涉及的知识点包括MySQL的GROUP BY、WEEK和MONTH函数。 ... [详细]
    • 如何在不同数据库中提取前N%的记录
      本文详细介绍了如何在SQL Server、Oracle和MySQL等不同数据库中提取前N%的记录。通过具体的示例和代码,帮助读者理解和掌握这些方法。 ... [详细]
    • Nacos 0.3 数据持久化详解与实践
      本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
    • 本文介绍 DB2 中的基本概念,重点解释事务单元(UOW)和事务的概念。事务单元是指作为单个原子操作执行的一个或多个 SQL 查询。 ... [详细]
    • MySQL Server 8.0.28 升级至 8.0.30 的详细步骤
      为了修复安全漏洞,本文档提供了从 MySQL Server 8.0.28 升级到 8.0.30 的详细步骤,包括备份数据库、停止和删除旧服务、安装新版本以及配置相关环境变量。 ... [详细]
    author-avatar
    4396
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有