基於SQL求集合的交 並 補

2021-07-13 23:23:47 字數 1983 閱讀 3937

作者接下來將給出實驗用表以及具體的sql指令碼語句。

為進行實驗,作者在sql server資料庫下共建立了t1、t2兩張表,兩張表除主鍵id外均有個兩欄位stu_id和teacher_id。

t1表id

stu_id

teacher_id

1s0001

t012

s0002

t013

s0003

t024

s0004

t025

s0005

t036

s0002

t04

t2表id

stu_id

teacher_id

1s0002

t052

s0003

t033

s0006

t024

s0007

t045

s0005

t03

/*求補(差)集demo1,乙個字段*/

select a.stu_id from t1 a

except

select a.stu_id from t2 a;

/*和上面等效,可用於mysql*/

select a.stu_id from t1 a

where a.stu_id not

in(select a.stu_id from t2 a);

/*求補(差)集demo2,多個字段求差集*/

select a.stu_id,a.teacher_id from t1 a

where a.stu_id not

in(select a.stu_id from t2 a)

and a.teacher_id not

in(select a.teacher_id from t2 a);

/*求交集demo1,多個字段求交集*/

select a.stu_id,a.teacher_id from t1 a

intersect

select a.stu_id,a.teacher_id from t2 a;

/*和上面等效,可用於mysql*/

select a.stu_id,a.teacher_id from t1 a

where a.stu_id+a.teacher_id in

(select a.stu_id+a.teacher_id from t2 a);

/*求交集demo2*/

/*下面語句把交集中重複出現的去掉*/

select a.stu_id from t1 a

intersect

select a.stu_id from t2 a;

/*下面三個語句不會把重複的去掉,可使用distinct去重*/

select a.stu_id from t1 a

where a.stu_id in

(select a.stu_id from t2 a);

select a.stu_id from t1 a,t2 b

where a.stu_id=b.stu_id;

select a.stu_id from t1 a

where

exists

(select * from t2 b where a.stu_id=b.stu_id);

/*求並集demo*/

/*不會去重*/

select a.stu_id from t1 a

union

allselect a.stu_id from t2 a;

/*去重,mysql中可以在union後加distinct*/

select a.stu_id from t1 a

union

select a.stu_id from t2 a;

mysql交並補 集合交並補運算順序是什麼

我剛剛查完集合運算順序和邏輯運算順序,按照我的理解,順便來回答一下!我的提問 集合的交並補運算子沒有優先順序順序,運算順序完全由括號決定。邏輯與或非才有優先順序順序 邏輯非 邏輯與 邏輯或。以下內容來自維基百科 交換律a交b b交a a並b b並a 結合律 a交b 交 c a 交 b交c a並b 並...

list集合的交並補計算

list是我們常用的資料結構,存放資料,如何對資料進行交並補的計算。list的底層是動態陣列,作為比較基礎和常用的資料結構,在日常的工作中我們可能將不同的資料存放到了list中,根據業務要求,對兩個集合的資料進行交集 並集 差集,然後對它們進行後續的業務處理。怎麼辦?list的集合中已為我們提供好了...

單鏈表應有之求集合的交並集

1.題目要求 以字元的形式輸入集合a,集合b,求兩個集合的交集 並集。2.題目解析 因為涉及到的資料型別是字元型,所以尤其要主要空格對輸入資料的影響。可以使用 getchar 語句來 吃掉 空格。3.交並集演算法思路 1 並集 設乙個標誌位為0 建議往下看你就會明白為什麼設定乙個標誌位flag 0 ...