想要使用子查询,必须使用MySQL 4.1或更高级的版本。
利用子查询进行过滤
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 = 'TNT2'));
在WHERE子句中使用子查询,应该保证SELECT语句具有与WHERE子句中相同数目的列。
不过使用子查询并不总是执行这种类型的数据检索的最有效的方法。
虽然子查询一般与IN操作符结合使用,但是也可以用于测试等于(=)和不等于(<>)等。
作为计算字段使用子查询
SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM orders
WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;
相关子查询:涉及外部查询的子查询。
任何时候只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔)。
请逐渐增加子查询来建立查询:
首先,建立和测试最内层的查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。这时,再次测试它。对于要增加的每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节省了以后(找出查询为什么不正常)的大量时间,并且极大地提高了查询一开始就正常工作的可能性。
版权声明:本文为qq_40948559原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。