MySQL的巢狀查詢

2022-09-08 18:03:11 字數 1556 閱讀 7295

背景:

有時我們在進行sql查詢時,需要用到乙個子查詢的查詢結果作為另乙個查詢的查詢條件或者查詢結果。也是被稱之為sql的子查詢。

用法:主要有兩種,一種是放在where查詢子句中使用,另一種是作為查詢結果。

測試用到的表:

在where查詢子句中使用

比如要查詢部門員工表中員工編號為10005所在的部門員工資訊

不使用sql巢狀查詢時,那可以使用兩個sql來解決這個問題。

第一步先查詢出員工編號為10005的部門編號。

select dept_no from dept_emp where emp_no='10005'
第二步利用第一步查詢出的部門編號進而查詢出該部門的部門員工資訊。

select * from dept_emp where dept_no ='d003' ;
但是如果如果使用巢狀查詢的話,那麼只需要乙個sql就可以解決該問題。

-- 先利用子查詢查詢出部門編號,再利用主查詢查詢其需要的相關資訊

子查詢作為查詢結果

比如我要查詢部門編號,部門名稱以及每個部門的人數

分析:依據部門表,部門編號和部門名稱這兩個欄位很好獲取,但是每個部門的人數就需要用到部門員工表,要統計每個部門的員工數目就要用到count(*)函式。要查詢d001部門的人數可以將sql寫成

select count(*) from dept_emp where dept_no  ='d001';
但是需要的是各個部門的人數,那這時where子句就不能這樣寫了,需要寫成

where dept_emp.dept_no=departments.dept_no
它要使用完全限定列名。

那麼這個sql就自然寫成了

select dept_no,

dept_name,

(select count(*) from dept_emp where dept_emp.dept_no=departments.dept_no) as emp_num

from departments;

結果為:

MySQL的巢狀查詢

定義我就不說了,子查詢就是內部的查詢,包含子查詢就是外部查詢!也就是說巢狀查詢乙個是內部查詢乙個是外部查詢,而且查詢是由內向外的。提示一下 在group by和order by中的子查詢是沒有意義的!子查詢的分類 標量子查詢 返回單個值的查詢 列子查詢 返回單屬性一列的 行子查詢 返回多屬性一行的 ...

MySQL子查詢 巢狀查詢

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

MySQL子查詢 巢狀查詢

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