Oracle minus用法詳解及應用實例
Oracle minus用法
“minus”直接翻譯為中文是“減”的意思,在Oracle中也是用來做減法操作的,只不過它不是傳統(tǒng)意義上對數(shù)字的減法,而是對查詢結(jié)果集的減法。A minus B就意味著將結(jié)果集A去除結(jié)果集B中所包含的所有記錄后的結(jié)果,即在A中存在,而在B中不存在的記錄。其算法跟Java中的Collection的removeAll()類似,即A minus B將只去除A跟B的交集部分,對于B中存在而A中不存在的記錄不會做任何操作,也不會拋出異常。
Oracle的minus是按列進行比較的,所以A能夠minus B的前提條件是結(jié)果集A和結(jié)果集B需要有相同的列數(shù),且相同列索引的列具有相同的數(shù)據(jù)類型。此外,Oracle會對minus后的結(jié)果集進行去重,即如果A中原本多條相同的記錄數(shù)在進行A minus B后將會只剩一條對應的記錄,具體情況請看下面的示例。
下面我們來看一個minus實際應用的示例,假設我們有一張用戶表t_user,其中有如下記錄數(shù)據(jù):
id |
no |
name |
age |
level_no |
1 |
00001 |
a |
25 |
1 |
2 |
00002 |
b |
30 |
2 |
3 |
00003 |
c |
35 |
3 |
4 |
00004 |
d |
45 |
1 |
5 |
00005 |
e |
30 |
2 |
6 |
00006 |
f |
35 |
3 |
7 |
00007 |
g |
25 |
1 |
8 |
00008 |
h |
35 |
2 |
9 |
00009 |
i |
20 |
3 |
10 |
00010 |
j |
25 |
1 |
那么:
(1)“select id from t_user where id<6 minus select id from t_user where id between 3 and 7”的結(jié)果將為:
id |
1 |
2 |
(2)“select age,level_no from t_user where id<8 minus select age,level_no from t_user where level=3”的結(jié)果為:
age |
level_no |
25 |
1 |
30 |
2 |
45 |
1 |
看到這樣的結(jié)果,可能你會覺得有點奇怪,為何會是這樣呢?我們來分析一下。首先,“select age,level_no from t_user where id<8”的結(jié)果將是這樣的:
age |
level_no |
25 |
1 |
30 |
2 |
35 |
3 |
45 |
1 |
30 |
2 |
35 |
3 |
25 |
1 |
然后,“select age,level_no from t_user where level=3”的結(jié)果將是這樣的:
age |
level_no |
35 |
3 |
35 |
3 |
20 |
3 |
然后,直接A minus B之后結(jié)果應當是:
age |
level_no |
25 |
1 |
30 |
2 |
45 |
1 |
30 |
2 |
25 |
1 |
這個時候,我們可以看到結(jié)果集中存在重復的記錄,進行去重后就得到了上述的實際結(jié)果。其實這也很好理解,因為minus的作用就是找出在A中存在,而在B中不存在的記錄。
上述示例都是針對于單表的,很顯然,使用minus進行單表操作是不具備優(yōu)勢的,其通常用于找出A表中的某些字段在B表中不存在對應記錄的情況。比如我們擁有另外一個表t_user2,其擁有和t_user表一樣的表結(jié)構(gòu),那么如下語句可以找出除id外,在t_user表中存在,而在t_user2表中不存在的記錄。
select no,name,age,level_no from t_user minus select no,name,age,level_no from t_user2;
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
Oracle數(shù)據(jù)庫中l(wèi)ead和lag函數(shù)用法示例
lag與lead函數(shù)是跟偏移量相關的兩個分析函數(shù),通過這兩個函數(shù)可以在一次查詢中取出同一字段的前N行的數(shù)據(jù)(lag)和后N行的數(shù)據(jù)(lead)作為獨立的列,這篇文章主要給大家介紹了關于Oracle數(shù)據(jù)庫中l(wèi)ead和lag函數(shù)用法的相關資料,需要的朋友可以參考下2024-06-06Oracle 11g 新特性 Flashback Data Archive 使用實例
這篇文章主要介紹了Oracle 11g 新特性 Flashback Data Archive 使用實例,Flashback Data Archive 的主要作用是在它的有效期內(nèi)將保存事務改變的信息,需要的朋友可以參考下2014-07-07連接Oracle數(shù)據(jù)庫時報ORA-12541:TNS:無監(jiān)聽程序的圖文解決教程
這篇文章主要介紹了連接Oracle數(shù)據(jù)庫時報ORA-12541:TNS:無監(jiān)聽程序的圖文解決教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08oracle中變長數(shù)組varray,嵌套表,集合使用方法
這篇文章主要介紹了oracle中變長數(shù)組varray,嵌套表,集合使用方法,需要的朋友可以參考下2016-02-02Oracle數(shù)據(jù)庫中使用正則表達式的超詳細教程
正則表達式是一種描述簡單和復雜的搜索和處理模式的方法,下面這篇文章主要給大家介紹了關于Oracle數(shù)據(jù)庫中使用正則表達式的超詳細教程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-08-08Linux中Oracle的sqlplus下退格和Del鍵無效的問題解決
這篇文章主要介紹了Linux中Oracle的sqlplus下退格和Del鍵無效的問題解決,修復使用時在命令行界面下產(chǎn)生亂碼的問題,需要的朋友可以參考下2015-12-12