广告
返回顶部
首页 > 资讯 > 数据库 >SQL 入门教程:子查询
  • 205
分享到

SQL 入门教程:子查询

SQL入门教程:子查询 2017-11-30 08:11:57 205人浏览 绘本
摘要

目录一、利用子查询进行过滤请参阅 目录汇总:sql 入门教程:面向萌新小白的零基础入门教程 SELECT 语句 是 SQL 的查询。我们迄今为止所看到的所有 SELECT 语句都是简单查询,即从单个数据库表中检索数据的单条语句。

SQL 入门教程:子查询

目录
  • 一、利用子查询进行过滤
  • 请参阅

目录汇总:sql 入门教程:面向萌新小白的零基础入门教程

SELECT 语句 是 SQL 的查询。我们迄今为止所看到的所有 SELECT 语句都是简单查询,即从单个数据库表中检索数据的单条语句。

查询(query)

任何 SQL 语句都是查询。但此术语一般指 SELECT 语句。

SQL 还允许创建子查询(subquery),即嵌套在其他查询中的查询。为什么要这样做呢?理解这个概念的最好方法是考察几个例子。

一、利用子查询进行过滤

本教程所有部分中使用的数据库表都是关系表(关于每个表及关系的描述,请参阅 样例表脚本)。订单存储在两个表中。每个订单包含订单编号、客户 ID、订单日期,在 Orders 表中存储为一行。各订单的物品存储在相关的 OrderItems 表中。Orders 表不存储顾客信息,只存储顾客 ID。顾客的实际信息存储在 Customers 表中。

现在,假如需要列出订购物品 RGAN01 的所有顾客,应该怎样检索?下面列出具体的步骤。

(1) 检索包含物品 RGAN01 的所有订单的编号。

(2) 检索具有前一步骤列出的订单编号的所有顾客的 ID。

(3) 检索前一步骤返回的所有顾客 ID 的顾客信息。

上述每个步骤都可以单独作为一个查询来执行。可以把一条 SELECT 语句返回的结果用于另一条 SELECT 语句的 WHERE 子句。

也可以使用子查询来把 3 个查询组合成一条语句。

第一条 SELECT 语句的含义很明确,它对 prod_id 为 RGAN01 的所有订单物品,检索其 order_num 列。输出列出了两个包含此物品的订单:

输入▼

SELECT order_num
FROM OrderItems
WHERE prod_id = "RGAN01";

输出▼

order_num
-----------
20007
20008

现在,我们知道了哪个订单包含要检索的物品,下一步查询与订单 20007 和 20008 相关的顾客 ID。利用 IN 操作符 介绍的 IN 子句,编写如下的 SELECT 语句:

输入▼

SELECT cust_id
FROM Orders
WHERE order_num IN (20007,20008);

输出▼

cust_id
----------
1000000004
1000000005

现在,结合这两个查询,把第一个查询(返回订单号的那一个)变为子查询。请看下面的 SELECT 语句:

输入▼

SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
                    FROM OrderItems
                    WHERE prod_id = "RGAN01");

输出▼

cust_id
----------
1000000004
1000000005

分析▼

SELECT 语句中,子查询总是从内向外处理。在处理上面的 SELECT 语句时,DBMS 实际上执行了两个操作。

首先,它执行下面的查询:

SELECT order_num FROM orderitems WHERE prod_id="RGAN01"

此查询返回两个订单号:20007 和 20008。然后,这两个值以 IN 操作符要求的逗号分隔的格式传递给外部查询的 WHERE 子句。外部查询变成:

SELECT cust_id FROM orders WHERE order_num IN (20007,20008)

可以看到,输出是正确的,与前面硬编码 WHERE 子句所返回的值相同。

提示:格式化 SQL

包含子查询的 SELECT 语句难以阅读和调试,它们在较为复杂时更是如此。如上所示,把子查询分解为多行并进行适当的缩进,能极大地简化子查询的使用。

顺便一提,这就是颜色编码起作用的地方,好的 DBMS 客户端正是出于这个原因使用了颜色代码 SQL。

