mysql考试总结
USE school;
-- 班級(jí)表
CREATE TABLE class(cid TINYINT PRIMARY KEY AUTO_INCREMENT,caption VARCHAR(20)
);INSERT INTO class(caption) VALUES("三年二班"),("一年三班"),("三年一班");SELECT * FROM class;-- 老師表
CREATE TABLE teacher(tid TINYINT PRIMARY KEY AUTO_INCREMENT,tname VARCHAR(20)
);INSERT INTO teacher(tname) VALUES("波多"),("蒼空"),("飯島");SELECT * FROM teacher;-- 學(xué)生表
CREATE TABLE student(sid TINYINT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(20),gender VARCHAR(10),class_id TINYINT,FOREIGN KEY (class_id) REFERENCES class(cid)
);INSERT INTO student(sname,gender,class_id) VALUES("鋼蛋","女",1),("鐵錘","女",1),("山炮","男",2);SELECT * FROM student;-- 課程表
CREATE TABLE course(cid TINYINT PRIMARY KEY AUTO_INCREMENT,cname VARCHAR(20),teacher_id TINYINT,FOREIGN KEY (teacher_id) REFERENCES teacher(tid)
);
ALTER TABLE course MODIFY cid TINYINT, DROP PRIMARY KEY;
ALTER TABLE course ADD CONSTRAINT xx FOREIGN KEY (cid) REFERENCES class(cid);
DESC course;
SHOW CREATE TABLE course;
INSERT INTO course(cname,teacher_id) VALUES("生物",1),("體育",1),("物理",2);SELECT * FROM course;
-- 成績(jī)表
CREATE TABLE score(sid TINYINT PRIMARY KEY AUTO_INCREMENT,student_id TINYINT,course_id TINYINT,number INT,FOREIGN KEY (student_id) REFERENCES student(sid),FOREIGN KEY (course_id) REFERENCES course(cid)
);INSERT INTO score(student_id, course_id, number) VALUES(1,1,60),(1,2,59),(2,2,100);SELECT * FROM score;DELETE FROM score WHERE sid=6;# 二、操作表
#
# 1、自行創(chuàng)建測(cè)試數(shù)據(jù)
#
# 2、查詢“生物”課程比“物理”課程成績(jī)高的所有學(xué)生的學(xué)號(hào);
SELECT B.student_id FROM
(SELECT score.student_id,score.number FROM score INNER JOIN course ON score.course_id = course.cid WHERE course.cname="生物") as AINNER JOIN
(SELECT score.student_id,score.number FROM score INNER JOIN course ON score.course_id = course.cid WHERE course.cname="物理") as BON A.student_id=B.student_id AND A.number>B.number;# 3、查詢平均成績(jī)大于60分的同學(xué)的學(xué)號(hào)和平均成績(jī);
INSERT INTO score(student_id, course_id, number) VALUES(2,3,56),(3,1,46),(3,2,59),(3,3,71),(4,1,90),(4,2,27);
SELECT student_id,avg(number) 平均成績(jī) FROM score GROUP BY student_id HAVING avg(number)>60;
# 4、查詢所有同學(xué)的學(xué)號(hào)、姓名、選課數(shù)、總成績(jī);
SELECT student.sid,student.sname,count(student.class_id) 選課數(shù),sum(number) 總成績(jī)FROM student INNER JOIN score ON student.sid = score.student_id GROUP BY sname ORDER BY 總成績(jī);# 5、查詢姓“波”的老師的個(gè)數(shù);
SELECT count(*) 波老師個(gè)數(shù) FROM teacher WHERE tname LIKE "波%";
INSERT INTO teacher(tname) VALUES ("波大");
# 6、查詢沒學(xué)過“葉平”老師課的同學(xué)的學(xué)號(hào)、姓名;-- 得到所有同學(xué)學(xué)過的課程及其對(duì)應(yīng)的老師,然后對(duì)應(yīng)篩選
INSERT INTO teacher(tname) VALUES("葉平");
INSERT INTO course(cname, teacher_id) VALUES("歷史",5);
INSERT INTO score(student_id, course_id, number) VALUES(1,5,81);SELECT student.sid,student.sname,A.tname FROM scoreINNER JOIN student ON score.student_id = student.sidINNER JOIN (SELECT DISTINCT course.cid,course.teacher_id,course.cname,teacher.tname FROMcourse INNER JOIN teacher ON course.teacher_id = teacher.tid) AS A ON score.course_id = A.cidGROUP BY A.tname HAVING A.tname!="葉平";# 7、查詢學(xué)過“1”并且也學(xué)過編號(hào)“2”課程的同學(xué)的學(xué)號(hào)、姓名;
INSERT INTO student(sname,gender,class_id) VALUES("張三","男",3);
INSERT INTO score(student_id, course_id, number) VALUES(5,2,63);SELECT B.sid 學(xué)號(hào),B.sname 姓名 FROM(SELECT student.sid,student.sname FROM score INNER JOIN student ON score.student_id = student.sid
WHERE course_id=1) AS AINNER JOIN(SELECT student.sid,student.sname FROM score INNER JOIN student ON score.student_id = student.sid
WHERE course_id=2) AS B ON A.sid = B.sid;# 8、查詢學(xué)過“葉平”老師所教的所有課的同學(xué)的學(xué)號(hào)、姓名;
SELECT * FROM student; SELECT * FROM score;
INSERT INTO student(sname, gender, class_id) VALUES("王五","男",3);
INSERT INTO score(student_id, course_id, number) VALUES(8,5,93);SELECT student.sid 學(xué)號(hào),student.sname 姓名 FROM score INNER JOIN studentON score.student_id = student.sid AND course_id=5;# 9、查詢課程編號(hào)“2”的成績(jī)比課程編號(hào)“1”課程低的所有同學(xué)的學(xué)號(hào)、姓名;
INSERT INTO student(sname, gender, class_id) VALUES("趙六","女",2);
INSERT INTO score(student_id, course_id, number) VALUES(9,2,65),(9,1,70);
UPDATE score SET number = 65 WHERE sid=21;SELECT * FROM student WHERE(SELECT number FROM score WHERE student.sid=score.student_id AND score.course_id=2)<(SELECT number FROM score WHERE student.sid=score.student_id AND score.course_id=1);# 10、查詢有課程成績(jī)小于60分的同學(xué)的學(xué)號(hào)、姓名;
SELECT student.sid,student.sname FROM studentINNER JOIN score ON student.sid = score.student_id WHERE score.number<60 GROUP BY student.sname;
INSERT INTO student(sname, gender, class_id) VALUES("鋼镚","男",2);
INSERT INTO score(student_id, course_id, number) VALUES(4,3,48);
# 11、查詢沒有學(xué)全所有課的同學(xué)的學(xué)號(hào)、姓名;
-- 測(cè)試
SELECT count(cid) 總課程數(shù) FROM course;
SELECT count(course_id) study_course FROM score GROUP BY student_id;
SELECT * FROM (SELECT count(cid) 總課程數(shù) FROM course) AS AINNER JOIN(SELECT count(course_id) study_course FROM score GROUP BY student_id) AS BON A.總課程數(shù) = B.study_course;-- 正確答案
SELECT student.sid,student.sname,count(course_id) 學(xué)習(xí)課程數(shù) FROM score INNER JOIN studentON score.student_id = student.sid GROUP BY student_idHAVING count(course_id)=(SELECT count(cid) FROM course);# 12、查詢至少有一門課與學(xué)號(hào)為“001”的同學(xué)所學(xué)相同的同學(xué)的學(xué)號(hào)和姓名;
#
# 13、查詢至少學(xué)過學(xué)號(hào)為“001”同學(xué)所有一門課的其他同學(xué)學(xué)號(hào)和姓名;
#
# 14、查詢和“2”號(hào)的同學(xué)學(xué)習(xí)的課程完全相同的其他同學(xué)學(xué)號(hào)和姓名;# 15、刪除學(xué)習(xí)“葉平”老師課的SC表記錄;
#
# 16、向SC表中插入一些記錄,這些記錄要求符合以下條件:①?zèng)]有上過編號(hào)“002”課程的同學(xué)學(xué)號(hào);②插入“002”號(hào)課程的平均成績(jī);
#
# 17、按平均成績(jī)從低到高顯示所有學(xué)生的“語文”、“數(shù)學(xué)”、“英語”三門的課程成績(jī),按如下形式顯示: 學(xué)生ID,語文,數(shù)學(xué),英語,有效課程數(shù),有效平均分;
#
# 18、查詢各科成績(jī)最高和最低的分:以如下形式顯示:課程ID,最高分,最低分;
SELECT course_id,max(number) 最高分,min(number) 最低分 FROM score GROUP BY course_id;INSERT INTO score(student_id, course_id, number) VALUES(2,1,76);
# 19、按各科平均成績(jī)從低到高和及格率的百分?jǐn)?shù)從高到低順序;-- 分析求出平均成績(jī)并計(jì)算及格率
SELECT avg(number) 課程平均成績(jī) FROM score GROUP BY course_id;
SELECT count(student_id) 各科不及格人數(shù) FROM score WHERE number>60 GROUP BY course_id;
SELECT count(student_id) 各科總?cè)藬?shù) FROM score GROUP BY course_id;-- 答案如下
SELECT A.課程平均成績(jī),B.各科不及格人數(shù)/C.各科總?cè)藬?shù) AS 及格率 FROM(SELECT course_id,avg(number) 課程平均成績(jī) FROM score GROUP BY course_id) AS AINNER JOIN(SELECT course_id,count(student_id) 各科不及格人數(shù) FROM score WHERE number>60 GROUP BY course_id) AS BINNER JOIN(SELECT course_id,count(student_id) 各科總?cè)藬?shù) FROM score GROUP BY course_id) AS CON A.course_id = B.course_id AND A.course_id = C.course_id ORDER BY A.課程平均成績(jī);# 20、課程平均分從高到低顯示(顯示任課老師);
SELECT teacher.tname,course.cname FROM teacher,course WHERE course.teacher_id = teacher.tid;
SELECT avg(number) 課程平均分 FROM teacher,score GROUP BY course_id;
-- 答案如下
SELECT A.tname 任課老師,B.課程平均分 FROM(SELECT teacher.tname,course.cname,course.cid FROM teacher,course WHERE course.teacher_id = teacher.tid) AS AINNER JOIN(SELECT avg(number) 課程平均分,teacher.tname,score.course_id FROM teacher,score GROUP BY course_id) AS BON A.cid=B.course_id ORDER BY B.課程平均分 DESC;# 21、查詢各科成績(jī)前三名的記錄:(不考慮成績(jī)并列情況)
SELECT * FROM score ORDER BY course_id;# 22、查詢每門課程被選修的學(xué)生數(shù);-- 分析 根據(jù)成績(jī)根據(jù)課程進(jìn)行分類,按照學(xué)生ID統(tǒng)計(jì)次數(shù)
SELECT score.course_id 課程ID,count(student_id) 課程人次 FROM score GROUP BY course_id;# 23、查詢出只選修了一門課程的全部學(xué)生的學(xué)號(hào)和姓名;
SELECT student.sid,student.sname FROM(SELECT * FROM score GROUP BY student_id HAVING count(student_id)=1) AS AINNER JOIN student ON A.student_id = student.sid;
# 24、查詢男生、女生的人數(shù);
SELECT boy.男,girl.女 FROM(SELECT count(gender) 男 FROM student WHERE gender="男") as boy,(SELECT count(gender) 女 FROM student WHERE gender="女") as girl;# 25、查詢姓“張”的學(xué)生名單;
SELECT sid,sname FROM student WHERE sname LIKE "張%";
# 26、查詢同名同姓學(xué)生名單,并統(tǒng)計(jì)同名人數(shù);
SELECT sname 姓名,count(sname) 同名人數(shù) FROM student GROUP BY sname;
# 27、查詢每門課程的平均成績(jī),結(jié)果按平均成績(jī)升序排列,平均成績(jī)相同時(shí),按課程號(hào)降序排列;
SELECT A.cid 課程號(hào),B.課程平均分 FROM(SELECT teacher.tname,course.cname,course.cid FROM teacher,course WHERE course.teacher_id = teacher.tid) AS AINNER JOIN(SELECT avg(number) 課程平均分,teacher.tname,score.course_id FROM teacher,score GROUP BY course_id) AS BON A.cid=B.course_id ORDER BY B.課程平均分 DESC;# 28、查詢平均成績(jī)大于85的所有學(xué)生的學(xué)號(hào)、姓名和平均成績(jī);
SELECT student.sid 學(xué)號(hào),student.sname 姓名,avg(score.number) 平均成績(jī) FROMstudent INNER JOIN score ON student.sid = score.student_id GROUP BY sname;# 29、查詢課程名稱為“生物”,且分?jǐn)?shù)低于60的學(xué)生姓名和分?jǐn)?shù);
SELECT course.cname 課程,student.sname 姓名,score.number 分?jǐn)?shù) FROM score INNER JOIN student INNER JOIN courseON score.student_id = student.sid AND score.course_id=course.cidWHERE course.cname="生物" AND score.number<60;# 30、查詢課程編號(hào)為3且課程成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)和姓名;
SELECT student.sid 學(xué)號(hào),student.sname 姓名 FROM score INNER JOIN studentON score.student_id = student.sid AND score.course_id=3 AND score.number>80;# 31、求選了課程的學(xué)生人數(shù)
INSERT INTO student(sname, gender, class_id) VALUES("李四","男",3);
INSERT INTO student(sname, gender, class_id) VALUES("勝七","女",2);
INSERT INTO score(student_id, course_id, number) VALUES(7,1,74);
-- 答案如下
SELECT count(A.student_id) 選課人數(shù) FROM (SELECT DISTINCT student_id FROM score) AS A;# 32、查詢選修“蒼空”老師所授課程的學(xué)生中,成績(jī)最高的學(xué)生姓名及其成績(jī);
SELECT student.sname 姓名,max(number) 成績(jī) FROM score INNER JOIN student INNER JOIN course INNER JOIN teacherON score.student_id=student.sid AND score.course_id=course.cid AND course.teacher_id=teacher.tidWHERE teacher.tname="蒼空";# 33、查詢各個(gè)課程及相應(yīng)的選修人數(shù);
SELECT score.course_id 課程ID,count(student_id) 課程人次 FROM score GROUP BY course_id;
# 34、查詢不同課程但成績(jī)相同的學(xué)生的學(xué)號(hào)、課程號(hào)、學(xué)生成績(jī);
#
# 35、查詢每門課程成績(jī)最好的前兩名;
#
# 36、檢索至少選修兩門課程的學(xué)生學(xué)號(hào);-- 分析 根據(jù)學(xué)生ID進(jìn)行分組,統(tǒng)計(jì)課程出現(xiàn)次數(shù),篩選課程次數(shù)大于等于2的學(xué)生
SELECT student_id FROM score GROUP BY student_id HAVING count(course_id)>=2;
# 37、查詢?nèi)繉W(xué)生都選修的課程的課程號(hào)和課程名;
SELECT score.student_id 學(xué)生ID,course.cname 所選課程,course.cid 課程ID FROM score INNER JOIN courseON score.course_id = course.cid ORDER BY 學(xué)生ID;# 38、查詢沒學(xué)過“葉平”老師講授的任一門課程的學(xué)生姓名;
#
# 39、查詢兩門以上不及格課程的同學(xué)的學(xué)號(hào)及其平均成績(jī);
SELECT A.student_id 學(xué)號(hào),B.平均成績(jī) FROM(SELECT student_id FROM score WHERE number<60 GROUP BY student_id HAVING count(number)>=2) AS A
INNER JOIN(SELECT student_id,avg(number) 平均成績(jī) FROM score GROUP BY student_id) AS B ON A.student_id=B.student_id;# 40、檢索“1”課程分?jǐn)?shù)小于60,按分?jǐn)?shù)降序排列的同學(xué)學(xué)號(hào);
SELECT student_id FROM score WHERE course_id=1 AND number<60;
# 41、刪除“2”同學(xué)的“1”課程的成績(jī);-- 此題已答
轉(zhuǎn)載于:https://www.cnblogs.com/nulige/p/6544052.html
總結(jié)
- 上一篇: 光大步步高联名信用卡怎么样?丰富权益盘点
- 下一篇: Java中MySQL事务处理举例