1. 程式人生 > 實用技巧 >MySQL查詢(下)

MySQL查詢(下)

存在以下四個資料庫表
學生表: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,cj 
WHERE 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 
group
by 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即可