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;
50道SQL
1、查詢“001”課程比“002”課程成績高的所有學生的學號;
select a.S#
from (select s#,score from SC where C#='001') a,(select s#,score
from SC where C#=
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
'andexists( Select*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),0) AS平均成績
,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'THEN1ELSE0END) AS企業管理平均分
,100*SUM(CASEWHEN C# ='001'AND score >=60THEN1ELSE0END)/SUM(CASEWHEN C# ='001'THEN1ELSE0END) AS企業管理及格百分數
,SUM(CASEWHEN C# ='002'THEN score ELSE0END)/SUM(CASE C# WHEN'002'THEN1ELSE0END) AS馬克思平均分
,100*SUM(CASEWHEN C# ='002'AND score >=60THEN1ELSE0END)/SUM(CASEWHEN C# ='002'THEN1ELSE0END) AS馬克思及格百分數
,SUM(CASEWHEN C# ='003'THEN score ELSE0END)/SUM(CASE C# WHEN'003'THEN1ELSE0END) AS UML平均分
,100*SUM(CASEWHEN C# ='003'AND score >=60THEN1ELSE0END)/SUM(CASEWHEN C# ='003'THEN1ELSE0END) AS UML及格百分數
,SUM(CASEWHEN C# ='004'THEN score ELSE0END)/SUM(CASE C# WHEN'004'THEN1ELSE0END) AS資料庫平均分
,100*SUM(CASEWHEN C# ='004'AND score >=60THEN1ELSE0END)/SUM(CASEWHEN C# ='004'THEN1ELSE0END) AS資料庫及格百分數
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
表結構:
表Student
(S#,Sname,Sage,Ssex)
學生表
S#
student_no
Sage
student_age
Ssex
student_sex
表Course
(C#,Cname,T#)
課程表
C#
cou
流傳較廣的50道SQL訓練,奮鬥了不知道多久終於寫完了。前18道題的難度依次遞增,從19題開始的後半部分算是迴圈練習和額外function的附加練習,難度恢復到普通狀態。
第9題非常難,我反正沒有寫出來,如果有寫出來了的朋友還請賜教。
這50道里面自認為應該沒有太多錯誤,而且
網上流傳較廣的50道SQL訓練,奮鬥了不知道多久終於寫完了。前18道題的難度依次遞增,從19題開始的後半部分算是迴圈練習和額外function的附加練習,難度恢復到普通狀態。第9題非常難,我反正沒有寫出來,如果有寫出來了的朋友還請賜教。這50道里面自認為應該沒有太多錯誤,而且儘可能使用了最簡單或是最直接
已知有如下4張表:
學生表:STUDENT(S#,SNAME,SAGE,SSEX)
課程表:COURSE(C#,CNAME,T#)
成績表:SC(S#,C#,SCORE)
教師表:TEACHER(T#,TNAME)
其中,S#代表學號,SNAME代表學生姓名,SAG
表
Student(S#,Sname,Sage,Ssex) 學生表
Course(C#,Cname,T#) 課程表
SC(S#,C#,score) 成績表
Teacher(T#,Tname) 教師表
問題:
1、查詢“001”課程比“002”課程成績
表及資料
student
SNO SNAME SAGE SSEX
01 趙雷 1990-01-01 00:00:00 男
02 錢電 1990-12-21 00:00:00 男
03 孫風
原始資料
學生表 Student
create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10)) insert into Student values(‘01’ ,
問題及描述:--1.學生表Student(SID,Sname,Sage,Ssex) --SID 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別--2.課程表Course(CID,Cname,TID) --CID --課程編號,Cname 課程名稱,TI 編程題 pub else 整數 正整數分解 clas 因數 stat args 將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
public class Example04 { public static void main(String[] n) pub 嵌套 example void out [] args core 利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。
public class Example05 { public 其中 println i++ class aaa 一個 bsp pub 個數字 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制。
public class Exa r++ [] main world else number 字符 英文 ray 輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
public class Example07 { public static void main(String[] a 因子 oid 例如 println out count 它的 編程題 num 一個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3。編程找出1000以內的所有完數。
public class Example09 { public static v 經典 [] 一半 stat ati public sta void amp 一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下……求它在第10次落地時,共經過多少米?第10次反彈多高?
public class Example10 println class num ati void ber pri 多少 example 有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
public class Example11 { public static void main 數字 java 經典 example 個數字 println clas void bsp 輸入三個整數x,y,z,請把這三個數由小到大輸出。
public class Example15 { public static void main(String[] args out break void pri sta cas || 編程 pub 輸入某年某月某日,判斷這一天是這一年的第幾天?
public class Example14 { public static void main(String[] args) { pub main isp ring args int string class for 打印出如下圖案(菱形) * *** ****** ******** ****** *** *
public class E args example for ava ati rgs oid string += 有5個人坐在一起,問第5個人多少歲,他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。 問第三個人,他說比第2人大兩歲。問第2個人, 說比第一個人大兩歲。最後問第一個人,他說是1 ray != println 回文 str stat [0 java amp 一個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。
public class Example25 { public static void main(S 相關推薦
50道SQL測試題
50道SQL練習題及答案與詳細分析:
SQL練習題-50道SQL練習題及答案與詳細分析
資料庫筆試面試(第一版)——根據題目完成以下50道SQL語句
50道經典SQL語句題
SQL進階練習題50道
SQL練習題,50道
50道高階sql練習題;大大提高自己的sql能力(附具體的sql)
Java經典編程題50道之四
Java經典編程題50道之五
Java經典編程題50道之八
Java經典編程題50道之七
Java經典編程題50道之九
Java經典編程題50道之十
Java經典編程題50道之十一
Java經典編程題50道之十五
Java經典編程題50道之十四
Java經典編程題50道之十九
Java經典編程題50道之二十四
Java經典編程題50道之二十五