现在得到了订购物品 RGAN01 的所有顾客的ID。下一步是检索这些顾客 ID 的顾客信息。检索两列的 SQL 语句为:

输入▼

SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (1000000004,1000000005);

可以把其中的 WHERE 子句转换为子查询,而不是硬编码这些顾客 ID:

输入▼

SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
                  FROM Orders
                  WHERE order_num IN (SELECT order_num
                                      FROM OrderItems
                                      WHERE prod_id = "RGAN01"));

输出▼

cust_name                         cust_contact
-----------------------------     --------------------
Fun4All                           Denise L. Stephens
The Toy Store                     Kim Howard

分析▼

为了执行上述 SELECT 语句,DBMS 实际上必须执行三条 SELECT 语句。最里边的子查询返回订单号列表,此列表用于其外面的子查询的 WHERE 子句。外面的子查询返回顾客 ID 列表,此顾客 ID 列表用于最外层查询的 WHERE 子句。最外层查询返回所需的数据。

可见,在 WHERE 子句中使用子查询能够编写出功能很强且很灵活的 SQL 语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。

注意:只能是单列

作为子查询的 SELECT 语句只能查询单个列。企图检索多个列将返回错误。

注意:子查询和性能

这里给出的代码有效,并且获得了所需的结果。但是,使用子查询并不总是执行这类数据检索的最有效方法。

请参阅

  • 子查询
  • 作为计算字段使用子查询
  • 子查询练习题

(完)

您可能感兴趣的文档:

--结束END--

本文标题: SQL 入门教程:子查询

