SELECT * FROM course
SELECT * FROM score
SELECT * FROM teacher
SELECT * FROM student
1 查詢(xún)"01"課程比"02"課程成績(jī)高的學(xué)生的信息及課程分?jǐn)?shù)
第一步:查詢(xún)"01"課程的信息
SELECT * FROM score WHERE c_id ='01'
第二步: 查詢(xún)"02"課程的信息
SELECT * FROM score WHERE c_id='02'
第三步:? 查詢(xún)"01"課程比"02"課程成績(jī)高的學(xué)生號(hào)(左連接)
SELECT a.s_id
FROM
(SELECT * FROM score WHERE c_id ='01') AS a
LEFT JOIN
(SELECT * FROM score WHERE c_id='02') AS b
ON a.s_id=b.s_id
WHERE a.s_score>b.s_score OR b.s_id IS NULL
第四步:根據(jù)第三步的學(xué)生號(hào)查詢(xún)學(xué)生的信息及課程號(hào)钠龙、課程分?jǐn)?shù)
SELECT student.*,score.c_id,score.s_score
FROM student
JOIN score
ON student.s_id=score.s_id
WHERE student.s_id IN(SELECT a.s_id
FROM?(SELECT * FROM score WHERE c_id ='01') AS a
LEFT JOIN??(SELECT * FROM score WHERE c_id='02') AS b
ON a.s_id=b.s_id
WHERE a.s_score>b.s_score OR b.s_id IS NULL)
2查詢(xún)"01"課程比"02"課程成績(jī)低的學(xué)生的信息及課程分?jǐn)?shù)
第一步
SELECT * FROM student WHERE c_id='01'
第二步
SELECT * FROM student WHERE c_id='02'
第三步(右連接)
SELECT b.s_id
FROM (SELECT * FROM score WHERE c_id='01') AS a
RIGHT JOIN (SELECT * FROM score WHERE c_id='02') AS b
ON a.s_id =b.s_id
WHERE a.s_score<b.s_score OR a.s_id IS NULL
第四步
SELECT student.*,score.c_id,score.s_score
FROM student
JOIN score
ON student.s_id=score.s_id
WHERE student.s_id IN(SELECT b.s_id
FROM (SELECT * FROM score WHERE c_id='01') AS a
RIGHT JOIN (SELECT * FROM score WHERE c_id='02') AS b
ON a.s_id =b.s_id
WHERE a.s_score<b.s_score OR a.s_id IS NULL)
3平均成績(jī)大于等于60分的同學(xué)的學(xué)生編號(hào)和學(xué)生姓名和平均成績(jī)
內(nèi)連接
SELECT s.s_id,s.s_name,AVG(sc.s_score)
FROM student AS s
JOIN score AS sc
ON s.s_id = sc.s_id
GROUP BY s.s_id
HAVING AVG(sc.s_score)>=60
4查詢(xún)平均成績(jī)小于60分的同學(xué)的學(xué)生編號(hào)和學(xué)生姓名和平均成績(jī)
(包括有成績(jī)的和無(wú)成績(jī)的)
(左連接)
SELECT s.s_id,s.s_name,AVG(sc.s_score)
FROM student AS s
LEFT JOIN score AS sc
ON s.s_id=sc.s_id
GROUP BY s.s_id
HAVING AVG(sc.s_score)<60 OR AVG(sc.s_score) IS NULL
5所有同學(xué)的學(xué)生編號(hào)缩焦、學(xué)生姓名蓖康、選課總數(shù)、所有課程的總成績(jī)
SELECT s.s_id,s.s_name,COUNT(*) AS 選課總數(shù),SUM(sc.s_score) AS 總成績(jī)
FROM student AS s
JOIN score AS sc
ON s.s_id=sc.s_id
GROUP BY s.s_id
6查詢(xún)"李"姓老師的數(shù)量
SELECT COUNT(*) AS 數(shù)量
FROM teacher
WHERE t_name LIKE? '李%'
7查詢(xún)學(xué)過(guò)"張三"老師授課的同學(xué)的信息
第一步:找出學(xué)過(guò)“張三老師”的學(xué)生學(xué)號(hào)
SELECT sc.s_id
FROM score AS sc,teacher AS t,course AS c
WHERE sc.c_id=c.c_id
AND t.t_id=c.t_id
AND t.t_name='張三'
第二步
SELECT s.*
FROM student AS s
WHERE s.s_id IN
(SELECT sc.s_id
FROM score AS sc,teacher AS t,course AS c
WHERE sc.c_id=c.c_id
AND t.t_id=c.t_id
AND t.t_name='張三')
8查詢(xún)沒(méi)學(xué)過(guò)"張三"老師授課的同學(xué)的信息
第一步:找出學(xué)過(guò)“張三老師”的學(xué)生學(xué)號(hào)
SELECT sc.s_id
FROM score AS sc,teacher AS t,course AS c
WHERE sc.c_id=c.c_id
AND t.t_id=c.t_id
AND t.t_name='張三'
第二步
SELECT s.*
FROM student AS s
WHERE s.s_id NOT IN
(SELECT sc.s_id
FROM score AS sc,teacher AS t,course AS c
WHERE sc.c_id=c.c_id
AND t.t_id=c.t_id
AND t.t_name='張三')
9學(xué)過(guò)編號(hào)為"01"并且也學(xué)過(guò)編號(hào)為"02"的課程的同學(xué)的信息
第一種寫(xiě)法
第一步
SELECT s_id FROM score WHERE c_id='01'
第二步
SELECT s_id FROM score WHERE c_id='02'
第三步
SELECT a.s_id
FROM (SELECT s_id FROM score WHERE c_id='01') AS a
JOIN (SELECT s_id FROM score WHERE c_id='02') AS b
ON a.s_id=b.s_id
第四步
SELECT student.*
FROM student
WHERE s_id IN(SELECT a.s_id
FROM (SELECT s_id FROM score WHERE c_id='01') AS a
JOIN (SELECT s_id FROM score WHERE c_id='02') AS b
ON a.s_id=b.s_id)
第二種寫(xiě)法
SELECT s.*
FROM student AS s,
(SELECT score.s_id
FROM score
WHERE score.c_id='01') AS a,
(SELECT score.s_id
FROM score
WHERE score.c_id='02') AS b
WHERE s.s_id=a.s_id
AND s.s_id=b.s_id
10學(xué)過(guò)編號(hào)為"01"但是沒(méi)有學(xué)過(guò)編號(hào)為"02"的課程的同學(xué)的信息
第一步
SELECT s_id FROM score WHERE c_id='01'
第二步
SELECT s_id FROM score WHERE c_id='02'
第三步:(左連接,找出學(xué)過(guò)‘01’但沒(méi)有學(xué)過(guò)‘02’的學(xué)生編號(hào))
SELECT a.s_id
FROM (SELECT s_id FROM score WHERE c_id='01') AS a
LEFT JOIN (SELECT s_id FROM score WHERE c_id='02') AS b
ON a.s_id=b.s_id
WHERE b.s_id IS NULL
第四步
SELECT student.*
FROM student
WHERE s_id IN(SELECT a.s_id
FROM (SELECT s_id FROM score WHERE c_id='01') AS a
LEFT JOIN (SELECT s_id FROM score WHERE c_id='02') AS b
ON a.s_id=b.s_id
WHERE b.s_id IS NULL)
11查詢(xún)沒(méi)有學(xué)全所有課程的同學(xué)的信息
第一步
SELECT s_id
FROM score
GROUP BY s_id
HAVING COUNT(*)!=(SELECT COUNT(DISTINCT c_id) FROM course)
第二步
SELECT student.*
FROM student
WHERE s_id IN(SELECT s_id
FROM score
GROUP BY s_id
HAVING COUNT(*)!=(SELECT COUNT(DISTINCT c_id)? ?FROM course))
12查詢(xún)至少有一門(mén)課與學(xué)號(hào)為"01"的同學(xué)所學(xué)相同的同學(xué)的信息
第一步
SELECT c_id
FROM score
WHERE s_id='01'
第二步
SELECT student.*
FROM student
JOIN score
ON student.s_id=score.s_id
WHERE score.c_id IN (SELECT c_id? ?FROM score??WHERE s_id='01')
AND student.s_id !='01'
GROUP BY student.s_id
13查詢(xún)和"01"號(hào)的同學(xué)學(xué)習(xí)的課程完全相同的其他同學(xué)的信息
SELECT *
FROM student
JOIN score
WHERE student.s_id=score.s_id
GROUP BY student.s_id
HAVING score.c_id IN (SELECT c_id? ?FROM score? ?WHERE s_id='01')
AND student.s_id !='01'
AND COUNT(score.c_id)=(SELECT COUNT(score.c_id) FROM score WHERE s_id='01')
14查詢(xún)沒(méi)學(xué)過(guò)"張三"老師講授的任一門(mén)課程的學(xué)生姓名
第一步
SELECT sc.s_id
FROM teacher AS t,course AS c,score AS sc
WHERE t.t_id=c.t_id
AND sc.c_id=c.c_id
AND t.t_name='張三'
第二步
SELECT student.*
FROM student
WHERE student.s_id NOT IN
(SELECT sc.s_id
FROM teacher AS t,course AS c,score AS sc
WHERE t.t_id=c.t_id
AND sc.c_id=c.c_id
AND t.t_name='張三')
15查詢(xún)兩門(mén)及其以上不及格課程的同學(xué)的學(xué)號(hào)呀伙,姓名及其平均成績(jī)
第一步
SELECT s_id
FROM score
WHERE s_score<60
GROUP BY s_id
HAVING COUNT(*)>=2
第二步
SELECT s.s_id,s.s_name,AVG(sc.s_score)
FROM student AS s
JOIN score AS sc
ON s.s_id=sc.s_id
GROUP BY s.s_id
HAVING s.s_id IN
(SELECT s_id
FROM score
WHERE s_score<60
GROUP BY s_id
HAVING COUNT(*)>=2)
16檢索"01"課程分?jǐn)?shù)小于60,按分?jǐn)?shù)降序排列的學(xué)生信息
SELECT? student.*
FROM student
JOIN score
ON student.s_id=score.s_id
WHERE score.c_id='01'
AND score.s_score<60
ORDER BY score.s_score DESC
17按平均成績(jī)從高到低顯示所有學(xué)生的所有課程的成績(jī)以及平均成績(jī)
SELECT s_id AS sid,
(SELECT s_score FROM score WHERE s_id=sid AND c_id='01') AS 語(yǔ)文,
(SELECT s_score FROM score WHERE s_id=sid AND c_id='02') AS 數(shù)學(xué),
(SELECT s_score FROM score WHERE s_id=sid AND c_id='03') AS 英語(yǔ),
AVG(s_score) AS 平均成績(jī)
FROM score
GROUP BY s_id
ORDER BY 平均成績(jī) DESC
18.查詢(xún)各科成績(jī)最高分、最低分和平均分:以如下形式顯示:課程ID日丹,課程name,最高分蚯嫌,最低分哲虾,平均分,及格率择示,中等率束凑,優(yōu)良率,優(yōu)秀率
SELECT
sc.c_id,
c.c_name,
MAX(s_score) AS 最高分,
MIN(s_score) AS 最低分,
AVG(s_score) AS 平均分,
SUM(CASE WHEN s_score>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格率,
SUM(CASE WHEN s_score>=70 AND s_score<80 THEN 1 ELSE 0 END)/COUNT(*) AS 中等率,
SUM(CASE WHEN s_score>=80 AND s_Score<90 THEN 1 ELSE 0 END)/COUNT(*) AS 優(yōu)良率,
SUM(CASE WHEN s_score>90 THEN 1 ELSE 0 END)/COUNT(*) AS 優(yōu)秀率
FROM score AS sc
JOIN course AS c
ON sc.c_id=c.c_id
GROUP BY sc.c_id
19按各科成績(jī)進(jìn)行排序栅盲,并顯示排名(實(shí)現(xiàn)不完全)
20查詢(xún)學(xué)生的總成績(jī)并進(jìn)行排名
21查詢(xún)不同老師所教不同課程平均分從高到低顯示
SELECT t.t_id, c.c_id,AVG(sc.s_score) AS 平均成績(jī)
FROM score AS sc,teacher AS t,course AS c
WHERE sc.c_id=c.c_id
AND t.t_id=c.t_id
GROUP BY t.t_id,c.c_id
ORDER BY 平均成績(jī) DESC
22查詢(xún)所有課程的成績(jī)第2名到第3名的學(xué)生信息及該課程成績(jī)
23統(tǒng)計(jì)各科成績(jī)各分?jǐn)?shù)段人數(shù),課程編號(hào),課程名稱(chēng),[100-85],[85-70],[70-60],[0-60]及所占百分比
SELECT COUNT(*),
? ? ? c.c_id,
? ? ? c.c_name,
? ? ? SUM(CASE WHEN sc.s_score>=85 AND sc.s_score<=100 THEN 1 ELSE 0 END)/COUNT(*) AS '[85-100]',
? ? ? SUM(CASE WHEN sc.s_score>=70 AND sc.s_score<85 THEN 1 ELSE 0 END)/COUNT(*)? AS '[85-70]',
? ? ? SUM(CASE WHEN sc.s_score>=60 AND sc.s_score<70 THEN 1 ELSE 0 END)/COUNT(*) AS '[70-60]',
? ? ? SUM(CASE WHEN sc.s_score>=0 AND sc.s_score<60 THEN 1 ELSE 0 END)/COUNT(*) AS '[0-60]'
FROM score AS sc
JOIN course c
ON c.c_id=sc.c_id
GROUP BY c.c_id
24查詢(xún)學(xué)生平均成績(jī)及其名次
25查詢(xún)各科成績(jī)前三名的記錄
SELECT c_id AS cid,
(SELECT s_score FROM score WHERE c_id =cid ORDER BY s_score DESC? LIMIT 1) AS 第一名,
(SELECT s_score FROM score WHERE c_id =cid ORDER BY s_score DESC LIMIT 1,1) AS 第二名,
(SELECT s_score FROM score WHERE c_id =cid ORDER BY s_score DESC LIMIT 2,1) AS 第三名
FROM score
GROUP BY cid
26查詢(xún)每門(mén)課程被選修的學(xué)生數(shù)
SELECT c_id,COUNT(*) AS 人數(shù)
FROM score
GROUP BY c_id
27查詢(xún)出只有兩門(mén)課程的全部學(xué)生的學(xué)號(hào)和姓名
SELECT s.s_id,s.s_name
FROM student AS s
JOIN score AS sc
ON s.s_id=sc.s_id
GROUP BY s.s_id
HAVING COUNT(*)=2
28查詢(xún)男生汪诉、女生人數(shù)
SELECT s_sex,COUNT(*)
FROM student
GROUP BY s_sex
29查詢(xún)名字中含有"風(fēng)"字的學(xué)生信息
SELECT *
FROM student
WHERE s_name LIKE '%風(fēng)%'
30查詢(xún)同名同性學(xué)生名單,并統(tǒng)計(jì)同名人數(shù)
SELECT a.s_name,a.s_sex,COUNT(*) AS 同名人數(shù)
FROM student AS a
JOIN student AS b
ON a.s_id !=b.s_id
AND a.s_name=b.s_name
AND a.s_sex=b.s_sex
GROUP BY a.s_name
31查詢(xún)1990年出生的學(xué)生名單
第一種表達(dá)方式:
SELECT student.*
FROM student
WHERE YEAR(s_birth)=1990
第二種表達(dá)方式 :? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
select student.*
FROM student
WHERE DATE_FORMAT(s_birth,'%Y')=1990
32查詢(xún)每門(mén)課程的平均成績(jī)剪菱,結(jié)果按平均成績(jī)降序排列摩瞎,平均成績(jī)相同時(shí),按課程編號(hào)升序排列
SELECT c_id, AVG(s_score)
FROM score
GROUP BY c_id
ORDER BY AVG(s_score) DESC,c_id ASC
33查詢(xún)平均成績(jī)大于等于85的所有學(xué)生的學(xué)號(hào)孝常、姓名和平均成績(jī)
SELECT s.s_id,s.s_name,AVG(sc.s_score)
FROM student AS s
JOIN score AS sc
ON s.s_id=sc.s_id
GROUP BY s.s_id
HAVING AVG(sc.s_score)>=85
34查詢(xún)課程名稱(chēng)為"數(shù)學(xué)"旗们,且分?jǐn)?shù)低于60的學(xué)生姓名和分?jǐn)?shù)
SELECT s.s_name,sc.s_score
FROM student AS s
JOIN score AS sc
ON s.s_id=sc.s_id
JOIN course AS c
ON c.c_id=sc.c_id
WHERE c.c_name='數(shù)學(xué)'
AND sc.s_score<60
35查詢(xún)所有學(xué)生的課程及分?jǐn)?shù)情況
SELECT student.s_id AS sid,
? ? ? student.s_name,
(SELECT s_score FROM score WHERE s_id=sid AND c_id='01') AS 語(yǔ)文,
(SELECT s_score FROM score WHERE s_id=sid AND c_id='02') AS 數(shù)學(xué),
(SELECT s_score FROM score WHERE s_id=sid AND c_id='03') AS 英語(yǔ)
FROM student
JOIN score
ON student.s_id=score.s_id
GROUP BY student.s_id
36查詢(xún)?nèi)魏我婚T(mén)課程成績(jī)?cè)?0分以上的姓名、課程名稱(chēng)和分?jǐn)?shù)构灸;
SELECT s.s_name,c.c_name,sc.s_score
FROM student AS s
JOIN score AS sc
ON s.s_id =sc.s_id
JOIN course AS c
ON c.c_id=sc.c_id
WHERE sc.s_score>70
37查詢(xún)不及格的課程
SELECT s.s_name, c.c_name, sc.s_score
FROM score AS sc
JOIN course AS c
ON sc.c_id=c.c_id
JOIN student AS s
ON sc.s_id=s.s_id
WHERE sc.s_score<60
38查詢(xún)課程編號(hào)為01且課程成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)和姓名
SELECT s.s_id,s.s_name
FROM student AS s
JOIN score AS sc
ON s.s_id=sc.s_id
WHERE sc.c_id='01'
AND sc.s_score>80
39求每門(mén)課程的學(xué)生人數(shù)
SELECT c_id,COUNT(*) AS 學(xué)生人數(shù)
FROM score
GROUP BY c_id
40查詢(xún)選修"張三"老師所授課程的學(xué)生中上渴,成績(jī)最高的學(xué)生信息及其成績(jī)
SELECT student.*,MAX(score.s_score)
FROM student
JOIN score
ON student.s_id=score.s_id
WHERE student.s_id IN(SELECT sc.s_id
FROM course AS c
JOIN teacher AS t
ON c.t_id=t.t_id
JOIN score AS sc
ON c.c_id=sc.c_id
WHERE t.t_name='張三')
41查詢(xún)不同課程成績(jī)相同的學(xué)生的學(xué)生編號(hào)岸梨、課程編號(hào)、學(xué)生成績(jī)
SELECT DISTINCT a.s_id,a.c_id,a.s_score
FROM score AS a
JOIN score AS b
ON a.s_id=b.s_id
WHERE a.c_id!=b.c_id
AND a.s_score=b.s_score
42查詢(xún)每門(mén)功成績(jī)最好的前兩名
SELECT c_id AS cid,
(SELECT s_score FROM score WHERE c_id=cid ORDER BY s_score DESC LIMIT 1) AS 第一名,
(SELECT s_score FROM score WHERE c_id=cid ORDER BY s_score DESC LIMIT 1,1) AS 第二名
FROM score
GROUP BY c_id
43統(tǒng)計(jì)每門(mén)課程的學(xué)生選修人數(shù)(超過(guò)5人的課程才統(tǒng)計(jì))
要求輸出課程號(hào)和選修人數(shù)稠氮,查詢(xún)結(jié)果按人數(shù)降序排列
若人數(shù)相同曹阔,按課程號(hào)升序排列
SELECT c_id,COUNT(*) AS 選修人數(shù)
FROM score
GROUP BY c_id
HAVING COUNT(*)>5
ORDER BY 選修人數(shù) DESC,c_id ASC
44檢索至少選修兩門(mén)課程的學(xué)生學(xué)號(hào)
SELECT s_id
FROM score
GROUP BY s_id
HAVING COUNT(*)>=2
45查詢(xún)選修了全部課程的學(xué)生信息
SELECT student.*
FROM student
JOIN score
ON student.s_id=score.s_id
GROUP BY student.s_id
HAVING COUNT(*)=(SELECT COUNT(DISTINCT c_id)
? ? ? ? ? ? ? ? FROM course)
46查詢(xún)各學(xué)生的年齡
按照出生日期來(lái)算,當(dāng)前月日 < 出生年月的月日則隔披,年齡減一
SELECT s_name,s_birth,
(DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(s_birth,'%Y')-
(CASE WHEN DATE_FORMAT(NOW(),'%m%d')<DATE_FORMAT(s_birth,'%m%d') THEN 1 ELSE 0 END))? AS 年齡
FROM student
47查詢(xún)本周過(guò)生日的學(xué)生
SELECT student.*
FROM student
WHERE WEEK(s_birth,1)=WEEK(CURDATE(),1)
SELECT DATE(NOW())
SELECT CURDATE()
48查詢(xún)下周過(guò)生日的學(xué)生
SELECT student.*
FROM student
WHERE WEEK(s_birth,1)=WEEK(CURDATE(),1)+1
49查詢(xún)本月過(guò)生日的學(xué)生
SELECT student.*
FROM student
WHERE MONTH(s_birth)=MONTH(CURDATE())
50查詢(xún)下月過(guò)生日的學(xué)生
SELECT student.*
FROM student
WHERE DATE_FORMAT(s_birth,'%m')=DATE_FORMAT(NOW(),'%m')+1
SELECT student.*
FROM student
WHERE MONTH(s_birth)=MONTH(CURDATE())+1
SELECT(NOW())
SELECT(DATE(NOW()))
SELECT(YEAR(NOW()))
SELECT(MONTH(NOW()))
SELECT(DAY(NOW()))
SELECT(TIME(NOW()))
SELECT(DATE_FORMAT(NOW(),'%Y'))
SELECT(YEAR(NOW()))