轉貼 Oracle集合的用法

2021-06-10 11:31:23 字數 1858 閱讀 8430

**itpub(dingjun):

簡表:operator

returns

content

union

由每個查詢選擇的所有不重複的行 並集

不包含重複值,預設按第

1個查詢的第

1列公升序排列

union all

由每個查詢選擇的所有的行,包括所有重複的行

包括所有重複的行 完全並集包含重複值,不排序

intersect

由每個查詢選擇的所有不重複的相交行

交集,不包含重複行,按第

1個查詢的第

1列公升序排列

minus

在第乙個查詢中,不在後面查詢中的行

不包含重複行,按第

1個查詢的第

1列公升序排列

union(聯合)運算:

union運算返回所有由任一查詢選擇的行。用union運算從多表返回所有行,但除去任何重複的行。

原則:

全聯合(union all)運算:

用全聯合運算從多個查詢中返回所有行。

原則:

union all效率一般比union高。union all內部不做排序工作,也不做剔除重複行工作,而union則做這個工作。

使用:

select statementunion | unionall select statement…..;

用相交運算返回多個查詢中所有的公共行。 無重複行。

原則:使用:

select statementintersectselect statement….;

相減運算,求差集。無重複行。

用相減運算返回由第乙個查詢返回的行,那些行不出現在第二個查詢中 (第一select語句減第二個select語句)。

原則:使用:

select statementminusselect statement….;

可以用於子查詢。

除了union all,重複行自動被清除

在結果中的列名是第乙個查詢中出現的列名

除了union all,預設情況下按公升序順序輸出。除union all外,其他的都做排序工作,而且都剔除重複結果。

所有的集合運算與等號的優先順序相同,如果sql語句包含多個集合運算並且沒有圓括號明確地指定另乙個順序,oracle伺服器將以從左到右的順序計算。你應該使用圓括號來明確地指定帶另外的集合運算的intersect (相交)運算查詢中的賦值順序。

集合操作是對多個查詢結果進行並集,差集,交集的操作,都不忽略null行。

除了union all 預設不做排序和剔除重複行的操作外,union,minus,intersect都預設按第1個查詢結果的第1列進行公升序排列,並且不包含重複行。對集合運算的結果要排序,只能在最後乙個select 後面排序,是對整個集合操作進行排序,而不是對最後乙個select 進行排序,排序選擇的列必須是第1個select 中出現的列,如果有別名,則使用別名,不能選用沒有查詢出來的列(這和普通的order by不一樣,普通的order by可以選用不在select中的列排序),當然可以按位置指定order by,比如order by 1 desc,就是按第1列降序。在業務要求允許的情況下,能使用

union all

就不要使用

union

,因為unionall

不做排序剔重操作,使用

union all

效率方面要好點。

MsFlexGrid用法 轉貼

option explicit dim cn as new adodb.connection dim rs as new adodb.recordset dim str as string dim strsql as string str provider sqlserver.1 server lo...

oracle的日期計算(轉貼)

sysdate 為資料庫伺服器的當前系統時間。to char 是將日期型轉為字元型的函式。to date 是將字元型轉為日期型的函式,一般使用 yyyy mm dd hh24 mi ss格式,當沒有指定時間部分時,則預設時間為 00 00 00 dual 表為sys使用者的表,這個表僅有一條記錄,可...

轉貼 Oracle 的入門心得

oracle的體系太龐大了,對於初學者來說,難免會有些無從下手的感覺,什麼都想學,結果什麼都學不好,所以把學習經驗共享一下,希望讓剛剛入門的人對oracle有乙個總體的認識,少走一些彎路。一 定位 oracle分兩大塊,一塊是開發,一塊是管理。開發主要是寫寫儲存過程 觸發器什麼的,還有就是用orac...