本文链接: https://www.lsjlt.com/news/8660.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL 入门教程:子查询
    目录一、利用子查询进行过滤请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 SELECT 语句 是 SQL 的查询。我们迄今为止所看到的所有 SELECT 语句都是简单查询,即从单个数据库表中检索数据的单条语句。 ...
    99+
    2017-11-30
    SQL 入门教程:子查询
  • SQL 入门教程:创建组合(UNION)查询
    目录一、使用 UNION二、UNION 规则三、包含或取消重复的行四、对组合查询结果排序请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 可用 UNION 操作符来组合数条 SQL 查询。利用 UN...
    99+
    2014-09-12
    SQL 入门教程:创建组合(UNION)查询
  • SQL 入门教程:组合 WHERE 子句
    目录一、AND 操作符二、OR 操作符三、求值顺序请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 使用 WHERE 子句 中介绍的所有 WHERE 子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤...
    99+
    2018-08-24
    SQL 入门教程:组合 WHERE 子句
  • SQL 入门教程:使用 WHERE 子句
    目录请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria)...
    99+
    2015-08-13
    SQL 入门教程:使用 WHERE 子句
  • MySQL入门教程2 —— 输入查询及退出查询命令
    确保你连接上了服务器,如在上一章节讨论的。连接上服务器并不代表选择了任何数据库,但这样就可以了。知道关于如何查询的基本知识,比马上跳至创建表、给他们装载数据并且从他们检索数据更重要。本节描述输入命令的基本原则,使...
    99+
    2022-05-27
    MySQL SQL 命令 查询 终止
  • SQL Server子查询的深入理解
    当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询。 1 子查询 子查询是一个嵌套在select、insert、update或delete语句或其他...
    99+
    2022-11-12
  • SQL 教程-入门基础篇
    文章目录 SQL 简介SQL 语法SQL SELECT 语句SQL SELECT DISTINCT 语句SQL WHERE 子句SQL AND & OR 运算符SQL ORDER BY...
    99+
    2023-08-31
    sql 数据库 mybatis mysql
  • SQL 零基础入门教程
    目录一、了解 SQL二、检索数据三、排序检索数据四、过滤数据五、高级数据过滤六、用通配符进行过滤七、创建计算字段八、使用函数处理数据九、汇总数据十、分组数据十一、使用子查询十二、联结表十三、创建高级联结十四、组合查询十五、插入数据十六、更...
    99+
    2014-09-15
    SQL 零基础入门教程
  • SQL 入门教程:SELECT 语句
    目录请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 SQL 语句是由简单的英语单词构成的。这些单词称为关键字,每个 SQL 语句都是由一个或多个关键字构成的。最经常使用的 SQL 语句大概就是 SELECT 语句了。它的...
    99+
    2019-04-11
    SQL 入门教程:SELECT 语句
  • 如何快速入门SQL Server XML查询
    本篇文章给大家分享的是有关如何快速入门SQL Server XML查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。sql xml 入门: -...
    99+
    2022-10-18
  • MySQL教程80-MySQL子查询
    子查询是 MySQL 中比较常用的查询方法,通过子查询可以实现多表查询。子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 SELECT、UPDATE 和 DELETE 语句中使用,而且可以进行多层嵌套。在实际开发时,子查询...
    99+
    2020-09-04
    MySQL教程80-MySQL子查询 数据库入门 数据库基础教程 数据库 mysql
  • MySQL子查询详细教程
    目录1.where后面嵌套子查询2.from后面嵌套子查询*3.在select 后面嵌套子查询4.union5.*limit定义:select语句中嵌套select语句,被嵌套的select...
    99+
    2022-10-28
  • SQL 入门教程:数据插入(INSERT)
    目录一、插入完整的行二、插入部分行三、插入检索出的数据请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 毫无疑问,SELECT 是最常用的 SQL 语句了,这就是前 14 部分都在讲它的原因。但是,还有其他 3 个...
    99+
    2015-09-22
    SQL 入门教程:数据插入(INSERT)
  • SQL 子查询简介
    目录一、子查询和视图二、子查询的名称三、标量子查询四、标量子查询的书写位置五、使用标量子查询时的注意事项请参阅 学习重点 一言以蔽之,子查询就是一次性视图(SELECT 语句)。与视图不同,子查询在 SELECT 语句执行完...
    99+
    2019-10-04
    SQL 子查询简介
  • SQL 关联子查询
    目录一、普通的子查询和关联子查询的区别二、关联子查询也是用来对集合进行切分的三、结合条件一定要写在子查询中请参阅 学习重点 关联子查询会在细分的组内进行比较时使用。 关联子查询和 GROUP BY 子句一样,也可以对表中的数据进...
    99+
    2016-06-28
    SQL 关联子查询
  • SQL 入门教程:创建视图
    目录一、利用视图简化复杂的联结二、用视图重新格式化检索出的数据三、用视图过滤不想要的数据四、使用视图与计算字段请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 理解了什么是 视图 以及管理它们的规则和约束后,我们来创建视图...
    99+
    2022-01-24
    SQL 入门教程:创建视图
  • SQL 入门教程:LIKE 操作符
    目录一、百分号(%)通配符二、下划线(_)通配符三、方括号([])通配符四、使用通配符的技巧请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 前面介绍的所有操作符都是针对已知值进行过滤的。不管是匹配一个值还是多个值,检验大...
    99+
    2022-02-08
    SQL 入门教程:LIKE 操作符
  • SQL 入门教程:拼接字段
    目录使用别名请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 为了说明如何使用 计算字段,我们来举一个简单例子,创建由两列组成的标题。 Vendors 表包含供应商名和地址信息。假如要生成一个供应商报表,需要在格式化的名称...
    99+
    2020-03-12
    SQL 入门教程:拼接字段
  • SQL 入门教程:使用函数
    目录一、文本处理函数二、日期和时间处理函数三、数值处理函数请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 大多数 SQL 实现支持以下类型的函数。 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。 ...
    99+
    2017-06-27
    SQL 入门教程:使用函数
  • SQL 入门教程:聚集函数
    目录一、AVG() 函数二、COUNT() 函数三、MAX() 函数四、MIN() 函数五、SUM() 函数请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 我们经常需要汇总数据而不用把它们实际检索出来,为此 SQL 提供...
    99+
    2020-07-09
    SQL 入门教程:聚集函数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作