關聯式資料庫的起源起源於數學中的集合概念.所以集合與集合之間,也同樣繼承了數學集合之間的運算.而對於在關聯式資料庫中,常常用於兩個資料集中並沒有直接的關聯式資料庫中的「關係」,比如外來鍵.但兩個資料集會有間接的關係,比如兩屆比賽,參加比賽人員集合之間會有間接關係.
在t-sql中,關係運算實際上可以分為四類,首先看我們舉例子用的表:
這裡的例子表分別為兩個不同會議參加的人員記錄,分別為meeting1和meeting2,如下:
關係運算的具體可以分為以下四類:
1.a∩b,既是所求資料集既在a中,又在b中
在例項表中,實際的例子為既參加第乙個會議,又參加第二個會議人的集合,如下圖:
2.a∪b,既所求資料在資料集a中,或在資料集b中
在例項表中,實際的例子為參加第乙個會議,或參加第二個會議人的集合,如下圖:
3.a-b,既所求資料在資料集a中,不在資料集b中
在例項表中,實際的例子為參加了第乙個會議,同時沒有參加第二個會議的人的集合,如下圖:
4.b-a,既所求資料在資料集b中,不在資料集a中
這個其實和上面第三種情況沒有本質區別,只是順序顛倒了一下,如下圖:
在t-sql中,參與資料集運算的兩個資料集可以來自任何返回資料集的表示式.比如,一張表,一張表的子集,多張表,臨時表變數,虛擬列,甚至是乙個scalar值
並不是所有的資料集都可以做運算。就像乙個蘋果+乙個鴨梨不能等於2一樣,在t-sql中,資料集之間的運算需要符合下面3個條件:
1.兩個資料集之間必須有相同數量的列(column)
2.兩個資料集之間列出現的次序必須一致
3.兩個資料集之間每乙個對應的列的資料型別必須匹配
1.a∪b 使用union實現
t-sql中提供了union來實現a∪b的運算,實際上union有兩個版本,分別為:
union
union表示了a∪b的關係,當遇到兩個資料集中相同的行時,保留唯一乙個:
union all同樣實現了a∪b的邏輯,但與union不同的是,當遇到兩個資料集中重複的行時,全部保留:
2.a∩b,使用intersect實現
t-sql提供了intersect關鍵字來實現a∩b的關係:
3.a-b,使用except實現
t-sql提供了except關鍵字來實現a-b的關係:
如果沒有為資料列指定別名,則資料列的名稱按照出現在第乙個集合對應的列名算:
做union後:
如若我們想自定義列名,則需要為資料集運算**現在第一位的資料集指定別名:
對運算後的結果進行排序
對運算後的結果進行排序是一件非常簡單的事情,只需要在運算的最後加上order by子句,但是這裡一定要注意:
1.order by是對整個運算後的結果排序,並不是對單個資料集
2.order by後面排序的欄位名稱是第乙個資料集的欄位名或者別名
分類:
sql
資料集之間的運算
關聯式資料庫的起源起源於數學中的集合概念.所以集合與集合之間,也同樣繼承了數學集合之間的運算.而對於在關聯式資料庫中,常常用於兩個資料集中並沒有直接的關聯式資料庫中的 關係 比如外來鍵.但兩個資料集會有間接的關係,比如兩屆比賽,參加比賽人員集合之間會有間接關係.在t sql中,關係運算實際上可以分為...
T SQL查詢高階 資料集之間的運算
概述 關聯式資料庫的起源起源於數學中的集合概念.所以集合與集合之間,也同樣繼承了數學集合之間的運算.而對於在關聯式資料庫中,常常用於兩個資料集中並沒有直接的關聯式資料庫中的 關係 比如外來鍵.但兩個資料集會有間接的關係,比如兩屆比賽,參加比賽人員集合之間會有間接關係.資料集運算的種類 在t sql中...
dataframe資料之間求補集
python的pandas庫,對於dataframe資料,有merge命令可以完成dataframe資料之間的求取交集並集等命令。若存在df1與df2 他們的交集df3 pd.merge df1,df2,on 但是又想通過df3求df3與df1的補集時發現沒有該命令。求df3 子集 與df1補集 x...