1. 程式人生 > >50道SQL測試題

50道SQL測試題

表結構:

Student

(S#,Sname,Sage,Ssex) 學生表

S#

student_no

Sage

student_age

Ssex

student_sex

Course

(C#,Cname,T#) 課程表

C#

course_no

Cname

course_name

T#

teacher_no

SC(學生與課程的分數mapping 表)

(S#,C#,score) 成績表

S#

student_no

C#

course_no

score

分數啦

Teacher

(T#,Tname) 教師表

T#

teacher_no

Tname

teacher_name

-------開發庫-------

--學生表

select * from Student;

--成績表

select * from sc;

--教師表

select * from teacher;

--課程表

select * from course;

50SQL

1、查詢001課程比002課程成績高的所有學生的學號;

select a.S# 

from (select s#,score from SC where C#='001') a,(select s#,score

from SC where C#=

'002'

where a.score>b.score and a.s#=b.s#;

2、查詢平均成績大於60分的同學的學號和平均成績;

select S#,avg(score)

from sc

groupby S# havingavg(score) >60;

3、查詢所有同學的學號、姓名、選課數、總成績;

select Student.S#,Student.Sname,count(SC.C#),sum(score)

from Student leftOuterjoin SC on Student.S#=SC.S#

groupby Student.S#,Sname

4、查詢姓

的老師的個數;

selectcount(distinct(Tname))

from Teacher

where Tname like'%';

5、查詢沒學過葉平老師課的同學的學號、姓名;

select Student.S#,Student.Sname

from Student 

where S# notin (selectdistinct( SC.S#) fromSC,Course,Teacher where SC.C#=Course.C#and Teacher.T#=Course.T# andTeacher.Tname='葉平');

6、查詢學過001並且也學過編號002課程的同學的學號、姓名;

select Student.S#,Student.Sname

fromStudent,SC

where Student.S#=SC.S# andSC.C#='001

'andexistsSelect*from SC as SC_2 whereSC_2.S#=SC.S# and SC_2.C#='002');

7、查詢學過葉平老師所教的所有課的同學的學號、姓名;

select S#,Sname

from Student

where S# in (select S# from SC,Course ,Teacher where SC.C#=Course.C# andTeacher.T#=Course.T# and Teacher.Tname='葉平'groupby S# havingcount(SC.C#)=(selectcount(C#) fromCourse,Teacher  whereTeacher.T#=Course.T# and Tname='葉平'));

8、查詢課程編號002的成績比課程編號001課程低的所有同學的學號、姓名;

Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SCSC_2 where SC_2.S#=Student.S#and SC_2.C#='002') score2

from Student,SC where Student.S#=SC.S# andC#='001') S_2 where score2 <score;

9、查詢所有課程成績小於60分的同學的學號、姓名;

select S#,Sname

from Student

where S# notin (select Student.S# fromStudent,SC where S.S#=SC.S# andscore>60);

10、查詢沒有學全所有課的同學的學號、姓名;

select Student.S#,Student.Sname

from Student,SC

whereStudent.S#=SC.S# groupby  Student.S#,Student.Sname havingcount(C#) <(selectcount(C#) from Course); 

11、查詢至少有一門課與學號為1001的同學所學相同的同學的學號和姓名;

select S#,Sname from Student,SC whereStudent.S#=SC.S# and C# inselect C# from SC where S#='1001';

12、查詢至少學過學號為001同學所有一門課的其他同學學號和姓名;

selectdistinct SC.S#,Sname

from Student,SC

where Student.S#=SC.S# and C# in(select C# from SC where S#='001');

13、把“SC”表中葉平老師教的課的成績都更改為此課程的平均成績;

update SC set score=(selectavg(SC_2.score)

from SCSC_2

where SC_2.C#=SC.C#) fromCourse,Teacher where Course.C#=SC.C# andCourse.T#=Teacher.T# and Teacher.Tname='葉平');

14、查詢和1002號的同學學習的課程完全相同的其他同學學號和姓名;

select S# from SC where C# in(select C# from SC where S#='1002')

groupby S# havingcount(*)=(selectcount(*from SC where S#='1002');

15、刪除學習葉平老師課的SC表記錄;

    DelectSC

from course,Teacher 

where Course.C#=SC.C# and Course.T#=Teacher.T# and Tname='葉平';

16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號003課程的同學學

號、2號課的平均成績;

Insert SC select S#,'002',(Selectavg(score)

from SC

where C#='002'from Student 

where S# notin (Select S# from SC where C#='002');

17、按平均成績從高到低顯示所有學生的資料庫企業管理英語三門的課程成績,按

如下形式顯示:學生ID,,資料庫,企業管理,英語,有效課程數,有效平均分

SELECT S# as學生ID

        ,(SELECT score FROM SC WHERE SC.S#=t.S#AND C#='004'AS資料庫

        ,(SELECT score FROM SC WHERE SC.S#=t.S#AND C#='001'AS企業管理

        ,(SELECT score FROM SC WHERE SC.S#=t.S#AND C#='006'AS英語

        ,COUNT(*AS有效課程數AVG(t.score) AS平均成績

FROM SC AS t

GROUPBY S#

ORDERBYavg(t.score) 

18、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分

SELECT L.C# As課程ID,L.score AS最高分,R.score AS最低分

FROM SCL ,SC AS R

WHERE L.C# = R.C# and

       L.score = (SELECTMAX(IL.score)

FROM SC ASIL,Student AS IM

WHERE L.C# =IL.C# and IM.S#=IL.S#

GROUPBYIL.C#)

AND

        R.Score= (SELECTMIN(IR.score)

FROM SC ASIR

WHERE R.C# =IR.C#

GROUPBY IR.C#

                   );

19、按各科平均成績從低到高和及格率的百分數從高到低順序

SELECT t.C# AS課程號,max(course.Cname)AS課程名,isnull(AVG(score),0AS平均成績

        ,100*SUM(CASEWHENisnull(score,0)>=60THEN1ELSE0END)/COUNT(*AS及格百分數

FROM SCT,Course

where t.C#=course.C#

GROUPBY t.C#

ORDERBY100*SUM(CASEWHENisnull(score,0)>=60THEN1ELSE0END)/COUNT(*DESC

20、查詢如下課程平均成績和及格率的百分數("1"顯示): 

企業管理(001),馬克思(002),OO&UML 003),資料庫(004

SELECTSUM(CASEWHEN C# ='001'THEN score ELSE0END)/SUM(CASE C# WHEN'001'THEN1ELSE0ENDAS企業管理平均分

        ,100*SUM(CASEWHEN C# ='001'AND score >=60THEN1ELSE0END)/SUM(CASEWHEN C# ='001'THEN1ELSE0ENDAS企業管理及格百分數

        ,SUM(CASEWHEN C# ='002'THEN score ELSE0END)/SUM(CASE C# WHEN'002'THEN1ELSE0ENDAS馬克思平均分

        ,100*SUM(CASEWHEN C# ='002'AND score >=60THEN1ELSE0END)/SUM(CASEWHEN C# ='002'THEN1ELSE0ENDAS馬克思及格百分數

        ,SUM(CASEWHEN C# ='003'THEN score ELSE0END)/SUM(CASE C# WHEN'003'THEN1ELSE0ENDAS UML平均分

        ,100*SUM(CASEWHEN C# ='003'AND score >=60THEN1ELSE0END)/SUM(CASEWHEN C# ='003'THEN1ELSE0ENDAS UML及格百分數

        ,SUM(CASEWHEN C# ='004'THEN score ELSE0END)/SUM(CASE C# WHEN'004'THEN1ELSE0ENDAS資料庫平均分

        ,100*SUM(CASEWHEN C# ='004'AND score >=60THEN1ELSE0END)/SUM(CASEWHEN C# ='004'THEN1ELSE0ENDAS資料庫及格百分數

FROM SC 

21、查詢不同老師所教不同課程平均分從高到低顯示

SELECTmax(Z.T#) AS教師ID,MAX(Z.Tname) AS教師姓名,C.C# AS課程ID,MAX(C.Cname) AS課程名稱,AVG(Score) AS平均成績

FROM SC AS T,Course AS C ,Teacher AS Z

where T.C#=C.C# and C.T#=Z.T#

GROUPBY C.C#

ORDERBYAVG(Score) DESC

22、查詢如下課程成績第3名到第6名的學生成績單:

企業管理(001),馬克思(002),UML 003),資料庫(004

[學生ID],[學生姓名],企業管理,馬克思,UML,資料庫,平均成績

SELECTDISTINCTtop3

      SC.S#As學生學號,

        Student.SnameAS學生姓名 ,

      T1.scoreAS企業管理,

      T2.scoreAS馬克思,

      T3.scoreAS UML,

      T4.scoreAS資料庫,

ISNULL(T1.score,0) +ISNULL(T2.score,0) +ISNULL(T3.score,0) +ISNULL(T4.score,0) as總分

FROM Student,SC  LEFTJOIN SC AS T1

ON SC.S# = T1.S# AND T1.C# ='001'

LEFTJOIN SC AS T2

ON SC.S# = T2.S# AND T2.C# ='002'

LEFTJOIN SC AS T3

ON SC.S# = T3.S# AND T3.C# ='003'

LEFTJOIN SC AS T4

ON SC.S# = T4.S# AND T4.C# ='004'

WHERE student.S#=SC.S# and

ISNULL(T1.score,0) +ISNULL(T2.score,0) +ISNULL(T3.score,0) +ISNULL

相關推薦

50SQL測試題

表結構: 表Student (S#,Sname,Sage,Ssex) 學生表 S# student_no Sage student_age Ssex student_sex 表Course (C#,Cname,T#) 課程表 C# cou

50SQL練習題及答案與詳細分析:

流傳較廣的50道SQL訓練,奮鬥了不知道多久終於寫完了。前18道題的難度依次遞增,從19題開始的後半部分算是迴圈練習和額外function的附加練習,難度恢復到普通狀態。 第9題非常難,我反正沒有寫出來,如果有寫出來了的朋友還請賜教。 這50道里面自認為應該沒有太多錯誤,而且

SQL練習題-50SQL練習題及答案與詳細分析

網上流傳較廣的50道SQL訓練,奮鬥了不知道多久終於寫完了。前18道題的難度依次遞增,從19題開始的後半部分算是迴圈練習和額外function的附加練習,難度恢復到普通狀態。第9題非常難,我反正沒有寫出來,如果有寫出來了的朋友還請賜教。這50道里面自認為應該沒有太多錯誤,而且儘可能使用了最簡單或是最直接

資料庫筆試面試(第一版)——根據題目完成以下50SQL語句

已知有如下4張表: 學生表:STUDENT(S#,SNAME,SAGE,SSEX) 課程表:COURSE(C#,CNAME,T#) 成績表:SC(S#,C#,SCORE) 教師表:TEACHER(T#,TNAME) 其中,S#代表學號,SNAME代表學生姓名,SAG

50經典SQL語句題

表 Student(S#,Sname,Sage,Ssex) 學生表 Course(C#,Cname,T#) 課程表 SC(S#,C#,score) 成績表 Teacher(T#,Tname) 教師表 問題: 1、查詢“001”課程比“002”課程成績

SQL進階練習題50

表及資料 student SNO    SNAME    SAGE    SSEX 01    趙雷    1990-01-01 00:00:00    男 02    錢電    1990-12-21 00:00:00    男 03    孫風  

SQL練習題,50

原始資料 學生表 Student create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10)) insert into Student values(‘01’ ,

50高階sql練習題;大大提高自己的sql能力(附具體的sql)

問題及描述:--1.學生表Student(SID,Sname,Sage,Ssex) --SID 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別--2.課程表Course(CID,Cname,TID) --CID --課程編號,Cname 課程名稱,TI

Java經典編程題50之四

編程題 pub else 整數 正整數分解 clas 因數 stat args 將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。 public class Example04 { public static void main(String[]

Java經典編程題50之五

n) pub 嵌套 example void out [] args core 利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。 public class Example05 { public

Java經典編程題50之八

其中 println i++ class aaa 一個 bsp pub 個數字 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制。 public class Exa

Java經典編程題50之七

r++ [] main world else number 字符 英文 ray 輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。 public class Example07 { public static void main(String[] a

Java經典編程題50之九

因子 oid 例如 println out count 它的 編程題 num 一個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3。編程找出1000以內的所有完數。 public class Example09 { public static v

Java經典編程題50之十

經典 [] 一半 stat ati public sta void amp 一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下……求它在第10次落地時,共經過多少米?第10次反彈多高? public class Example10

Java經典編程題50之十一

println class num ati void ber pri 多少 example 有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少? public class Example11 { public static void main

Java經典編程題50之十五

數字 java 經典 example 個數字 println clas void bsp 輸入三個整數x,y,z,請把這三個數由小到大輸出。 public class Example15 { public static void main(String[] args

Java經典編程題50之十四

out break void pri sta cas || 編程 pub 輸入某年某月某日,判斷這一天是這一年的第幾天? public class Example14 { public static void main(String[] args) {

Java經典編程題50之十九

pub main isp ring args int string class for 打印出如下圖案(菱形) * *** ****** ******** ****** *** * public class E

Java經典編程題50之二十四

args example for ava ati rgs oid string += 有5個人坐在一起,問第5個人多少歲,他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。 問第三個人,他說比第2人大兩歲。問第2個人, 說比第一個人大兩歲。最後問第一個人,他說是1

Java經典編程題50之二十五

ray != println 回文 str stat [0 java amp 一個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。 public class Example25 { public static void main(S