mysql復雜查詢,優質題目


表結構

1.自行添加測試數據

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

SELECT t1.sid,AVG(t2.number)
FROM student t1 LEFT JOIN score t2 ON t1.sid=t2.student_id
GROUP BY t1.sid HAVING AVG(t2.number)>60;

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

SELECT t1.sid,t1.sname,t2.temp1,t3.temp2
FROM student t1,(SELECT student_id,COUNT(sid) temp1 FROM score GROUP BY student_id) t2,
(SELECT student_id,SUM(number) temp2 FROM score GROUP BY student_id) t3
WHERE t1.sid=t2.student_id AND t1.sid=t3.student_id;
#較復雜,有難度

4.查詢姓“李”的老師的個數;

SELECT COUNT(tid)
FROM teacher
WHERE tname LIKE '李%'; 

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

SELECT t1.`sid`,t1.`sname`
FROM student t1
WHERE t1.`sid` NOT IN(SELECT student_id
FROM score
WHERE course_id IN(SELECT t2.cid
FROM teacher t1 LEFT JOIN course t2 ON t1.`tid`=t2.`teacher_id`
WHERE t1.tname='葉平' ORDER BY t2.`cid`));

#子句
SELECT student_id
FROM score
WHERE course_id IN(SELECT t2.cid
FROM teacher t1 LEFT JOIN course t2 ON t1.`tid`=t2.`teacher_id`
WHERE t1.tname='葉平' ORDER BY t2.`cid`);
#較復雜

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

#方法1
SELECT t1.`student_id`,t2.`sname`
FROM score t1 LEFT JOIN student t2 ON t1.`student_id`=t2.`sid`
WHERE course_id=1
UNION ALL
SELECT t1.`student_id`,t2.`sname`
FROM score t1 LEFT JOIN student t2 ON t1.`student_id`=t2.`sid`
WHERE course_id=2;
#方法2
SELECT t1.sid,t1.sname
FROM (SELECT t1.`student_id` sid,t2.`sname` sname
FROM score t1 LEFT JOIN student t2 ON t1.`student_id`=t2.`sid`
WHERE course_id=1
UNION ALL
SELECT t1.`student_id`,t2.`sname`
FROM score t1 LEFT JOIN student t2 ON t1.`student_id`=t2.`sid`
WHERE course_id=2) t1
GROUP BY t1.sid HAVING COUNT(*)>1;

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

SELECT t1.`student_id`,t2.`sname`
FROM score t1 LEFT JOIN student t2 ON t1.`student_id`=t2.`sid`
WHERE t1.`course_id` IN(SELECT t2.cid
FROM teacher t1 LEFT JOIN course t2 ON t1.`tid`=t2.`teacher_id`
WHERE t1.tname='葉平' ORDER BY t2.`cid`);

#子句
SELECT t2.cid
FROM teacher t1 LEFT JOIN course t2 ON t1.`tid`=t2.`teacher_id`
WHERE t1.tname='葉平' ORDER BY t2.`cid`;

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

#子句1
SELECT number
FROM score
WHERE course_id=2;
#子句2
SELECT number
FROM score t1
WHERE t1.`course_id`=1;
#總語句
SELECT t3.`sid`,t3.`sname`
FROM (SELECT student_id,number
FROM score
WHERE course_id=2) t1,(SELECT student_id,number
FROM score
WHERE course_id=1) t2,student t3
WHERE t1.student_id=t3.sid AND t2.student_id=t3.sid AND t1.number<t2.number;

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

#方法1
SELECT DISTINCT t1.student_id,t2.`sname`
FROM score t1 LEFT JOIN student t2 ON t1.`student_id`=t2.`sid`
WHERE t1.number<60;

#方法2
SELECT t1.sid,t1.sname
FROM student t1,(SELECT student_id FROM score WHERE number<60 GROUP BY student_id) t2
WHERE t1.sid=t2.student_id;

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

#總語句
SELECT sid,sname
FROM student
WHERE sid NOT IN(SELECT student_id
FROM score
GROUP BY student_id HAVING COUNT(course_id)=(SELECT COUNT(cid) FROM course));

#子句
SELECT sid,sname
FROM student
WHERE sid NOT IN();

#子句:學全了的學生編號
SELECT student_id
FROM score
GROUP BY student_id HAVING COUNT(course_id)=(SELECT COUNT(cid) FROM course);

#子句:課程的總數
SELECT COUNT(cid) FROM course; 

11.查詢至少有一門課與學號為“001”的同學所學相同的同學的學號和姓名;

#總語句
SELECT DISTINCT t1.student_id,t2.`sname`
FROM score t1 LEFT JOIN student t2 ON t1.`student_id`=t2.`sid`
WHERE course_id IN(SELECT course_id
FROM score
WHERE student_id=1);

#子句:學號1所選所有課程
SELECT course_id
FROM score
WHERE student_id=1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM