当前位置: 首页 > news >正文

SQL第11课——使用子查询

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表中的订单数。

相关文章:

  • 983. 最低票价
  • PHP读取文件内容的几种方法和函数
  • django使用笔记6--docker部署
  • 破局汽车智能化浪潮:Tire 1供应商的网络优化与升级策略
  • 在Linux中进行OpenSSH升级(编译安装在openssh目录)
  • C语言系列4——指针与数组(1)
  • 【数据库】 MongoDB 用户分配新的角色和权限
  • 从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx
  • Cannon-es.js之HingeConstraint铰链约束案例
  • leetcode163.缺失的区间,模拟
  • 【算法】堆排之LCR 159.库存管理 Ⅲ(easy)
  • Python Web 与量子计算
  • css的页面布局属性
  • 65.【C语言】联合体
  • Databend 实现高效实时查询:深入解读 Dictionary 功能
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【刷算法】从上往下打印二叉树
  • CAP 一致性协议及应用解析
  • fetch 从初识到应用
  • Git初体验
  • golang中接口赋值与方法集
  • IDEA常用插件整理
  • isset在php5.6-和php7.0+的一些差异
  • Iterator 和 for...of 循环
  • vue的全局变量和全局拦截请求器
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 后端_ThinkPHP5
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端临床手札——文件上传
  • 深度学习入门:10门免费线上课程推荐
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 白色的风信子
  • Linux权限管理(week1_day5)--技术流ken
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #70结构体案例1(导师,学生,成绩)
  • #微信小程序(布局、渲染层基础知识)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (floyd+补集) poj 3275
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)windows配置JDK环境
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (四)opengl函数加载和错误处理
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)面试需要掌握的技巧
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转) Face-Resources
  • (转)Linux下编译安装log4cxx
  • *setTimeout实现text输入在用户停顿时才调用事件!*