MySQL 嵌套查询

嵌套查询

是指在一个完整的查询语句之中,包含若干个不同功能的小查询;从而一起完成复杂查询的一种编写形式。包含的查询放在()里 , 包含的查询出现的位置:

位置含义
SELECT之后把查询结果作为表头使用
FROM之后把查询结果作为表使用
WHERE之后把查询结果作为查询条件
HAVING之后把查询结果作为过滤使用

SELECT之后:

查看客户的总订单数

mysql> select cust_name,-> (select count(*) from orders-> where orders.cust_id = customers.cust_id )-> as orders_num from customers;
+----------------+------------+
| cust_name      | orders_num |
+----------------+------------+
| Coyote Inc.    |          2 |
| Mouse House    |          0 |
| Wascals        |          1 |
| Yosemite Place |          1 |
| E Fudd         |          1 |
+----------------+------------+
5 rows in set (0.01 sec)

WHERE之后:

查询下单了TNT2的客户id

mysql> select cust_id from orders-> where order_num in-> ( select order_num from orderitems-> where prod_id = 'TNT2' );
+---------+
| cust_id |
+---------+
|   10001 |
|   10004 |
+---------+
2 rows in set (0.01 sec)

实验:

1.使用子查询,返回购买价格为10或以上的商品的客户列表。您需,然后使用要使用Orderltems表查找匹配的订单号(order num)Orders表检索每个匹配订单的客户ID(cust id)。

mysql> select distinct cust_id from  orders-> where order_num in -> ( select order_num from orderitems -> where item_price >= 10 ) ;
+---------+
| cust_id |
+---------+
|   10001 |
|   10003 |
|   10004 |
+---------+
3 rows in set (0.01 sec)

2.您需要知道订购产品BR01的日期。编写一条SQL语句,使用子查询确定哪些订单(Orderltems中)购买了prod_id为BR01的商品,然后返回客户ID(cust_id),和订单日期(order_date)。按订单日期排序结果。

mysql> select order_date from orders -> where order_num in-> ( select order_num from orderitems-> where prod_id = 'ANV01');
+---------------------+
| order_date          |
+---------------------+
| 2023-09-01 00:00:00 |
+---------------------+
1 row in set (0.00 sec)

3.更新前面的挑战,为购买了prod id为AVN01的商品的任何客户返回客户电子邮件(Customers表中的custemail)。这里有一个提示:这涉及到SELECT语句,最里面的查询从Orderltems返回order num,中间的查询从Customers返回custid。

mysql> select cust_email from customers-> where cust_id in-> ( select cust_id from orders-> where order_num in-> ( select order_num from orderitems-> where prod_id = 'ANV01' ) );
+-----------------+
| cust_email      |
+-----------------+
| ylee@coyote.com |
+-----------------+
1 row in set (0.00 sec)

4.您需要一个包含每个客户订购的总额的客户ID列表。编写一条SOL语句,返回客户ID(0rders表中的cust id)和total ordered,并使用一个子查询返回每个客户的订单总数。按花费从大到小的顺序排列结果。这里有一个提示:你已经使用SUM()来计算订单总计。

mysql> SELECT cust_id,-> ( SELECT SUM(quantity * item_price )  FROM orderitems-> WHERE order_num IN-> ( SELECT order_num  FROM orders-> WHERE orders.cust_id = customers.cust_id ) ) -> AS total_ordered-> FROM customers-> ORDER BY total_ordered DESC;
+---------+---------------+
| cust_id | total_ordered |
+---------+---------------+
|   10004 |       1000.00 |
|   10001 |        188.34 |
|   10005 |        125.00 |
|   10003 |         55.00 |
|   10002 |          NULL |
+---------+---------------+
5 rows in set (0.00 sec)

5.编写一条SQL语句,从Products表中检索所有产品名称(prodname),以及一个名为quant_sold的计算列,该列包含此商品的销售总数(使用Orderltems表中的子查询和SUM(quantity)检索)。

mysql> SELECT prod_name,-> (SELECT Sum(quantity)-> FROM orderitems-> WHERE products.prod_id=orderitems.prod_id) -> AS quant_sold-> FROM products;
+----------------+------------+
| prod_name      | quant_sold |
+----------------+------------+
| .5 ton anvil   |         10 |
| 1 ton anvil    |          3 |
| 2 ton anvil    |          1 |
| Detonator      |       NULL |
| Bird seed      |          2 |
| Carrots        |         50 |
| Fuses          |       NULL |
| JetPack 1000   |       NULL |
| JetPack 2000   |          1 |
| Oil can        |          1 |
| Safe           |       NULL |
| Sling          |          1 |
| TNT (1 stick)  |       NULL |
| TNT (5 sticks) |        105 |
+----------------+------------+
14 rows in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615551.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊一下HashMap的底层原理

HashMap作为我们熟悉的一种集合,今天就来聊一下它的原理、数据结构。 1.HashMap的数据结构 JDK1.7的数据结构是数组链表,JDK1.7还有人在用?不会吧…… 说一下JDK1.8的数据结构吧: JDK1.8的数据结构是数组链表红黑树。 数据结…

Android 14.0 SystemUI修改状态栏电池图标样式为横屏显示

1.概述 在14.0的系统rom产品定制化开发中,对于原生系统中SystemUId 状态栏的电池图标是竖着显示的,一般手机的电池图标都是横屏显示的 可以觉得样式挺不错的,所以由于产品开发要求电池图标横着显示和手机的样式一样,所以就得重新更换SystemUI状态栏的电池样式了 如图: 2.S…

Boost之date_time

Boost.Date_Time库是一个功能丰富的时间日期处理库,它提供了多种用于日期和时间计算、格式化、转换和输入输出的功能。以下是该库的一些详细介绍: 1、日期处理: Boost.Date_Time库中的date类基于格里高利历(Gregorian calendar&…

MySQL基础知识——MySQL日志

一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块, 最后到达存储引擎。 那么, 一条更新语句的执行流程又是怎样的呢? 下面我们从一个表的一条更新语句进行具体介绍: 假设这个表有一个主键ID和一个…

在视频号变现,你还停留在只能自己直播的时代吗?现在新玩法来了

大家好,我是电商笨笨熊 在很多人的固有印象里,视频号当下变现的方式还只有自己开直播带货或者是短视频带货;这种方式虽然变现快,但是对于更多的普通玩家来说相对困难,需要直播经验,自身还要具备足够的粉丝…

ML在骨科手术术前、书中、术后方法应用综述【含数据集】

达芬奇V手术机器人 近年来,人工智能(AI)彻底改变了人们的生活。人工智能早就在外科领域取得了突破性进展。然而,人工智能在骨科中的应用研究尚处于探索阶段。 本文综述了近年来深度学习和机器学习应用于骨科图像检测的最新成果,描述了其贡献、优势和不足。以及未来每项研究…

CTFshow电子取证——内存取证2

接上回 JiaJia-CP-2 2.佳佳在网页上登录了自己的邮箱,请问佳佳的邮箱是? 因为是在网页上登陆的邮箱 用iehistory插件 查看一下网页历史记录 为了方便分析,使用grep命令正则匹配一下 **com 的记录 vol.py -f JiaJia_Co.raw --profileWin…

Git以及Gitlab的快速使用文档

优质博文:IT-BLOG-CN 安装git 【1】Windows为例,去百度下载安装包。或者去官网下载。安装过秳返里略过,一直下一步即可。丌要忉记设置环境发量。 【2】打开cmd,输入git –version正确输出版本后则git安装成功。 配置ssh Git和s…

Matlab求矩阵的逆,3种常用方法总结

几种求逆矩阵的方法总结,以Matlab语言为例 *0* 引言*1* 简单描述函数实现*2* 方法调用计算对比 0 引言 最近在使用函数库求解逆矩阵的时候发现同一个矩阵使用不同的语言、不同的求解方法会产生不同精度的结果,特别是阶数很高的方阵,一些库中的…

Java 中文官方教程 2022 版(四十九)

原文:docs.oracle.com/javase/tutorial/reallybigindex.html JAXB 示例 原文:docs.oracle.com/javase/tutorial/jaxb/intro/examples.html 以下部分描述如何使用包含在 JAXB RI 捆绑包中的示例应用程序。JAXB RI 捆绑包可从jaxb.java.net获取。下载并安装…

力扣HOT100 - 56. 合并区间

解题思路: class Solution {public int[][] merge(int[][] intervals) {// 先按照区间起始位置排序Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);int[][] res new int[intervals.length][2];int idx -1;for (int[] interval : intervals) {//直接加入的…

深度学习的模型有几类,能干嘛用?

1、基础模型 (1)卷积神经网络 **卷积:**卷积的本质是通过矩阵运算9的方式将输入数据进行空间上的滤波,有效地提取数据中的局 部特征,从而实现特征数据更高程度的抽象表示。 **池化:**可以理解成“压缩”…