![]() |
||
Advance Member
![]() ![]() 加入日期: Apr 2004
文章: 336
|
SQL 的問題
各位大大好,小弟因為準備考試要考到DB
而小弟又非資訊類的本科系,所以佔用PCDVD資源來發問 請各位大大幫小弟一個忙 ----------------------- 題目是 設一學校資料庫有以下之關連(relations),Student{S#,S_name,S_address}、Take{S#,C#,Grade}、Course{C#,C_name},Student和Course分別記錄的是學生和課程的資料,Take記錄的是每個學生(S#)修了哪些課程(C#),以及分別在這些課程所得到成績(Grade)。設一個學生可以同時修多門課程,且一個課程可以同時被多個學生修,試問:使用SQL寫出查詢”所有修了5門(含)以上課程的學生名字”。 小弟目前想法是 SELECT S_name FROM Student,Take WHERE Take.S# = = Student.S# GROUP BY Student.S# HAVING COUNT(*)>5 但是這樣的表達方法沒有辦法蠻族題目要列出含第五門課程的學生 所以想請教版上各位大大,可以給小第一點意見 感恩的心,感謝有您
__________________
![]() |
|||||||
![]() |
![]() |
Golden Member
![]() ![]() ![]() ![]() 加入日期: Aug 2004 您的住址: 北極星
文章: 2,601
|
嗯...也許是我想得簡單了
我是覺得 直接從Take表格中 找出同一S#重覆五筆以上者 這樣就可以了 因為出現在Take中的S# 表現該學生有修課 出現愈多次 修愈多課 有幾次 就是修了幾堂課 再找出該S#代表的學生姓名即可 至於你的SQL 最後改成HAVING COUNT(*)>4 應該就可以了吧 大於4 就包含5了 不過....不是也可以用>=嗎 為什麼不用呢? |
||
![]() |
![]() |
Basic Member
加入日期: Oct 2003 您的住址: 居無定所
文章: 10
|
最後面的Having 改成>4應該就可以了吧...
代表修課大於四門以上... 或者 >=5 即代表修課數達五門(包含)以上的學生... |
![]() |
![]() |
Power Member
![]() ![]() 加入日期: Jan 2001 您的住址: Taipei
文章: 503
|
用>4應該會比較好
>4只需一道判斷,>=5需要2道判斷
__________________
![]() |
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Apr 2004
文章: 336
|
引用:
最後改成HAVING COUNT(*)>4,應該就可以了吧 大於4 就包含5了=>大大這句話真是一與驚醒夢中的小弟,小弟腦袋轉不過來@@ 大大所提的想法是直接重Relationship去篩選資料 因為小弟學到的都是從Entity利用子查詢篩選 壓根沒想過這樣做法,多謝大大提供另外的想法
__________________
![]() |
|
![]() |
![]() |
Amateur Member
![]() 加入日期: Jul 2005
文章: 36
|
select S_name from student where s# in (select s# distinct from Take group by s# having count(s#) > 4)
__________________
讓我獨中大樂透頭獎 |
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Apr 2004
文章: 336
|
引用:
>4小弟現在懂了,因為不知道SQL有>=的符號 (對沒有RUN過程式的小弟知道東西太少) 小弟看到>=5突然有一種疑問,如果小弟沒記錯 在程式中 = = 是代表等於的意思 = 不適代表指定變數的定義 那用 >=5可以行得通嗎? 小弟謝謝大大的說明,感恩
__________________
![]() |
|
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Apr 2004
文章: 336
|
引用:
大大要說的意思是應該是像資料結構中的Tree 去做編碼、解碼時,用0電腦判斷比較快 用1電腦判斷會比較慢(以上是課堂上老師說的) 我想大大應該是這樣的意思 多謝大大提供這樣的想法,感恩
__________________
![]() |
|
![]() |
![]() |
Power Member
![]() ![]() 加入日期: Jan 2001 您的住址: Taipei
文章: 503
|
引用:
基本上不建議使用IN子句,以SQL Server為例,這樣下SQL Query將無法套用Index
__________________
![]() |
|
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Apr 2004
文章: 336
|
引用:
版上真是臥虎藏龍,小弟還在想要怎樣將2樓大大的想法改成程式 大大就已經將程式寫出來,看來小弟這方面還有很大的進步空間 多謝大大給小弟對於該題另外解法,感恩
__________________
![]() |
|
![]() |
![]() |