SQL必知必会——使用子查询(十一)

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

猜你喜欢

转载自blog.csdn.net/qq_28285403/article/details/94380824