mysql 集合 MySql集合查詢

2021-10-25 14:16:37 字數 3832 閱讀 2688

select語句的查詢結果是元組的集合,所以多個select語句的結果可進行集合操作。

集合操作主要包括並操作union、交操作intersect、差操作except。

注意,參加集合操作的各查詢結果的列數必須相同;對應的資料型別也必須相同。

本示例中的資料表有student,sc,course三個,資料表的具體內容請看:

union示例:

例子1.1

題目:查詢電腦科學系的學生及年齡不大於19歲的學生。

sql語句:

select * from student where sdept='cs' union

select * from student where sage<=19

查詢結果:

本查詢實際上是求計算機系的所有學生與年齡不大於19歲的學生的並集。

與它等效的sql語句是:

select * from student where sdept='cs' or sage<=19

注意:雖然這個兩個sql語句是等效的,但是本質上是不一樣的,第乙個sql語句是分別進行兩次select然後將結果取並集;第二個sql語句是直接進行了一次select語句查詢。

intersect示例:

mysql語句並不至此intersect,所以只能使用其替代語句

例子2.1

題目:查詢電腦科學系中年齡不大於19歲的學生。

對應的sql語句應該是:

select * from student

where sdept='cs'

intersect

select * from student

where sage<=19;

替代的sql語句:

select *

from student

where sdept = 'cs'

and sage <=19

查詢結果:

例子2.2

題目:查詢即選修了課程1又選修了課程2的學生。(就是查詢選修課程1的學生集合與選修課程2的學生集合的交集)

對應的sql語句應該是:

select sno from sc

where cno='1'

intersect

select sno from sc

where cno='2';

替代的sql語句為:

(使用in)

select sno

from sc

where cno = '1'

and sno

in (

select sno

from sc

where cno = '2'

或者為:

(使用exists)

select sno

from sc scx

where cno = '1'

and exists (

select sno

from sc scy

where cno = '2'

and scx.sno = scy.sno

查詢結果為:

或者為:

(使用join on)

except操作:

很不幸,mysql也不支援except操作,只能使用替代的語句。

例子3.1

查詢電腦科學系的學生與年齡不大於19歲的學生的差集。

對應的sql語句為:

select * from student where sdept='cs'

except

select * from student where sage<=19;

也就是查詢電腦科學系中年齡大於19歲的學生。

替換語句為:

(直接使用where,不得不說這麼做很簡單,但是意思上不是很好理解)

select *

from student

where sdept = 'cs'

and sage >19

查詢結果為:

或者替換語句為:

(使用not in)

select *

from student

where sdept = 'cs'

and sno not

in (

select sno

from student

where sage <=19

查詢結果為:

或者使用替換語句為:

(使用not exists)

select *

from student sx

where sdept = 'cs'

and not

exists (

select *

from student sy

where sy.sage <=19

and sx.sno = sy.sno

查詢結果為:

對集合操作結果的排序

order by子句只能用於對最終查詢結果排序,不能對中間結果排序。

任何情況下,order by子句只能出現在最後;對集合操作結果排序時,order by子句中用數字指定排序屬性。

下面是一種錯誤的寫法:

select * from student

where sdept='cs'

order by sno

union

select * from student

where sage<=19

order by sno;

正確的應該是:

select * from student

where sdept='cs'

union

select * from student

where sage<=19

order by 2;

輸出結果:

如果寫成:

select * from student

where sdept='cs'

union

select * from student

where sage<=19

order by 1;

輸出結果為:

mysql集合屬性 MySql集合查詢

select語句的查詢結果是元組的集合,所以多個select語句的結果可進行集合操作。集合操作主要包括並操作union 交操作intersect 差操作except。注意,參加集合操作的各查詢結果的列數必須相同 對應的資料型別也必須相同。本示例中的資料表有student,sc select語句的查詢...

mysql 集合 思想 mysql 面向集合查詢

面向集合的思想 sql是為查詢和管理關係型資料庫中的資料而專門設計的一種標準語言。我們通常認為的關係型是說的資料庫中表與表的關係,這個理解是有問題的,這裡的關係其實是數學術語上的關係。為什麼這麼說?因為關係型資料庫是以關係模型為基礎,而關係模型是以集合論和謂詞邏輯兩大數學理論為依據的。集合論中,關係...

mysql確定集合查詢 mysql 面向集合查詢

l 面向集合的思想 sql是為查詢和管理關係型資料庫中的資料而專門設計的一種標準語言。我們通常認為的關係型是說的資料庫中表與表的關係,這個理解是有問題的,這裡的關係其實是數學術語上的關係。為什麼這麼說?因為關係型資料庫是以關係模型為基礎,而關係模型是以集合論和謂詞邏輯兩大數學理論為依據的。集合論中,...