SQL第11课——使用子查询

ops/2024/10/20 13:34:18/

11.1 子查询

查询(query):

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

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

SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询。

11.2 利用子查询进行过滤

本课使用的数据库表都是关系表。订单存储在两个表中。每个订单包含订单编号,客户ID, 订单日期,在orders表中存储为一行。各订单的物品存储在相关的orderitems表中。orders表不存储顾客信息,只存储顾客ID。顾客的实际信息存储在customers表中。

现在需要列除订购物品RGAN01的所有顾客,实时步骤:

1. 检索包含物品RGAN01的所有订单的编号;——OrderItems表中

2. 检索具有前一步骤列出的订单编号的所有顾客的ID;——Customers表中

3. 检索前一步骤返回的所有顾客ID的顾客信息——Orders表中

每个步骤可以单独作为一个查询来执行,可以把一条select语句返回的结果用于另一条select语句的where子句。也可以使用子查询把3个查询组合成一条语句。

第一步骤:

第二步:

结合这两个查询,把第一个查询变为子查询。

子查询总是从内向外处理。

第三步:检索这些顾客ID的顾客信息。

把where子句转换为子查询,

实际使用时由于性能的限制,不能嵌套太多的子查询。

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

使用子查询并不总是执行这类数据检索的最有效方法,更好的方法,以后论述。

11.3 作为计算字段使用子查询

使用子查询的另一种方法是创建计算字段。

假如需要显示customers表中每个顾客的订单总数。订单与相应的顾客ID存储在orders表中,执行这个操作,要遵循下面的步骤:

1. 从customers表中检索顾客列表;

2. 对于检索出的每个顾客,统计其在orders表中的订单数目。

对顾客1000000001的订单进行计数:

 要对每个顾客执行count(*),应该将它作为一个子查询:

where指定了表名,如果没有具体指定表名,就会返回错误结果,如下:

总是返回orders表中的订单数。


http://www.ppmy.cn/ops/122010.html

相关文章

Spring的热部署工具和数据库密码加盐操作

1.布置热部署 引言:在程序运行起来后,如果我们对代码进行了修改,需要重新测试修改后的程序,就得重新启动程序,这样很麻烦。于是引入热部署之后,我们就不需要重新启动程序,会自动更正。 1.配置po…

修改ID不能用关键字作为ID校验器-elementPlus

1、校验器方法 - forbiddenCharValidator const idUpdateFormRef ref(null); const forbiddenCharValidator (rule, value, callback) > {const forbiddenCharacters [as,for,default,in,join,left,inner,right,where,when,case,select];for (let forbiddenCharacter o…

Ansible学习之ansible-pull命令

想要知道ansible-pull是用来做什么的,就需要了解Ansible的工作模,Ansible的工作模式有两种: push模式 push推送,这是Ansible的默认模式,在主控机上编排好playbook文件,push到远程主机上来执行。pull模式 p…

6.MySQL基本查询

目录 表的增删查改Insert(插入)插入替换插入替换2 Retrieve(查找)SELECT 列全列查找指定列查询查询字段为表达式为查询结果指定别名结果去重 WHERE 条件order by子句筛选分页结果 Update(更新)delete&#…

【Docker从入门到进阶】03.进阶应用

3. 进阶应用 在本节中,我们将深入探讨Docker的高级应用,包括如何通过Dockerfile定义和构建镜像,数据管理的最佳实践,网络配置,以及如何使用Docker Compose来管理多容器应用。 基本指令详解 FROM: 可以使用特定版本的…

R包的安装、加载以及如何查看帮助文档

0x01 如何安装R包 一、通过R 内置函数安装(常用) 1.安装CRAN的R包 install.packages()是一个用于安装 R 包的重要函数。 语法:install.packages(pkgs, repos getOption("repos"),...) 其中: pkgs:要安…

Javascript数组研究02_手写实现_at_concat_copyWithin_entries_every

目录 1 Array.at() 1.1基本介绍 1.2 手写实现 2 Array.concat() 2.1 基本介绍 2.2 手写实现-获取构造函数与concat实现 3 Array.copyWithin() 3.1 基本介绍 3.2 手写实现 4 Array.entries() 4.1 基本介绍 4.2 手写实现 4.2.1 手写实现返回迭代器对象 4.2.2 使用ge…

深度剖析音频剪辑免费工具的特色与优势

是热爱生活的伙伴或者想要记录美好声音的普通用户,都可能会需要对音频进行剪辑处理。而幸运的是,现在有许多优秀的音频剪辑软件提供了免费版本,让我们能够轻松地施展音频剪辑的魔法。接下来,就让我们一同深入了解这些音频剪辑免费…