Home >Database >Mysql Tutorial >Oracle DB 使用子查询来解决查询

Oracle DB 使用子查询来解决查询

WBOY
WBOYOriginal
2016-06-07 17:32:30842browse

子查询是一个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

    注:比较条件分为以下两类:单行运算符(>、=、>=、、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数据库基础之基本查询语句-下-连接&子查询

     

    linux

    Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn