ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL子查询

2020-06-27 16:03:33  阅读:237  来源: 互联网

标签:users userId 查询 MySQL WHERE orders SELECT


MySQL子查询

操作系统:ubuntu 18.04
mysql版本:8.0
创建:2020/6/27
修改:2020/6/27

使用的演示表:

users表存储用户信息

orders表存储用户的订单,一个用户可以有多个订单

order_items表存储订单项

利用子查询过滤

在下面的例子中,MySQL实际执行了三条SELECT语句。先执行最内层的SELECT语句,将查询的结果提供给外层的SELECT语句使用。最外层的SELECT返回所需的数据。

-- 查询购买了 长笛 的用户
SELECT *
FROM users
WHERE userId IN (
	SELECT userId
	FROM orders
	WHERE orderId IN (
		SELECT orderId
		FROM order_items
		WHERE `name` = '长笛'
	)
);

-- 查询userId最小的用户的信息
SELECT *
FROM users
WHERE userId = (
	SELECT MIN(userId)
	FROM users
);

作为计算字段

下面的查询先执行外部查询查询到所有用户,子查询再为检索出来的每个用户计算订单数,所以子查询一共执行了6次,因为一共查询出来6个用户。
涉及外部查询的子查询被称为相关查询,在下面的查询中,子查询条件中userId前加了表名限制,如果不加表名限制,则会认为两个userId都是orders表中的,在会产生混淆的地方都应该加表名限制。

--  查询用户的订单数量
SELECT name,
(
	SELECT COUNT(*)
	FROM orders
	WHERE orders.userId = users.userId
) AS num
FROM users;

子查询作为临时表

下面的例子中选取了orders表中的两列形式临时表,然后将临时表与users表联结。在这里子查询查询了多个列,根据不同的使用情况子查询也是可以查询多个列的。

-- 选取orders表中的orderId, userId列形成临时表
SELECT u.name, t.*
FROM users AS u, (
	SELECT orderId, userId 
	FROM orders
) AS t
WHERE u.userId = t.userId;

标签:users,userId,查询,MySQL,WHERE,orders,SELECT
来源: https://www.cnblogs.com/mywuhao/p/13198442.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有