数据库学习:子查询

本文探讨了数据库中的子查询概念,详细介绍了如何利用子查询进行数据过滤和作为计算字段使用。通过实例展示了如何将复杂的多步骤查询转化为嵌套SQL,从而更高效地获取所需信息,例如查询特定物品订单的用户信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子查询(嵌套sql)

select语句是sql的查询。迄今为止我们所看到的所有select语句都是简单查询,即从单个数据库表中检索数据的单条语句。
sql还允许创建子查询,即嵌套在其他查询中的查询。

利用子查询进行过滤

若要跨表查询使用简单的sql语句需要如下

1.查询包含物品TNT2的所有订单编号

select order_num from orderitems where prod_id = 'TNT2';

2.查询对应订单编号的用户ID

select cust_id from orders where order_num in (20005,20007);

3.查询购买对应物品的用户信息

select cust_id,cust_name from customers where cust_id in (10001,10004);

至此经过三步查询获取到了客户的信息。

可以把其中的WHERE子句转换为子查询而不是硬编码这些SQL返回的数据:

转换为嵌套SQL,子查询

select cust_id,cust_name from customers where cust_id in(
select cust_id from orders where order_num in(
select order_num from orderitems where prod_id='TNT2')));

什么是嵌套查询,子查询

就是在一个sql当中,它的where条件来源于另外一个sql。
或者反过来理解,一个sql语句的结果,作为外层sql语句的条件。.

作为计算字段使用子查询

例:需要获取customers表中每个用户的订单总数

1.从customers表中获取用户列表

select cust_id,cust_name from customers;

2.获取一个用户在orders表中的订单数

select count(*) as orders_num from orders where cust_id = 10001;

3.考虑如何获取每个客户的订单数,对每个客户进行count函数的统计计算
–把count()作为一个子查询,即可作为计算字段进行子查询

select cust_id,cust_name,
	(select count(*) from orders where orders.cust_id = customers.cust_id) as orders_num 
from customers;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值