ORACLE SQL笛卡尔集
ORACLE SQL笛卡爾集
開發工具與關鍵技術:Oracle sql*plus PLSQL Developer 作者:何任賢 撰寫時間:2019年01月01日 笛卡爾集是所有表連接中最特殊的一個,它是所有表連接無效,或者沒有連接條件時產生。假如有A、B兩張表,那么當A表的第一列和B表的所有列相連然后A表第二列繼續和B表的所有列相連依此類推,這時A表和B表的相連產生的數據集,叫做笛卡爾集。
笛卡爾集的作用和其他連接不一樣,所有連接都是笛卡爾集加上連接條件而成,然而我們可以不寫連接條件,直接篩選數據或獲得某些數據,例子如下:
例一:圖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
通過以上例子我們可以發現笛卡爾集的連接方式,可以讓我們靈活的篩選一些數據或者獲得一些數據,以上就是笛卡爾集的運用和理解。
總結
以上是生活随笔為你收集整理的ORACLE SQL笛卡尔集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年中国银发经济洞察报告
- 下一篇: 快手2021服饰品类洞察报告