MySQL查詢(下)
阿新 • • 發佈:2020-08-07
存在以下四個資料庫表
學生表:student1(sid,sname) Sid學號,sname學生姓名
教師表:teacher(tid,tname) tid教師編號,tname教師名字
課程表:course(cid,cname,tid) cid課程編號,cname課程姓名,tid教師編號
成績表:cj(sid,cid,score) sid學號,cid選修課程編號,score 成績
--1、查詢所有同學的學號、姓名、選課數、總成績
SELECT student1.sid,student1.sname,count(cj.cid),SUM(cj.score) FROM student1,cjWHERE student1.sid=cj.sid GROUP BY cj.sid,student1.sname
--2、查詢平均成績大於60分的同學的學號和平均成績
select sid,SUM(cj.score)/COUNT(cj.cid) from cj group by sid having max(score)>60;
--3、查詢選修的課程不少於3門的每個學生的編號,學生姓名
select student1.sid,student1.sname,COUNT(cj.cid) from student1,cj WHERE student1.sid=cj.sid groupby student1.sid,student1.sname having COUNT(cj.cid)>=3;
--4、查詢選修了'數學'並且及格的姓名,課程名,成績。
SELECT student1.sname,cj.cid,cj.score FROM student1,cj WHERE student1.sid=cj.sid GROUP BY student1.sname,cj.cid,cj.score HAVING cj.cid=2 AND cj.score>60;
--5、查詢每個學生至少選修了2門看起來像'語'的課程的學生姓名。
SELECT student1.sname,course.cname,cj.cid,COUNT(cj.cid) FROM student1,course,cj WHERE student1.sid=cj.sid AND course.cid=cj.cid AND course.cname LIKE '%語' GROUP BY student1.sname,course.cname,cj.cid HAVING COUNT(cj.cid)>2;
--6、查詢不及格的課程超過2門的學生編號和姓名
SELECT student1.sid,student1.sname,cj.score FROM student1,cj WHERE student1.sid=cj.sid HAVING score<60;
--7、查詢選擇的課程中"語文"的成績比"數學"的成績高的學生編號和姓名
SELECT student1.sid,student1.sname FROM (student1, (SELECT * FROM cj WHERE cid=( SELECT cid FROM course WHERE cname='語文'))AS temp1, (SELECT * FROM cj WHERE cid=( SELECT cid FROM course WHERE cname='數學'))AS temp2) WHERE student1.sid = temp1.sid AND temp1.sid = temp2.sid AND temp1.score>temp2.score;
--8、查詢沒有選擇看起來像“老”的老師的課程的學生編號和姓名
-- SELECT student1.sid,student1.sname -- FROM (student1, (SELECT * FROM cj WHERE cid in( -- SELECT cid FROM course WHERE course.cname NOT LIKE '%老'))AS temp3) -- WHERE student1.sid=temp3.sid #sid和sname會有重複資料 -- select distinct 欄位名 from 表名 #去重 SELECT DISTINCT student1.sid,student1.sname FROM (student1, (SELECT * FROM cj WHERE cid in( SELECT cid FROM course WHERE course.cname NOT LIKE '%老'))AS temp3) WHERE student1.sid=temp3.sid
--9、查詢選修了課程的學員人數
-- SELECT COUNT(sid) FROM (
-- SELECT * FROM student1 WHERE sid in(SELECT sid FROM cj))
SELECT COUNT(sid) FROM ( SELECT * FROM student1 WHERE sid in(SELECT sid FROM cj))as temp4; #Err] 1248 - Every derived table must have its own alias 每個派生出來的表都必須有一個自己的別名,所以在其後面加上 as temp4即可