[考題] 99高考資處資料庫

看板Examination (國家考試)作者 (allen)時間13年前 (2013/06/25 21:38), 編輯推噓8(8010)
留言18則, 7人參與, 最新討論串1/1
想問一下99年資料庫第三大題第一小題 手邊的考古題有給答案,但是我看不懂雙重Not exists Select Sname From Student Where not exists (Select * From Teacher Where not exists (Select * From Take Where Student.Sid = Take.Sid AND Take.Tid = Teacher.Tid AND Tname = "Harison Ford" 我不懂的點是如果這個老師有開兩門課 只有修一門課的學生不是也會被選到嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.225.96.159

06/25 21:51, , 1F
這是在考FORALL的觀念
06/25 21:51, 1F

06/25 21:59, , 2F
假設這個老師開兩門課 你要兩門課都有修才會被選中!!
06/25 21:59, 2F

06/25 21:59, , 3F
只修一門課的人不會列出
06/25 21:59, 3F

06/25 22:06, , 4F
是說在最裡面這層(Take),如果老師開兩門課,只選一門
06/25 22:06, 4F

06/25 22:06, , 5F
Select * 不會Return東西出去?
06/25 22:06, 5F

06/25 22:08, , 6F
Join的概念,內層Select會Return
06/25 22:08, 6F

06/25 22:09, , 7F
Student X Teacher - Take的資料
06/25 22:09, 7F
不管修一門還是兩門課的人 在Select * From Take Where Student.Sid = Take.Sid AND Take.Tid = Teacher.Tid AND Tname = "Harison Ford" 都會被選到嗎? ※ 編輯: allen7812 來自: 36.225.96.159 (06/25 22:11)

06/25 22:17, , 8F
是的,都會
06/25 22:17, 8F

06/25 22:20, , 9F
那可以請問這兩種情況的人,在外面的兩層如何被分辨的?
06/25 22:20, 9F

06/25 22:24, , 10F
內層的not exists會選出修此老師一堂課或沒修此老師課
06/25 22:24, 10F

06/25 22:25, , 11F
的學生,外層的not exists又選出不屬於這些學生的學生
06/25 22:25, 11F

06/25 22:26, , 12F
也就是修兩堂課的學生囉
06/25 22:26, 12F

06/25 22:33, , 13F
講那麼多他不懂,這個是除法的寫法這樣你懂了吧
06/25 22:33, 13F

06/25 23:50, , 14F
關鍵在於你要先把所有表都卡式積起來
06/25 23:50, 14F

06/25 23:51, , 15F
然後依照條件篩選
06/25 23:51, 15F

06/25 23:52, , 16F
SQL就是這點不好 join這麼多效能就差了...
06/25 23:52, 16F

06/26 01:28, , 17F
推malowda 代表所有條件都要成立的除法 算固定寫法吧XD
06/26 01:28, 17F

06/26 14:08, , 18F
除非是真的超大型資料庫,不然查詢語法效能優劣都無感...
06/26 14:08, 18F
文章代碼(AID): #1HoPrHmI (Examination)
文章代碼(AID): #1HoPrHmI (Examination)