什么是子查询
嵌套在其他查询当中的查询;
利用子查询进行过滤
输入: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是一个计算字段,它是由圆括号中的子查询建立的。该子查询对检索出的每个客户执行一次。
相关子查询:涉及外部查询的子查询;任何时候只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔)。