700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【MySQL必知必会】第十四章 使用子查询

【MySQL必知必会】第十四章 使用子查询

时间:2020-11-07 02:35:05

相关推荐

【MySQL必知必会】第十四章 使用子查询

1、查询(query):任何SQL语句都是查询。但此属于一般指SELECT语句。

2、子查询(subquery):嵌套在其他查询中的查询。

目标:查询订购物品TNT2的用户信息。

前提:有三个表,orderitems表存储物品的订单编号和物品信息,orders表存储订单编号和客户ID,customers表存储客户ID和客户信息。

分解:

1、检索包含物品TNT2的所有订单编号。

2、检索步骤1返回的订单编号的关联的客户ID。

3、检索步骤2返回的客户ID的客户信息。

分步查询:

输入:

SELECT order_num

FROM orderitems

WHERE prod_id = 'TNT2';

输出:

order_num

201

205

输入:

SELECTcust_id

FROMorders

WHEREorder_num IN (201,205);

输出:

cust_id

101

103

输入:

SELECTcust_name,cust_contact

FROMcustomers

WHEREcust_id IN (101,103);

输出:

cust_namecust_conctact

Coy PeterY Lee

New KetterY Sam

嵌套查询:

输入:

SELECTcust_name,cust_contact

FROMcustomers

WHEREcust_id IN (SELECTcust_id

FROMorders

WHEREorder_num IN (SELECT order_num

FROM orderitems

WHERE prod_id = 'TNT2'));

输出:

cust_namecust_conctact

Coy PeterY Lee

New KetterY Sam

注:在WHERE子句中使用子查询,应保证SELECT语句和WHERE子句中列的数目相同。

3、作为计算字段使用子查询

输入:

SELECT cust_name,

cust_state,

(SELECT COUNT(*)

FROMorders

WHEREorders.cust_id=customers.cust_id) AS orders

FROM custmers

ORDER BY cust_name;

输出:

cust_namecust_stateorders

R FuddMI3

Wascals AZ2

分析:orders是一个计算字段,由圆括号里的子查询建立,该子查询调用了2次,每检索到一个客户调用一次。可以看到子查询中的WHERE子句使用了全限定名,因为此处要区分字段的来源。

4、相关子查询(correlated subquery):涉及外部查询的子查询。

任何时候,只要列名具有多意性,就要必须使用这种语法(表名和列名由一个句点分隔)。上面再customers表中使用了orders表就是相关子查询,须用全限定名。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。