MySQL子查詢 巢狀查詢

2021-09-30 01:33:57 字數 1315 閱讀 9191

子查詢:巢狀在其他查詢中的查詢。

有三張表分別如下:

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;

MySQL子查詢 巢狀查詢

有三張表分別如下 customers 儲存顧客資訊 orderitems 只儲存訂單資訊,無客戶資訊 orders 儲存訂單號和顧客id 子查詢訓練 訓練1 查詢買了商品為 tnt2 的顧客資訊 子查詢中涉及3張表的訂單。因此分三步,1.在orderitems裡找出tnt2的訂單號 2.在order...

MySQL子查詢巢狀查詢

有三張表分別如下 customers 儲存顧客資訊 orderitems 只儲存訂單資訊,無客戶資訊 orders 儲存訂單號和顧客id 注意 一般在子查詢中,程式先執行在巢狀在最內層的語句,再執行外層。因此在寫子查詢語句時,可以先測試下內層的子查詢語句是否輸出了想要的內容,再一層層往外測試,增加子...

mysql求和 子查詢 MySQL子查詢

到現在為止,我們已經表明,以select宣告是乙個簡單的查詢。該單個語句從單個資料庫表中檢索資料。sql還同意建立乙個子查詢。即巢狀在其他查詢的查詢。下列實施例給出巢狀查詢。一種表示訂單資訊儲存,包含訂單號,客戶id。訂購日期。例如以下所看到的 一張表示儲存訂單物品資訊,例如以下 另一張表儲存的是客...