子查詢IN的用法

2021-09-25 20:37:43 字數 1978 閱讀 7621

今天我們要介紹的是子查詢

子查詢大家應該都不陌生啦,在很多地方可以使用到的

首先我們來總結一下

sql子查詢可以用在哪些地方

子查詢的位置

select 《子查詢》 from 《子查詢》 where 《子查詢》

insert table (columns) 《子查詢》

delete table from 《子查詢》 where 《子查詢》

update table from 《子查詢》 where 《子查詢》

那麼,你們知道子查詢的關鍵字有哪些嗎?

in

exists

對,就這兩個,是不是很簡單呢

可是,要把子查詢用好,可不是一件這麼容易的事情

今天我們來介紹子查詢in

in 關鍵字使您得以選擇與列表中的任意乙個值匹配的行

太抽象了是嗎,我們還是來看看例項吧:

這是乙個資料模型

請用sql來實現以下問題

1.顯示成績全部及格的學生名單

2.顯示各班總成績最好的學生名單

3.顯示各班各課目成績前3位學生的成績

第一題應該很簡單,其實有很多種寫法

首先,如何得到及格的學生呢?

select 學號 from 成績 where 成績》=60

然後,這樣只能得到學號呀,所以,我們需要:

select * from 學生 where 學號 in (select 學號 from 成績 where 成績》=60)

換乙個寫法可不可以呢?

select * from 學生 where 學號 not in (select 學號 from 成績 where 成績<60)

當然可以,想想哪種效率高,班上是及格的學生多還是不及格的學生多呢?

如果及格的學生多,那麼select 學號 from 成績 where 成績<60,是不是返回的資料量更小呢?當然效率就高一些!

第二題,顯示各班總成績最好的學生名單

我們先把問題簡單化,得到某乙個班成績最好的學生

select max(成績) from 成績 where 班級=xx

這個容易吧!

各班成績最好的呢?

select 學號 from 成績 a where 成績=(select max(成績) from 成績 where 班級=a.班級

把成績表a與子查詢通過班級關聯,用成績做條件,搞定!

學生名單

select * from 學生 where 學號 in (

select 學號 from 成績 a where 成績=(select max(成績) from 成績 where 班級=a.班級) )

也不複雜吧

第三題,顯示各班各課目成績前3位學生的成績

跟第二題有點象吧,可是,大家注意,第二題只取每個班的第一名,我們可以用max,這裡,似乎用不了了吧….

怎麼辦呢

其實很簡單,在第二題中,我們的成績是用=,而這題中,我們的成績用in不就可以了嗎?

select * from 學生 where 學號 in

select 學號 from 成績 a where 成績in(select top 3 成績 from 成績 where 班級=a.班級 order by 成績 desc) )

關於使用子查詢in,給大家乙個小忠告:子查詢適合外結果集大,子查詢結果集小的情況,千萬不能濫用子查詢in,您一定要保證子查詢所返回的結果集盡量的小,哪怕你的sql返回記錄數只有1條,如果你使用到了子查詢,而你的子查詢返回10000條,那速度會受到很大影響呢,那天你的sqlserver當機了,可千萬不要來找我麻煩呀,哈哈

還有,其實第二題中的子查詢與外面的表進行關聯xx=外表.xx,一般情況下,我們是不太贊同這樣使用的,同時會存在效能問題

好了, 子查詢in就介紹到這裡了,是不是很有趣呢?

Oracle子查詢的用法

在執行資料庫操作 包括查詢 新增 修改 刪除等操作 的過程中,如果某個操作需要依賴另乙個select語句的查詢結果,那麼就可以把select語句嵌入到該操作語句中,這樣就形成了乙個子查詢。實際上,在關係型資料庫中,各表之間的資料關係非常密切,它們相互關聯,相互依存,這樣就可以根據資料之間的關係使用相...

ORACLE子查詢的多種用法

一 用於查詢 第乙個是最普通的子查詢,子查詢 內查詢 在主查詢之前一次執行完成。子查詢的結果被主查詢 外查詢 使用。子查詢一般是返回單行,要是返回多行,就要用到使用多行比較操作符 in,all,any 二 使用子查詢建立表 這就是把子查詢查詢出來的資料,建立成乙個表,表中的列的資料型別 約束和原來的...

T SQL與子查詢的一些用法

begin sql語句 end例如 if exists select from sys.databases where name 資料庫名 begin drop database 資料庫名 end資料型別的轉換 關鍵字 convert 語法 convert int,列名 style 第乙個引數是資料...