数据库常用面试题(SQL Server) (转载)
轉載地址為:http://www.cnblogs.com/finejob/articles/974900.html
題目1:
======
為管理崗位業務培訓信息,建立3個表:
S?(S#,SN,SD,SA)?? ?S#,SN,SD,SA?分別代表學號、學員姓名、所屬單位、學員年齡
C?(C#,CN?)??? C#,CN?分別代表課程編號、課程名稱
SC?(?S#,C#,G?)??? S#,C#,G?分別代表學號、所選修的課程編號、學習成績
1.?使用標準SQL嵌套語句查詢選修課程名稱為 稅收基礎 的學員學號和姓名
Where?[S#]?IN (?Select?[S#]?FROM?C,SC
?????????????????????????Where?C.[C#]=SC.[C#]?? AND?CN=N'稅收基礎')
2.?使用標準SQL嵌套語句查詢選修課程編號為’C2’的學員姓名和所屬單位
???Where?S.[S#]=SC.[S#]?AND?SC.[C#]='C2'
???????
3.?使用標準SQL嵌套語句查詢不選修課程編號為’C5’的學員姓名和所屬單位
Where?[S#]?NOT?IN?
?????????(?Select?[S#]?FROM?SC
?????????????? Where?[C#]='C5')
4.?使用標準SQL嵌套語句查詢選修全部課程的學員姓名和所屬單位
Select?SN,SD?FROM?S
Where?[S#]?IN??(?Select?[S#]?FROM?SC RIGHT?JOIN?
????????????????????????????????????????????????????????????????????????C??ON?SC.[C#]=C.[C#]?
???????????????????????????????????????????????????????????GROUP?BY?[S#]
????????????????????????????????????????????????????HAVING?COUNT(*)=COUNT([S#])?)
經過調試驗證的正確答案:
SELECT?SN,?SD?FROM?S?
???????????WHERE?S#?
??????????????????????????????IN?(SELECT?SC.S#?
??????????????????????????????????????????????????????FROM?SC?RIGHT?JOIN?C?
???????????????????????????????????????????????????????????????????ON?SC.C#?=?C.C#
??????????????????????????????????????????????????????GROUP?BY?SC.S#??--在結果集中以學生分組,分組后的?SC.C#選課數=C.C#課程數?即為全部課程
??????????????????????????????????????????????????????HAVING???COUNT(distinct(SC.C#))??--注意:一個學生同一門課程可能有多條成績記錄,需要distinct
??????????????????????????????????????????????????????????????????????????=?(?select?count(*)?from?C?)?--注意:HAVING條件不能用COUNT(distinct(SC.C#))?=?COUNT(distinct(C.C#)
???????????????????????????????????????)--子查詢獲得選修全部課程的學生學號
5.?查詢選修了課程的學員人數
6.?查詢選修課程超過5門的學員學號和所屬單位
Where?[S#]?IN?(? Select?[S#]?FROM?SC ???????
????????????????????????????????????? ????????????????????? GROUP?BY?[S#]
?????????????????????????????????????????????? ?HAVING? ?COUNT( DISTINCT?[C#] )? > 5?? )
題目2:
======
已知關系模式:
S?(SNO,SNAME)?學生關系。SNO?為學號,SNAME?為姓名
C?(CNO,CNAME,CTEACHER)?課程關系。CNO?為課程號,CNAME?為課程名,CTEACHER?為任課教師
SC(SNO,CNO,SCGRADE)?選課關系。SCGRADE?為成績
1.?找出沒有選修過“李明”老師講授課程的所有學生姓名?
Where?NOT?EXISTS?(?Select?*?FROM?SC,C
????????????????????????Where?SC.CNO=C.CNO
?????????????????????????????AND?CNAME='李明'
?????????????????????????????AND?SC.SNO=S.SNO)
2.?列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績
FROM? S ,? SC ,?
????????????????????????(Select?SNO FROM?SC
???????????????????????????????Where?SCGRADE<60
???????????????????????????????GROUP?BY?SNO
????????? ?????????????????????HAVING?COUNT(DISTINCT?CNO)>=2)??? A?
??????????? Where?S.SNO=A.SNO?AND?SC.SNO=A.SNO
GROUP?BY?S.SNO,S.SNAME
3.?列出既學過“1”號課程,又學過“2”號課程的所有學生姓名
FROM?S,
????????????????????????(Select?SC.SNO? FROM?SC,C
???????????????????????? Where?SC.CNO=C.CNO
????????????????????????????????????? AND?C.CNAME?IN('1','2')
???????????????????????? GROUP?BY?SNO
??????????????????????? HAVING?COUNT(DISTINCT?CNO)=2
??????????????? )SC?
??????????? Where?S.SNO=SC.SNO
4.?列出“1”號課成績比“2”號同學該門課成績高的所有學生的學號?????????
FROM?S,
?????????????????????????(Select?SC1.SNOFROM?SC?SC1,C?C1,SC?SC2,C?C2
???????????????????????????????????????????? Where?SC1.CNO=C1.CNO?AND?C1.NAME='1'
???????????????????????????????????????????????????????? AND?SC2.CNO=C2.CNO?AND?C2.NAME='2'
??????????????????????????????????????????????????????? AND?SC1.SCGRADE>SC2.SCGRADE? )? SC?
??????????Where?S.SNO=SC.SNO
5.?列出“1”號課成績比“2”號課成績高的所有學生的學號及其“1”號課和“2”號課的成績
??? ????????FROM?S,
?????????????????????????(? Select?SC1.SNO,[1號課成績]=SC1.SCGRADE,[2號課成績]=SC2.SCGRADE
?????????????????????????????????? FROM?SC?SC1,C?C1,SC?SC2,C?C2
????????????????????????????????? Where?SC1.CNO=C1.CNO?AND?C1.NAME='1'
???????????????????????????????????????????????? AND?SC2.CNO=C2.CNO?AND?C2.NAME='2'
???????????????????????????????????????????????? AND?SC1.SCGRADE>SC2.SCGRADE)?? SC?
???????? Where?S.SNO=SC.SNO
題目3:
======
有如下表記錄:
ID????????Name???????EmailAddress??????????????????LastLogon
100????????test4???????test4@yahoo.cn???????2007-11-25 16:31:26
13??????????test1???????test1@yahoo.cn???????2007-3-22 16:27:07
19??????????test1???????test1@yahoo.cn???????2007-10-25 14:13:46
42??????????test1???????test1@yahoo.cn???????2007-11-20 14:20:10
45??????????test2???????test2@yahoo.cn???????2007-4-25 14:17:39
49??????????test2???????test2@yahoo.cn???????2007-5-25 14:22:36
用一句sql查詢出每個用戶最近一次登錄的記錄(每個用戶只顯示一條最近登錄的記錄)
SELECT?a.*?from?users??a??inner?join
??????????????????????????????(SELECT?[Name],?LastLogon=MAX(LastLogon)????FROM??users????GROUP?BY?[Name])??b
???????????????????????????????on?a.[Name]=b.[Name]?and?a.[LastLogon]=b.[LastLogon]
方法二:
SELECT?a.*?from?users??a???inner?join
???????????????????????????????(SELECT??Name,MAX(LogonID)?LogonID?????FROM??users????GROUP?BY?[Name])??b
?????????????????????????????on?a.LogonID=b.LogonID
?????????????????????????????--where?a.LogonId=b.LogonId
轉載于:https://www.cnblogs.com/davidwang456/archive/2013/03/19/2969481.html
總結
以上是生活随笔為你收集整理的数据库常用面试题(SQL Server) (转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring aop实现过程之三Spri
- 下一篇: linux cmake编译源码,linu