mysql 使用子查詢 MySQL 子查詢的使用

2021-10-20 22:16:48 字數 2402 閱讀 4062

mysql

子查詢的使用

什麼是子查詢

子查詢是將乙個 select 語句的查詢結果作為中間結果,供另乙個 sql 語句呼叫。

像這樣:

-- 我們將學生表中的所有班級id當做中間結果

select *from t_class where c_id in (select distinct c_id from t_student);

常用比較符

子查詢最常用的用法:

non_subquery_operand comparison_operator (subquery)

其中操作符通常為

其他的都不說了,這裡說下這個<=>,以前還真沒用過

<=>和=比較類似,也是判斷是否相等,相等返回1,不相等返回2

mysql> select 1<=>1,1<=>2;

| 1<=>1 | 1<=>2 |

| 1 | 0 |

1 row in set

mysql> select 1=1,1=2;

| 1=1 | 1=2 |

| 1 | 0 |

1 row in set

和=不一樣的地方,是對null的支援,用<=>可以判斷是否為null,而等號則是出現null,結果就為null

mysql> select 1<=>null,null<=>null,1=null,null=null;

| 1<=>null | null<=>null | 1=null | null=null |

| 0 | 1 | null | null |

1 row in set

any、in、some

在子查詢中,in平時用的比較多,這個any、some,這裡簡單說下any和some

operand comparison_operator any (subquery)

operand comparison_operator some (subquery)

comparison_operator 可以為 = > < >= <= <> !=

any表示任意乙個值,比如

> any () :表示大於any中任意乙個值,即》子查詢中最小值

< any(): 表示小於any中任意乙個值,即

= any(): 和in一樣

<> any():比較好玩兒,如果子查詢返回多個值,<> any會返回所有值

select *from t_student

where s_id > any(

select s_id from t_student where s_id in (105,109,111)

>any

select *from t_student

where s_id = any(

select s_id from t_student where s_id in (105,109,111)

=any

some 和any是一樣的就不多說了

all這個all我也沒咋用過,all表示所有值,和any有點兒相反的意思

operand comparison_operator all (subquery)

> all ():表示大於所有值,即》子查詢中最大值

< all() : 表示小於所有值,即< 子查詢中的最小值

= all(): 返回單個值時和=一樣,返回多個值時貌似沒啥用

<> all(): 和not in 一樣

select *from t_student

where s_id > all(

select s_id from t_student where s_id in (105,109)

>all

標量子查詢

這種情況下,子查詢返回單個值,可以在任何地方使用它。

select

c_id,

c_name,

(select max(s_id) from t_student) as max_s_id

from

t_class;

select

from

t_class

where

c_id = (select max(c_id) from t_class);

行子查詢

上面我們介紹的子查詢,都是返回1列多行,行子查詢的話,是返回1行多列

-- 查詢一班所有男生

select *from t_student

where (c_id,s_gender) = (901,0);

行子查詢

這裡也可以返回多行多列(也叫做錶子查詢)

select *from t_student

where (c_id,s_gender) in (select 901,0 union select 902,0);

多行多列

參考資料

My SQL 使用子查詢

在關係型資料庫中,關係表是把資訊分解成多個表,一類資料乙個表,各表通過某些常用的值互相關聯。在乙個表中通常有乙個外來鍵,包含了和他有關係的表的主鍵,定義了兩個表之間的關係。這裡我們使用兩個表orders和orderitems為例,內容如下 可以看到這兩張表有關聯的是列order item列。想要獲得...

mysql 使用子查詢

子查詢總是從內向外處理 書寫子查詢語句時盡量格式化,看起來易理解 使用子查詢的地方可以使用 表聯結 代替 對有歧義的列名進行完全限定,即 where orders.cust id customers.cust id 場景 1 利用子查詢進行過濾 列出訂購物品tnt2的所有客戶 第一步 從表 orde...

MySQL使用子查詢

子查詢 即巢狀在其他查詢中的查詢 把一條查詢語句的結果用於另一條查詢語句的where子句 select cust id from orders where order num in select order num from orderitems where prod id tnt2 把查詢語句的結...