mysql之子查詢

2021-09-08 11:10:15 字數 1922 閱讀 9889

所謂子查詢,就是指在乙個查詢之中巢狀了其他的若干查詢,通過子查詢可以實現多表查詢,該查詢語句中可能包含in,any,all和exists等關鍵字,除此之外還可以包含比較運算子,子查詢經常出現在where和from字句中。

where字句中的子查詢:該位置處的子查詢一般返回單行單列,多行單列,單行多列資料記錄。

from字句中的子查詢:該位置處的子查詢一般返回多行多列資料記錄,可以當作一張臨時表。

1. 返回結果為單行單列和單行多列子查詢

當子查詢的返回結果為單行單列資料記錄時,該子查詢語句一般在主查詢語句的where子句裡,通常會包含比較運算子(">","<","=","!="等)。

1.1 返回結果為單行單列子查詢

select

*from e_employee where sal >(select sal from t_employee where ename=

'smith

')

1.2 返回結果為單行多列子查詢

select ename,sal,job from e_employee where (sal,job) = (select sal,job from t_employee where ename=

'smith

')

2. 返回結果為多行單列子查詢

當子查詢的返回結果為多行單列資料記錄時,該子查詢語句一般在主查詢語句的where子句裡,通常會包含in,any,all,exists等關鍵字。

2.1 帶有關鍵字in的子查詢

當主查詢語句的條件是子查詢的查詢結果時,就可以通過關鍵字in來進行判斷,相反如果想實現主查詢的條件不是子查詢的查詢結果時,就可以通過關鍵字not in來進行判斷。

select

*from t_employee where deptno in (select deptno from t_dept)

2.2 帶有關鍵字any的子查詢

select ename,sal from t_employee where sal >any (select sal from t_employee where job=

'manager

')

關鍵字any用來表示主查詢的條件為滿足子查詢返回查詢結果中任意一條資料記錄,該關鍵字有三種匹配方式,分別如下:

=any:其功能與關鍵字in一樣。

>any(>=any):比子查詢中返回資料記錄中最小的還要大於(大於等於)資料記錄。

2.3 帶有關鍵字all的子查詢

select ename,sal from t_employee where sal >all (select sal from t_employee where job=

'manager

')

關鍵字all用來表示主查詢的條件為滿足子查詢返回查詢結果中所有資料記錄,該關鍵字有以下兩種匹配方式。

>all(>=all):比子查詢中返回資料記錄中最大的還要大於(大於等於)資料記錄。

2.4 帶有關鍵字exists的子查詢

關鍵字exists是乙個布林型別,當返回結果集時為true,不能返回結果集時為false。查詢時exists對外表採用遍歷方式逐條查詢,每次查詢都會比較exists的條件語句,當exists裡的條件語句返回記錄行時則條件為真,此時返回當前遍歷到的記錄;反之,如果exists裡的條件語句不能返回記錄行,則丟棄當前遍歷到的記錄。

select

*from t_dept c where

notexists (select

*from e_employee where deptno=c.deptno);

3. 返回結果為多行多列子查詢

當子查詢的返回結果為多行多列資料記錄時,該子查詢語句一般會在主查詢語句的from子句裡,被當作一張臨時表的方式來處理。

MySQL 之子查詢

定義 子查詢指乙個查詢語句巢狀在另乙個查詢語句內部的查詢,這個特性從 mysql4.1 開始引入,在 select 子句中先計算子查詢,子查詢結果作為外層另乙個查詢的過濾條件,查詢可以基於乙個表或者多個表。子查詢中常用的操作符有 any some all in 和 exists。子查詢可以新增到 s...

mysql資料查詢之子查詢

子查詢概念 sub query select select 1 標量子查詢 where 之後寫 確定某乙個值 select from student where c id select idfrom class where grade pm3.1 2 列子查詢 where 之後 寫 in,是一列的所...

Mysql之子查詢和union

在之前的表基礎上建立表 create table price level id int pricelevel int price float description varchar 300 insert into price level id pricelevel price description...