1. 程式人生 > >資料庫筆試題及答案

資料庫筆試題及答案

以下為某公司的資料庫筆試題及個人整理的答案,小夥伴們有更好的答案歡迎指教!

資料表

Student(S#,Sname) 10000條記錄
Cource(C#,Cname,T#)9條記錄
SC(S#,C#,Score)89991條記錄
Teacher(T#,Tname) 3條記錄

題目並沒有指定表中有多少資料,記錄是我自己模擬的。

試題

1、選擇課程001的成績大於課程002的成績的學生ID;

SELECT sc1.`S#` from sc sc1 WHERE sc1.`C#`=1 AND 
EXISTS
(SELECT sc1.`S#` from sc sc2 WHERE sc2.`C#`=2 and sc1.`S#`=sc2.`S#` AND sc1.Score > sc2.Score
)
上面的用法效能太差了。


[SQL] SELECT sc1.`S#` from sc sc1, sc sc2 WHERE sc1.`S#`=sc2.`S#` and sc1.`C#`=1 AND sc2.`C#`=2 AND sc1.Score > sc2.Score
時間: 14.913ms
2、查詢所有平均成績大於60分的學生ID,學生姓名;
select s.`S#`,Sname,avg(sc.Score) avgc from Student s,SC sc where s.`S#`=sc.`S#` GROUP BY sc.`S#` HAVING(avgc > 60)

[SQL] select s.id,Sname,avg(sc.Score) avgc from Student1 s,SC sc where s.`id`=sc.`S#` GROUP BY sc.`S#` HAVING(avgc > 60)
時間: 0.227ms
3、查詢所有學生的學生ID,學生姓名,總科目數,總成績;

select s.`S#`, s.Sname, count(*),sum(sc.Score) from Student s ,SC sc where s.`S#`=sc.`S#` GROUP BY sc.`S#`

[SQL] select s.`id`, s.Sname, count(*),sum(sc.Score) from Student1 s ,SC sc where s.`id`=sc.`S#` GROUP BY sc.`S#`
時間: 0.264ms
4、查詢沒有上過“志明”老師課的學生ID,學生姓名;
select * from Student where `S#` NOT in (select `S#` from SC where `C#` in (select `C#` from Cource where `T#` in ( select `T#` from Teacher where Tname LIKE '%志明%' )))

[SQL] select * from Student1 where `id` NOT in (select `S#` from SC where `C#` in (select `C#` from Cource where `T#` in ( select `T#` from Teacher where Tname LIKE '%志明%' )))
時間: 0.156ms
5、母表A中有3000萬條資料(分庫分表了),子表B中有5萬條資料,現在要更新A表中的某個欄位值為B表的某個欄位值,條件是A表的某欄位值與B表的某欄位值匹配;如何實現,如何優化效率?
update A set A.a=B.a from A ,B where A.id=B.id
具體怎麼優化,能想到的就是,where 欄位加索引,
A由於是分庫分表,可能就需要不只一條sql,每個庫,每個表,都是寫條類似的sql

我的環境

作業系統:Windows 7 64位

CPU:I3 2.4G

記憶體:6G

MySQL:5.6.19 InnoDB


===========文件資訊============ 
版權宣告:非商用自由轉載-保持署名-註明出處 
署名(BY) :testcs_dn(微wx笑) 
文章出處:[無知人生,記錄點滴](http://blog.csdn.net/testcs_dn)