Maison >base de données >tutoriel mysql >Oracle DB 使用子查询来解决查询

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

WBOY
WBOYoriginal
2016-06-07 17:32:30842parcourir

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

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Article précédent:Hive RCFile的高效存储结构Article suivant:PostgreSQL的行转列应用