[考題] 101高考 SQL

看板Examination (國家考試)作者 (zalman)時間12年前 (2014/05/15 01:39), 編輯推噓2(2010)
留言12則, 5人參與, 最新討論串1/1
小弟SQL觀念薄弱 作了很多題目都覺得似是而非...有點慌 請問一下(二)作答是否正確? 是否有更有效率的作法? (三)沒有頭緒...請問此小題該如何作答 謝謝 =======================101高考二級============================= 二、考慮以下的討論版資料庫綱目(Database schema): Member(mId, name, bDate, gender) //會員編號,姓名,生日,性別 Article(mId, aId, title, content, postDate) //會員編號,文章編號,標題,內容,張貼日期 Reply(mId, aId, rTime, content, responder) //會員編號,文章編號,回覆日期時間,回覆內容,回覆者 若我們有以下的SQL敘述: SELECT mId, name FROM Member AS M WHERE gender = ‘M’ AND EXISTS (SELECT * FROM Article AS A WHERE mId = M.mId AND (mId, aId) IN (SELECT DISTINCT mId, aId FROM Reply WHERE mId = A.mId AND aId = A.aId GROUP BY mId, aId HAVING COUNT(*) > 10)); (二)以上查詢句的執行效率可能不佳,請指出造成其效率不佳的語法,並改寫成一個效率 較佳的敘述。(10分) (三)針對你所改寫的查詢句,若想進一步提升其執行效率,請問可以建置那些索引( Index)?請寫出建置這些索引的SQL敘述並說明原因。(10分) ============================================================================ 擬作答: (二) SELECT mId, name FROM Member AS M , Article AS A WHERE gender = ‘M’ AND A.mId = M.mId AND (mId, aId) IN (SELECT DISTINCT mId, aId FROM Reply WHERE mId = A.mId AND aId = A.aId GROUP BY mId, aId HAVING COUNT(*) > 10 ) ); -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.151.104 ※ 文章網址: http://www.ptt.cc/bbs/Examination/M.1400089170.A.E0E.html

05/15 10:17, , 1F
第三題我會把主索引 次索引 叢集索引通通想上去 然後
05/15 10:17, 1F

05/15 10:19, , 2F
寫出CREATE INDEX [index name] ON Reply(mId,aId)
05/15 10:19, 2F

05/15 10:19, , 3F
不太確定 可以討論看看
05/15 10:19, 3F

05/15 21:14, , 4F
看你的擬答,發現你沒把題目看懂,再斟酌斟酌。
05/15 21:14, 4F

05/15 21:38, , 5F
給個建議好了 distinct拿掉 另外 子查詢where拿掉
05/15 21:38, 5F

05/15 21:39, , 6F
同樓上所說 你不要看錯的寫法,看題目的要求 你會怎麼寫
05/15 21:39, 6F

05/15 22:41, , 7F
請問還有更有效率的寫法嗎?
05/15 22:41, 7F

05/15 23:48, , 8F
擬作答的WHERE那行是我複製貼上漏刪的....
05/15 23:48, 8F

05/16 01:18, , 9F
把distinct 拿掉即可
05/16 01:18, 9F

05/16 01:19, , 10F
2種做法啦 你的是合併外面的exist
05/16 01:19, 10F

05/16 01:20, , 11F
也有人是合併裡面的in 都是用合併取代巢狀
05/16 01:20, 11F

05/16 01:20, , 12F
所以應該都對吧
05/16 01:20, 12F
文章代碼(AID): #1JSwfIuE (Examination)
文章代碼(AID): #1JSwfIuE (Examination)