12.基础-使用子查询

什么是子查询

       嵌套在其他查询当中的查询;

利用子查询进行过滤

       输入:SELECT cust_id
                 FROM orders
                 WHERE order_num IN (SELECT order_num
                                                       FROM orderitems
                                                       WHERE prod_id='TNT2')
;

       分析:在SELECT语句中,子查询总是从内向外处理。MySQL处理上述SELECT语句时,执行了两步操作。

       第一步:SELECT order_num
                    FROM orderitems

                    WHERE prod_id='TNT2';

       此查询返回两个订单号:20005和20007,然后,这两个值以IN操作符要求的逗号分隔的格式传递给外部查询的WHERE子句;

       第二步:SELECT cust_id
                    FROM orders

                    WHERE order_num IN (20005,20007);

----------------------------------------------------------------

       还可以嵌套多个子查询;对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。


列必须匹配: 在WHERE子句中使用子查询,应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。

作为计算字段使用子查询


分析:orders是一个计算字段,它是由圆括号中的子查询建立的。该子查询对检索出的每个客户执行一次。

相关子查询:涉及外部查询的子查询;任何时候只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值