mysql學習筆記 集合運算並交差,其他

2022-02-16 00:56:20 字數 2604 閱讀 6238

總結一下今天資料庫課堂上的所學2333

1.在sql語言實踐中,集合運算的實現方法,推薦順序如下:

並運算:union

交運算:in, exists, intersect(很多dbms基本上不支援ing qwq)-------->"同時"

差運算:not in, not exists, except, minus

還有一種運算我在這也寫一寫哉2333,除法運算:not exists ... not exists...

2.像老師提的那樣要學會盡量一題多做,擴充套件思維!

看這道題:查詢選修了資料庫課程的學生學號和姓名

分析:可以用連線運算;也可以來2層巢狀查詢,3層巢狀查詢搞一波;也可以用存在量詞exists實現查詢之

select sc.sno,sname

from student,c,sc

where student.sno=sc.sno and sc.cno=c.cno and cname='資料庫';

select sno,sname from student

where sno in (select sno from sc

where cno in (select cno from c where cname='資料庫'));

select sno,sname from student

where sno in (select sno from sc,c where sc.cno=c.cno and cname='資料庫');

/*exists實現*/

select sno,sname from student

where exists (select * from sc,c where sc.cno=c.cno and sc.sno=student.sno and cname='資料庫');

/*盡量能去拓展幾種寫法,從計算效率來說,連線查詢效率大*/

3.討論一下集合交運算

用in實現之:

/*查詢同時選擇了1號課程和2號課程的學生的學號*/

select sno

from sc

where cno='1'

and sno in( /*用in間接實現交運算*/

select sno

from sc

where cno='2');

/*查詢同時選擇了1號課程和2號課程的學生的學號*/

select sno

from sc as a

where cno='1'

and exists (/*exists交運算*/

select *

from sc as b

where cno='2'

and b.sno=a.sno);

/*exists代表存在量詞,it just returns true or false*/

差運算也是很相似的,接下來:求選修了1號課程但沒有選修2號課程的學生學號

用 not in 實現:

/*查詢選擇了1號課程但沒有選擇2號課程的學生的學號*/

select sno

from sc

where cno='1'

and sno not in( /*用not in間接實現差運算*/

select sno

from sc

where cno='2');

差運算我自己還是覺得拿not in來用香呀2333,當然not exists實現也要去比較熟練的掌握之,2333!

用 not exists實現:

/*

not exists實現差運算

*//*

查詢選擇了1號課程但沒有選擇2號課程的學生的學號

*/select

snofrom sc as

awhere cno='1

'and

notexists

(select

*from sc as

bwhere cno='2

'and b.sno=

a.sno);

select

*from sc;

3.用nort exists   not exists實現除運算,解決集合包含這樣的查詢,今天上午寫的一些**搬過來拉拉啦2333

/*查詢選修1號學生選修的所有課程的學生學號*/

select distinct sno from sc as a where not exists

(select * from sc as b where b.sno='1' and not exists

(select * from sc as c where c.sno=a.sno and c.cno=b.cno));

/*選了所有課程的學生學號*/

select sno from student where not exists

(select * from c where not exists

(select * from sc where sno=student.sno and cno=c.cno));

集合運算 並 交 差運算

已知所給集合 a 和 b,求 a 與 b 的並集 c c a b 已知所給集合 a 和 b,求 a 與 b 的交集 c c a b 已知所給集合 a 和 b,求 a 與 b 的差集 c c a b 離散數學中的簡單的集合運算,由c語言編寫,思路非常簡單,如下 include intinterecti...

集合的並交叉運算

實驗 include include include include using namespace std void in set a void out set a void jiao set a,set b,set c void bing set a,set b,set c it b.begin...

資料結構 求集合(單鏈表)的並 交和差運算

求集合 用單鏈表表示 的並 交和差運算 問題描述 該演算法的設計,要求執行結果如下所示 包含三種排序 集合的運算如下 原 集 合a c a e h 原 集 合b f h b g d a 有序集合a a c e h 有序集合b a b d f g h 集合的並c a b c d e f g h 集合的...