SQL必知必会(11)——使用子查询

本文深入解析SQL子查询的使用方法,包括子查询的基本概念、如何利用子查询进行数据过滤及作为计算字段使用,通过实例说明DBMS如何执行多级子查询。

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

1、子查询

嵌套在其他查询中的查询。

注意:
1、任何SQL语句都是查询。但此术语一般指SELECT语句

2、利用子查询进行过滤

SELECT cust_name,cust_contact
FROM customers
WHERE  cust_id IN(SELECT cust_id
                                FROM orders
                                WHERE order_num IN(SELECT order_num
                                                                        FROM orderItems
                                                                        WHERE prod_id='RGAN01'));
#为了执行上述SELECT语句,DBMS实际上必须执行三条SELECT语句。最里面的子查询返回订单号列表,此列表用于其外面的子查询的WHERE子句。
外面的子查询返回顾客ID列表,此顾客ID列表用于最外层查询的WHERE子句。最外层查询返回所需的数据。

注意:
1、作为子查询的SELECT语句只能查询单个列。企图检索多个列将返回错位

3、作为计算字段使用子查询

SELECT cust_name,
                cust_state,
                (SELECT COUNT(*)
                FROM orders
                WHERE orders.cust_id =customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;
#这条SELECT语句对customers表中每个顾客返回三列:cust_name,cust_state和orders。
orders是一个计算字段,他是由圆括号中的子查询建立的 。该子查询对检索出的每个顾客执行一次。
在此例中,该子查询执行了5次,因为检索出了5个顾客。

注意:
1、例如,where或order by子句中指定某个列名可能会出现在多个表中。好的做法是,如果在SELECT语句中操作多个表,就应完全限定列名来避免歧义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值