總結一下今天資料庫課堂上的所學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,snamefrom 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號課程的學生的學號*/差運算也是很相似的,接下來:求選修了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*/
用 not in 實現:
/*查詢選擇了1號課程但沒有選擇2號課程的學生的學號*/差運算我自己還是覺得拿not in來用香呀2333,當然not exists實現也要去比較熟練的掌握之,2333!select sno
from sc
where cno='1'
and sno not in( /*用not in間接實現差運算*/
select sno
from sc
where cno='2');
用 not exists實現:
/*3.用nort exists not exists實現除運算,解決集合包含這樣的查詢,今天上午寫的一些**搬過來拉拉啦2333not 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;
/*查詢選修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 集合的...