MySQL子查询嵌套查询
子查詢:嵌套在其他查詢中的查詢。
有三張表分別如下:
customers: 存儲顧客信息
orderitems:只存儲訂單信息,無客戶信息
orders:存儲訂單號和顧客id
注意:一般在子查詢中,程序先運行在嵌套在最內層的語句,再運行外層。因此在寫子查詢語句時,可以先測試下內層的子查詢語句是否輸出了想要的內容,再一層層往外測試,增加子查詢正確率。否則多層的嵌套使語句可讀性很低。
子查詢訓練:
訓練1:
查詢買了商品為’TNT2’的顧客信息
子查詢中涉及3張表的訂單。因此分三步,1. 在orderitems里找出TNT2的訂單號;2. 在orders里找出第一步找出的訂單號對應的客戶id;3. 在customers中找出第二步對應客戶的所有信息。
1. 在orderitems里找出TNT2的訂單號
SELECT order_num FROM orderitems
WHERE prod_id='TNT2';
2. 在orders里找出第一步找出的訂單號對應的客戶id
SELECT cust_id FROM orders
WHERE order_num
IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');
3. 在customers中找出第二步對應客戶的所有信息
SELECT * FROM customers
WHERE cust_id
IN (SELECT cust_id FROM orders WHERE order_num IN
(SELECT order_num FROM orderitems WHERE prod_id='TNT2'));
這樣就得到結果啦~
子查詢一般與IN操作符結合使用,也可用=><等。
另外,子查詢還可以用于計算字段。
訓練2:
如,想要查詢每個客戶的訂單數
分步思考:1. 查詢某個客戶的訂單數;2. 某個客戶改為所有客戶。
1. 查詢某個客戶的訂單數
SELECT COUNT(*) AS orders1 FROM orders WHERE cust_id =10001;
2. 某個客戶改為所有客戶
SELECT cust_name, cust_state,
(SELECT COUNT(*) FROM orders WHERE orders.cust_id=customers.cust_id)
AS orders1
FROM customers
ORDER BY cust_name;
注意:當多個表都擁有同樣的列名如cust_id時,一定要完全限定列名。
總結
以上是生活随笔為你收集整理的MySQL子查询嵌套查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++:Static修饰变量 vs St
- 下一篇: MySQL子查询操作实例详解