日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql中的并、交、差

發布時間:2024/7/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql中的并、交、差 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

⑸ 集合運算連接

有時候,用戶希望在SQL查詢中利用關系代數中的集合運算(并、交、差)來組合關系,SQL為此提供了相應的運算符:UNION、INTERSECT、EXCEPT(oracle的minus?),分別對應于集合運算的∪、∩、-。它們用于兩個查詢之間,對每個查詢都要用圓括號括起來。對于不同的DBMS,支持的集合運算有所不同,如ACCESS,SQLSERVER都不支持集合的交運算和差運算。

?

【例3-40】 查詢選修了180101號或180102號課程或二者都選修了的學生學號、課程號和成績。

(SELECT? 學號, 課程號, 成績

FROM?? 學習

WHERE?? 課程號='180101')

? UNION

(SELECT 學號, 課程號, 成績

FROM 學習

WHERE??? 課程號='180102')

輸出結果:

學號

課程號

成績

090101

180101

59

090101

180102

56

090102

180101

70

090102

180102

65

?

?

與SELECT子句不同,UNION運算自動去除重復。因此,在本例中,若只輸出學生的學號,則相同的學號只出現一次。如果想保留所有的重復,則必須用UNION ALL代替UNION,且查詢結果中出現的重復元組數等于兩個集合中出現的重復元組數的和。

【例3-41】查詢同時選修了180101和180102號課程的學生學號、課程號和成績。

(SELECT? 學號, 課程號, 成績

FROM?? 學習

WHERE 課程號='180101')

INTERSECT

(SELECT 學號, 課程號, 成績

FROM 學習

WHERE 課程號='180102')

INTERSECT運算自動去除重復,如果想保留所有的重復,必須用INTERSECT ALL代替INTERSECT,結果中出現的重復元組數等于兩集合出現的重復元組數里較少的那個。

或者多次的子查詢

補充:

1、intersect運算
返回查詢結果中相同的部分既他們的交集

SQL> select * from abc
? 2? intersect
? 3? select * from abc2 ;

2、minus運算
返回在第一個查詢結果中與第二個查詢結果不相同的那部分行記錄,
即兩個結果的差集

SQL> select * from abc2
? 2? minus
? 3? select * from abc ;

3-42】查詢選修了180101號課程的學生中沒有選修180102號課程的學生學號、課程號和成績。

(SELECT? 學號, 課程號, 成績

FROM?? 學習

WHERE? 課程號='180101')

EXCEPT

(SELECT 學號, 課程號, 成績

FROM 學習

WHERE?? 課程號='180102')

EXCEPT運算自動去除重復,如果想保留所有的重復,必須用EXCEPT ALL代替EXCEPT,結果中出現的重復元組數等于兩集合出現的重復元組數之差(前提是差是正值)。

在不支持INTERSECT和EXCEPT運算的DBMS中,必須使用其它方法實現,其中,嵌套查詢是十分有效的一種方法。

轉載于:https://www.cnblogs.com/sumsen/archive/2012/12/10/2811757.html

總結

以上是生活随笔為你收集整理的sql中的并、交、差的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。