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语句中操作多个表,就应完全限定列名来避免歧义。