窺探SQL 4 集合運算

2021-10-12 14:48:03 字數 1584 閱讀 8865

2.鏈結(join)

集合,在資料庫領域表示記錄的集合. 具體來說,表、檢視和查詢的執行結果都是記錄的集合, 其中的元素為表或者查詢結果中的每一行.

在標準 sql 中, 分別對檢索結果使用 union, intersect, except 來將檢索結果進行並,交和差運算, 像union,intersect, except這種用來進行集合運算的運算子稱為集合運算子.

union可以用於多個表的並集運算,且union 等集合運算子通常都會除去重複的記錄.此外,union也可以用於對同一張表的並集運算。此時,就涉及到union與or謂詞的關係問題。

對於同乙個表的兩個不同的篩選結果集, 使用 union 對兩個結果集取並集, 和把兩個子查詢的篩選條件用 or 謂詞連線, 會得到相同的結果, 但倘若要將兩個不同的表中的結果合併在一起, 就不得不使用 union 了.可以對比參考一下兩段**。

-- 使用 or 謂詞

select *

from product

where sale_price / purchase_price < 1.3

or sale_price / purchase_price is null;

-- 使用 union

select *

from product

where sale_price / purchase_price < 1.3

union

select *

from product

where sale_price / purchase_price is null;

sql 語句的 union 會對兩個查詢的結果集進行合併和去重, 這種去重不僅會去掉兩個結果集相互重複的, 還會去掉乙個結果集中的重複行. 但在實踐中有時候需要需要不去重的並集, 在 union 的結果中保留重複行的語法其實非常簡單,只需要在 union 後面新增 all 關鍵字就可以了.

select * 

from product

where sale_price < 1000

union all

select *

from product

where sale_price > 1.5 * purchase_price

數學定義中,集合的乙個顯著的特徵就是集合中的元素都是互異的。

而在資料庫中,若把資料庫中的表看作是集合, 實際上存在一些問題的: 不論是有意的設計或無意的過失, 很多資料庫中的表包含了重複的行.

bag 是和 set 類似的一種數學結構, 不一樣的地方在於: bag 裡面允許存在重複元素, 如果同乙個元素被加入多次, 則袋子裡就有多個該元素.

是否允許元素重複導致了 set 和 bag 的並交差等運算都存在一些區別. 以 bag 的交為例, 由於 bag 允許元素重複出現, 對於兩個 bag, 他們的並運算會按照:1.該元素是否至少在乙個 bag 裡出現過, 2.該元素在兩個 bag 中的最大出現次數這兩個方面來進行計算. 因此對於 a = , b = 兩個 bag, 它們的並就等於 .

待更新

《SQL基礎教程》筆記(4) 集合運算

sql集合運算主要包括兩個方面 表的加法 union select shohin id,shohin mei from shohin union select shohin id,shohin mei from shohin2 集合運算的注意事項 注意 集合運算子會除去重複的記錄。但是使用all選項...

SQL筆記(四) 集合運算

交運算差運算 sql作用的關係上的union intersect 和except運算對應數學集合論中的 運算 select course id from section where semester fall andyear 2009 select course id from section wh...

4 集合與有序集合

特性 無序 隨機操作 唯一性,確定性 zrevrange key start stop 將集合降序排列,取在start,stop 之間的元素 zrangebyscore key min max withscore limit offset n 將score在 min,max 之間的元素跳過offse...