日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ORACLE SQL笛卡尔集

發布時間:2025/3/15 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORACLE SQL笛卡尔集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ORACLE SQL笛卡爾集

開發工具與關鍵技術:Oracle sql*plus PLSQL Developer 作者:何任賢 撰寫時間:2019年01月01日 笛卡爾集是所有表連接中最特殊的一個,它是所有表連接無效,或者沒有連接條件時產生。

假如有A、B兩張表,那么當A表的第一列和B表的所有列相連然后A表第二列繼續和B表的所有列相連依此類推,這時A表和B表的相連產生的數據集,叫做笛卡爾集。
笛卡爾集的作用和其他連接不一樣,所有連接都是笛卡爾集加上連接條件而成,然而我們可以不寫連接條件,直接篩選數據或獲得某些數據,例子如下:

例一:圖1是表數據 、圖2是表結構

圖1 圖2

其中SNO代表學號、CNO代表科目號、SCORE代表成績。
題目當我要查詢科目號為C001,比自己成績低的人數至少一人、學號、科目號、成績。
那么這個時候我們就可以利用笛卡爾集加上條件篩選數據。

代碼:
SELECT A.SNO,A.CNO,A.SCORE,COUNT(A.SNO) AS “人數”
FROM (SELECT * FROM SC WHERE CNO = ‘C001’) A ,
(SELECT * FROM SC WHERE CNO = ‘C001’) B
WHERE A.SCORE > B.SCORE
GROUP BY A.SNO,A.CNO,A.SCORE

代碼詳解:
該代碼只用了一個分組函數“COUNT”,作用是返回某分組中的記錄條數,查詢的是兩張一樣的表,該表的數據是圖1進行CNO 為C001的篩選而成的,數據如圖3。只有一個WHERE條件,就是讓A表的成績大于B表的成績

結果如圖4:

圖3 圖4

例二:圖1是表數據 、圖2是表結構
題目:當我要查詢所有科目最高分中最低分的科目的最低成績和科目號。
意思是查詢每個科目最高分中最低分的科目,該科目最低的成績和該科目號

代碼:
SELECT A.CNO,A.SIN FROM
(SELECT CNO,MAX(SCORE) SAX,MIN(SCORE) SIN FROM SC GROUP BY CNO) A,
(SELECT CNO,MAX(SCORE) SAX,MIN(SCORE) SIN FROM SC GROUP BY CNO) B
HAVING MIN(A.SAX) = MIN(B.SAX)
GROUP BY A.CNO,A.SIN

代碼詳解:
該代碼用到了兩個分組函數,一個是“MAX”獲得該分組的最大值,一個是“MIN”
獲得該分組的最小值,查詢的也是兩張一樣的表,該表的數據是圖1進行CNO分組然后獲取分組后的最大值和最小值,數據如圖5,只有一個HAVING條件,該條件的意思是在圖5的A表中SAX列最小的數據并且等于B表中SAX列最小的數據,這就是笛卡爾集的作用。
因為笛卡爾集會把兩張表的列以1對多的形式連接,而我們要查詢的科目最低的成績
和該科目號在圖5中就把數據查詢出來了,而我們只需要篩選所有科目最高分中最低
分的科目就行了,那么我們通過A表中SAX列最小值和B表中SAX列最小值作為條件
那么查詢出來的數據就是我們所需要的數據。

結果如圖6

圖5 圖6

通過以上例子我們可以發現笛卡爾集的連接方式,可以讓我們靈活的篩選一些數據或者獲得一些數據,以上就是笛卡爾集的運用和理解。

總結

以上是生活随笔為你收集整理的ORACLE SQL笛卡尔集的全部內容,希望文章能夠幫你解決所遇到的問題。

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