#1、查詢“01”課程比“02”課程成績高的所有學生的學號;SELECT s1.sid
FROM SC s1 JOIN SC s2 ON s1.sid=s2.sid AND s1.cid='01'AND s2.cid='02'AND s1.score>s2.score
2、
#2、查詢平均成績大于60分的同學的學號和平均成績;SELECT sid as 學號,avg(score)as 平均成績
FROM SC GROUPBY sid HAVING 平均成績>60
3、
#3、查詢所有同學的學號、姓名、選課數、總成績SELECT s2.sid as 學號, s2.sname as 姓名, a.b as 選課數, a.c as 總成績
FROM Student s2,(SELECT s1.sid as id ,count(s1.cid)as b,sum(s1.score)as c
FROM SC s1 JOIN Student s2 ON s1.sid=s2.sid GROUPBY s1.sid)a
WHERE s2.sid=a.id
4、
#4、查詢姓“李”的老師的個數;SELECT*FROM Teacher WHERE tname LIKE'李%'
5、
#5、查詢沒學過“張三”老師課的同學的學號、姓名;SELECTDISTINCT(s1.sid)as 學號,s1.sname as 姓名
FROM Student s1 JOIN SC s2 ON s1.sid=s2.sid AND s2.cid IN(SELECT c1.cid FROM Teacher t1 JOIN Course c1 ON t1.tid=c1.tid AND t1.tname NOTLIKE'張三')
6、
#6、查詢學過編號“01”并且也學過編號“02”課程的同學的學號、姓名;SELECT sid as 學號, sname as 姓名 FROM Student WHERE sid in(SELECT s1.sid
FROM SC s1 JOIN SC s2 ON s1.sid=s2.sid AND s1.cid='01'AND s2.cid='02')
7、
#7、查詢學過“張三”老師所教的課的同學的學號、姓名;SELECT s2.sid as 學號, s2.sname as 姓名
FROM SC s1 JOIN Student s2 ON s1.sid=s2.sid AND s1.cid IN(SELECT cid FROM Course WHERE tid IN(SELECT tid FROM Teacher WHERE tname='張三'))
8、
#8、查詢課程編號“01”的成績比課程編號“02”課程低的所有同學的學號、姓名;SELECT a.sid as 學號, s3.sname as 姓名
FROM(SELECT s1.sid FROM SC s1 JOIN SC s2 ON s1.sid=s2.sid AND s1.cid='01'AND s2.cid='02'AND s1.score<s2.score)a JOIN Student s3 ON a.sid=s3.sid
9、
#9、查詢所有課程成績小于60分的同學的學號、姓名;SELECTDISTINCT(s2.sid)as 學號, s2.sname as 姓名
FROM SC s1 JOIN Student s2 ON s1.sid=s2.sid WHERE s1.score<60
10、
#10、查詢沒有學全所有課的同學的學號、姓名;SELECT s2.sid as 學號, s2.sname as 姓名
FROM(SELECT s1.sid as s3,count(1)as n
FROM SC s1 GROUPBY s1.sid HAVING n!=(SELECTCOUNT(1)FROM Course))a JOIN Student s2 ON a.s3=s2.sid
11、 利用01的課程號當作連表查詢的條件
#11、查詢至少有一門課與學號為“01”的同學所學相同的同學的學號和姓名;SELECT s2.sid as 學號, s2.sname as 姓名
FROM(SELECTDISTINCT(s1.sid)as s3
FROM(SELECT cid FROM SC WHERE sid='01')a JOIN SC s1 ON a.cid=s1.cid
WHERE s1.sid!='01')b JOIN Student s2 ON b.s3=s2.sid
12、
#12、查詢和"01"號的同學學習的課程完全相同的其他同學的學號和姓名##01學生上課的數量SELECTCOUNT(1)FROM SC WHERE sid='01'##SELECT s3.sid as 學號, s3.sname as 姓名
FROM Student s3 JOIN(SELECT s1.sid as s2,count(1)as n
FROM(SELECT*FROM SC WHERE sid='01')a JOIN SC s1 ON a.cid=s1.cid GROUPBY s1.sid HAVING n=3)b
WHERE sid=b.s2 AND sid!='01'
13、
#13、把“SC”表中“張三”老師教的課的成績都更改為此課程的平均成績;##這里不用更新了,篩選出來,計算平均數,生成搜索視圖就行SELECTavg(score)FROM SC WHERE cid IN(SELECT cid FROM Course WHERE tid IN(SELECT tid FROM Teacher WHERE tname='張三'))
14、
#14、查詢沒學過"張三"老師講授的任一門課程的學生姓名SELECT sname as 學生姓名 FROM Student WHERE sid NOTIN(SELECT sid FROM SC s1 JOIN(SELECT cid FROM Course WHERE tid IN(SELECT tid FROM Teacher WHERE tname='張三'))a ON s1.cid=a.cid)
15、
#15、查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績SELECT s2.sid as 學號, s2.sname as 姓名, a.c1 as 平均成績
FROM Student s2 JOIN(SELECT sid as id,count(1)as n,AVG(score)as c1
FROM SC s1 WHERE score<60GROUPBY sid HAVING n>=2)a WHERE s2.sid=a.id
16、
#16、檢索"01"課程分數小于60,按分數降序排列的學生信息SELECT s4.*,a.s3
FROM Student s4 JOIN(SELECT sid as s2, score as s3 FROM SC s1 WHERE cid='01'AND score<60)a ON s4.sid=a.s2 ORDERBY a.s3 DESC
17、
#17、按平均成績從高到低顯示所有學生的平均成績##排序錯位SELECT s1.sid as 學號, s1.sname as 姓名, a.av as 平均成績
FROM Student as s1 JOIN(SELECT sid,avg(score)as av FROM SC s1 GROUPBY sid ORDERBY av DESC)a
ON s1.sid=a.sid
#要把排序寫在外面SELECT s1.sid as 學號, s1.sname as 姓名, a.av as 平均成績
FROM Student as s1 JOIN(SELECT sid,avg(score)as av FROM SC s1 GROUPBY sid )a
ON s1.sid=a.sid ORDERBY a.av DESC
18、
#18、查詢各科成績最高分、最低分和平均分:以如下形式顯示:課程ID,課程name,最高分,最低分,平均分,及格率SELECT a.cid as 課程ID, Course.cname as 課程name,a.ma as 最高分, a.mi as 最低分, a.av as 平均分,a.p as 及格率
FROM(SELECT cid,MAX(score)as ma ,MIN(score)as mi ,AVG(score)as av, CONCAT((COUNT(if(score>=60,score,NULL))/COUNT(score))*100,'%')as p
FROM SC s1 GROUPBY cid)a, Course WHERE a.cid=Course.cid
##精簡版SELECT s1.cid,MAX(score)as ma ,MIN(score)as mi ,AVG(score)as av, CONCAT((COUNT(if(score>=60,score,NULL))/COUNT(score))*100,'%')as p
FROM SC s1 JOIN Course ON s1.cid=Course.cid GROUPBY s1.cid
COUNT(IF(條件,true時結果,false時結果))這個語句要記住!!! 19、
#19、按各科平均成績從低到高和及格率的百分數從高到低順序SELECT cid,AVG(score)as av,COUNT(IF(score>=60,score,NULL))/COUNT(score)as p FROM SC GROUPBY cid ORDERBY av ASC,p DESC
20、
#20、查詢學生的總成績并進行排名SELECT sid,SUM(score)as sscore
FROM SC as s1 GROUPBY sid ORDERBY sscore DESC
21、
#21、查詢不同老師所教不同課程平均分從高到低顯示SELECT s1.cid as 課程編號, t1.tname as 老師姓名,AVG(s1.score)as av
FROM SC s1 JOIN Course c1 ON s1.cid=c1.cid JOIN Teacher t1 ON c1.tid=t1.tid GROUPBY t1.tname , s1.cid ORDERBY av DESC
22、 23、 24、
#24、查詢學生平均成績及其名次SELECT(@i:=@i+1)as 排名,a.s as 學號,a.av as 平均成績
FROM(SELECT sid as s,AVG(score)as av
FROM SC GROUPBY sid ORDERBY av DESC)a,(SELECT@i:=0)as j
25、 26、
#26、查詢每門課程被選修的學生數SELECT cname as 課程,count(DISTINCT(sid))as 選課學生人數
FROM SC s1 JOIN Course c1 ON s1.cid=c1.cid GROUPBY cname
27、
#27、查詢出只選修了一門課程的全部學生的學號和姓名###數據中沒有之選了一門的,所以改成選兩門的吧SELECT sid as 學號, sname as 姓名 FROM Student WHERE sid IN(SELECT sid as id
FROM SC s1 GROUPBY sid HAVINGcount(1)=2)
28、
#28、查詢男生、女生人數SELECT ssex as 性別,COUNT(1)as 人數
FROM Student GROUPBY ssex
29、
#29、查詢名字中含有"風"字的學生信息SELECT*FROM Student WHERE sname LIKE'%風%'
30、
#30、查詢同名同性學生名單,并統計同名人數####同名同性其實就是一類,GROUP BY 就行!!!SELECT sname,ssex,count(1)as n
FROM Student GROUPBY sname,ssex HAVING n>1
SELECT cid,AVG(score)as av
FROM SC s1 GROUPBY cid ORDERBY av asc,cid DESC
37、
#37、查詢不及格的課程,并按課程號從大到小排列SELECT sid,cid,score FROM SC WHERE score<60ORDERBY cid DESC
38、
#38、查詢課程編號為"01"且課程成績在60分以上的學生的學號和姓名;SELECT s1.sid as 學號,s1.sname as 姓名
FROM(SELECT sid FROM SC WHERE cid='01'AND score>60)a LEFTJOIN Student s1 ON a.sid=s1.sid
40、
#40、查詢選修“張三”老師所授課程的學生中,成績最高的學生姓名及其成績SELECT a.s as 學號, s1.sname as 姓名,a.sc1 as 成績
FROM(SELECT sid as s,score as sc1 FROM SC WHERE cid=(SELECT cid FROM Course WHERE tid=(SELECT tid FROM Teacher WHERE tname='張三')))a LEFTJOIN Student s1 ON a.s=s1.sid ORDERBY a.sc1 DESCLIMIT1
42、查詢每門功課成績最好的前兩名
43、
#43、統計每門課程的學生選修人數(超過5人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列SELECT cid as 課程號,count(1)as number
FROM SC s1 GROUPBY cid HAVING number>5ORDERBY number DESC,cid ASC
44、
#44、檢索至少選修兩門課程的學生學號SELECT s2.sid as 學號, s2.sname as 姓名
FROM(SELECT sid FROM SC s1 GROUPBY sid HAVINGCOUNT(1)>=2)a LEFTJOIN Student s2 ON a.sid=s2.sid
45、
#45、查詢選修了全部課程的學生信息SELECT a.sid as 學號, s1.sname as 姓名
FROM(SELECT sid
FROM SC GROUPBY sid HAVINGcount(1)=(SELECTCOUNT(DISTINCT(cname))as n FROM Course))a, Student s1 WHERE a.sid=s1.sid
46、
#46、查詢各學生的年齡SELECT sid as 學號, sname as 姓名,(YEAR(NOW())-YEAR(sage))as 年齡
FROM Student
47-48
#47、查詢本周過生日的學生SELECT WEEK(NOW())#查看當前星期SELECT WEEK(sage)FROM Student#查看所有學生生日對應的星期SELECT sid,sname FROM Student WHERE WEEK(sage)=WEEK(NOW())#48、查詢下周過生日的學生SELECT sid,sname FROM Student WHERE WEEK(sage)=WEEK(NOW())+1
49-50
#49、查詢本月過生日的學生SELECT sid,sname FROM Student WHEREMONTH(sage)=MONTH(NOW())#50、查詢下月過生日的學生SELECT sid,sname FROM Student WHEREMONTH(sage)=MONTH(NOW())+1