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);

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

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

12.基础-使用子查询

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

作为计算字段使用子查询

12.基础-使用子查询

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

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