Oracle minus用法詳解及應用例項
Oracle minus用法
“minus”直接翻譯為中文是“減”的意思,在Oracle中也是用來做減法操作的,只不過它不是傳統意義上對數字的減法,而是對查詢結果集的減法。A minus B
就意味著將結果集A去除結果集B中所包含的所有記錄後的結果,即在A中存在,而在B中不存在的記錄。其演算法跟Java中的Collection
的removeAll()
類似,即A minus B
將只去除A跟B的交集部分,對於B中存在而A中不存在的記錄不會做任何操作,也不會丟擲異常。
Oracle的minus
是按列進行比較的,所以A能夠minus B的前提條件是結果集A和結果集B需要有相同的列數,且相同列索引的列具有相同的資料型別。此外,Oracle會對minus
後的結果集進行去重,即如果A中原本多條相同的記錄數在進行A minus B
後將會只剩一條對應的記錄,具體情況請看下面的示例。
下面我們來看一個minus
實際應用的示例,假設我們有一張使用者表t_user
,其中有如下記錄資料:
id | no | name | age | level_no |
---|---|---|---|---|
1 | 1 | a | 25 | 1 |
2 | 2 | b | 30 | 2 |
3 | 3 | c | 35 | 3 |
4 | 4 | d | 45 | 1 |
5 | 5 | e | 30 | 2 |
6 | 6 | f | 35 | 3 |
7 | 7 | g | 25 | 1 |
8 | 8 | h | 35 | 2 |
9 | 9 | i | 20 | 3 |
10 | 10 | j | 25 | 1 |
那麼:
(1)
select id from t_user where id<6 minus select id from t_user where id between 3 and 7
的結果將為:
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
的結果為:
age | level_no |
---|---|
25 | 1 |
30 | 2 |
45 | 1 |
看到這樣的結果,可能你會覺得有點奇怪,為何會是這樣呢?我們來分析一下。首先,“select age,level_no from t_user where id<8
”的結果將是這樣的:
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
”的結果將是這樣的:
age | level_no |
---|---|
35 | 3 |
35 | 3 |
20 | 3 |
然後,直接A minus B
之後結果應當是:
age | level_no |
---|---|
25 | 1 |
30 | 2 |
45 | 1 |
30 | 2 |
25 | 1 |
這個時候,我們可以看到結果集中存在重複的記錄,進行去重後就得到了上述的實際結果。其實這也很好理解,因為minus
的作用就是找出在A中存在,而在B中不存在的記錄。
上述示例都是針對於單表的,很顯然,使用minus
進行單表操作是不具備優勢的,其通常用於找出A表中的某些欄位在B表中不存在對應記錄的情況。比如我們擁有另外一個表t_user2
,其擁有和t_user
表一樣的表結構,那麼如下語句可以找出除id外,在t_user
表中存在,而在t_user2
表中不存在的記錄。
select no,name,age,level_no from t_user minus select no,name,age,level_no from t_user2;
相關文章
- EventBus詳解及簡單例項單例
- WebSocket 簡介及應用例項Web
- redis應用場景及例項Redis
- PHP 觀察者模式應用場景例項詳解PHP模式
- 合成複用原則詳解篇(附圖解及原始碼例項)圖解原始碼
- axios模擬GET請求例項及詳解iOS
- dd應用例項
- 元件例項 $el 詳解元件
- Linux與windows檔案傳輸詳解及例項LinuxWindows
- MySQL 序列 AUTO_INCREMENT詳解及例項程式碼MySqlREM
- VBox和HBox的用法及用例
- Cookie、localStorage 和 sessionStorage 的區別及應用例項CookieSession
- ”innerHTML“的應用例項HTML
- 歸併排序詳解及應用排序
- MySQL資料庫的事務處理用法與例項程式碼詳解MySql資料庫
- RDD用法與例項(五):glom的用法
- CSS例項詳解:Flex佈局CSSFlex
- Spring事務管理(詳解+例項)Spring
- Web應用程式測試的工具selenium用法詳解Web
- ADB 操作命令詳解及用法大全
- 一次RAC例項驅逐詳細分析及解決方案
- ubuntu ftp 伺服器搭建及vsftpd.conf配置例項詳解UbuntuFTP伺服器
- Linux IO模式及 select、poll、epoll詳解(含部分例項原始碼)Linux模式原始碼
- 4.1. Oracle例項Oracle
- Oracle Far Sync例項Oracle
- 機器視覺應用例項視覺
- PHP7 新增功能詳解(例項)PHP
- 50個典型電路例項詳解
- MySQL共享鎖:使用與例項詳解MySql
- UML 用例圖詳解
- 【PSU】Oracle打PSU及解除安裝PSU(單例項)Oracle單例
- oracle資料庫與oracle例項Oracle資料庫
- [Python 基礎] Python 例項方法、靜態方法和類方法詳解 (包含區別和用法)Python
- oracle 例項表查詢Oracle
- eMarketer:各行業VR例項應用分析行業VR
- 正規表示式分組例項詳解
- Python程式和執行緒例項詳解Python執行緒
- JS中排序的用法和例項JS排序