Oracle中對兩個資料表交集的查詢

2021-03-31 08:56:28 字數 1266 閱讀 3812

oracle關係型資料庫管理系統是世界上流行的關聯式資料庫,它是乙個極其強大、靈活和複雜的系統,據說,在使用oracle時應有這樣的思想,那就是在sql中幾乎可以實現任何一種想法。

下面向大家介紹使用sql查兩個oracle資料表查詢的相同資料的方法,筆者感到這兩種方法執行效率高、使用方便。

第一種方法:利用操作符intersect

intersect操作符用來合併兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結果的交集,前提是兩個查詢的列的數量和資料型別必須完全相同。

舉例說明:

表a的資料結構:

中文名稱

欄位名型別

長度學號

codec 4

姓名 namec 8

表b的資料結構:

中文名稱

欄位名

型別 長度

學號 student_code c 4

姓名 student_namec 8

分數 scoren 3

表a的資料為:

('1101 ','韓甲'),('1102 ','丁乙')

表b的資料為:

('1101 ','韓甲',99),('1102 ','丁乙',89),('1103 ','徐靜',94)

在oracle中執行以下查詢,圖1顯示了這個查詢的結果:

sql>select code, name from a

intersect

select student_code,student_name from b;

圖1使用intersect操作符查詢的結果

第二種方法: in子句

in子句可以在子查詢中為where子句計算所得的值建立乙個列表。這種方法與前一種方法有所不同的是,前一種方法比較多列但只使用乙個intersect就行了,而乙個in子句用來比較兩個子查詢的一列,比較幾列就要使用幾個in子句。下面舉例說明如何取得兩個查詢的交集。

仍以a和b兩張資料表為例,在oracle中執行以下查詢,圖2顯示了這個查詢的結果:

sql>select code,name from a

where a.code in

(select student_code from b)

and a.name in

(select student_name from b)

order by a.code;

查詢結果如圖2所示。

圖2使用in子句查詢的結果

以上為筆者使用oracle7.3的體會,如有不當之處,請不吝賜教。

Oracle中對兩個資料表交集的查詢

oracle關係型資料庫管理系統是世界上流行的關聯式資料庫,它是乙個極其強大 靈活和複雜的系統,據說,在使用oracle時應有這樣的思想,那就是在sql中幾乎可以實現任何一種想法。intersect操作符用來合併兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結果的交集,前提是兩個查詢的列的數量...

兩個資料表同步的觸發器

關鍵字 如何自增字段中插入指定值 sqlserver 批量插入記錄時,對有標識列的字段要設定 set identity insert 表名 on,然後再執行插入記錄操作 插入完畢後恢復為 off 設定 格式 set identity insert 表名 on set identity insert ...

Oracle 取兩個表中資料的交集並集差異集合

關鍵字 oracle 取兩個表中資料的交集intersect oracle 作為乙個大型的關聯式資料庫,日常應用中往往需要提取兩個表的交集資料 例如現有如下表,要求找出工資2500 不含2500 以上並且是男性 m 的員工編號,那麼就要利用這兩個表的關係做乙個交集了 employee code na...