-- 創建學生表,學號,姓名,性別,年齡,班級 DROP TABLE student; CREATE TEMPORARY TABLE student( Sno int, Sname VARCHAR(20), Sex VARCHAR(20), Sage int, Sdept VARCHAR(20) ); -- 創建 課程表, 課程編號,課程名稱 DROP TABLE course; create TEMPORARY TABLE course( Cno int, Cname VARCHAR(20) ); -- 創建 學生 課程關聯表,學號,課號,年級 create table sc( Sno int, Cno int, Grade int ); -- 插入課程數據 INSERT into course values(1, 'database'); INSERT into course values(2, 'math'); INSERT into course values(3, 'info system'); INSERT into course values(4, 'system'); INSERT into course values(5, 'data structure'); INSERT into course values(6, 'data deal'); -- 插入學生選課數據和成績 INSERT into sc values(95001,1,81); INSERT into sc values(95001,2,85); INSERT into sc values(95001,3,88); INSERT into sc values(95001,4,70); INSERT into sc values(95002,2,90); INSERT into sc values(95002,3,80); INSERT into sc values(95002,4,71); INSERT into sc values(95002,5,60); INSERT into sc values(95003,1,82); INSERT into sc values(95003,3,90); INSERT into sc values(95003,5,100); INSERT into sc values(95004,1,80); INSERT into sc values(95004,2,92); INSERT into sc values(95004,4,91); INSERT into sc values(95004,5,70); INSERT into sc values(95005,1,70); INSERT into sc values(95005,2,92); INSERT into sc values(95005,3,99); INSERT into sc values(95005,6,87); INSERT into sc values(95006,1,72); INSERT into sc values(95006,2,62); INSERT into sc values(95006,3,100); INSERT into sc values(95006,4,59); INSERT into sc values(95006,5,60); INSERT into sc values(95006,6,98); INSERT into sc values(95007,3,68); INSERT into sc values(95007,4,91); INSERT into sc values(95007,5,94); INSERT into sc values(95007,6,78); INSERT into sc values(95008,1,98); INSERT into sc values(95008,3,89); INSERT into sc values(95008,6,91); INSERT into sc values(95009,2,81); INSERT into sc values(95009,4,89); INSERT into sc values(95009,6,100); INSERT into sc values(95010,2,98); INSERT into sc values(95010,5,90); INSERT into sc values(95010,6,80); INSERT into sc values(95011,1,81); INSERT into sc values(95011,2,91); INSERT into sc values(95011,3,81); INSERT into sc values(95011,4,86); INSERT into sc values(95012,1,81); INSERT into sc values(95012,3,78); INSERT into sc values(95012,4,85); INSERT into sc values(95012,6,98); INSERT into sc values(95013,1,98); INSERT into sc values(95013,2,58); INSERT into sc values(95013,4,88); INSERT into sc values(95013,5,93); INSERT into sc values(95014,1,91); INSERT into sc values(95014,2,100); INSERT into sc values(95014,4,98); INSERT into sc values(95015,1,91); INSERT into sc values(95015,3,59); INSERT into sc values(95015,4,100); INSERT into sc values(95015,6,95); INSERT into sc values(95016,1,92); INSERT into sc values(95016,2,99); INSERT into sc values(95016,4,82); INSERT into sc values(95017,4,82); INSERT into sc values(95017,5,100); INSERT into sc values(95017,6,58); INSERT into sc values(95018,1,95); INSERT into sc values(95018,2,100); INSERT into sc values(95018,3,67); INSERT into sc values(95018,4,78); INSERT into sc values(95019,1,77); INSERT into sc values(95019,2,90); INSERT into sc values(95019,3,91); INSERT into sc values(95019,4,67); INSERT into sc values(95019,5,87); INSERT into sc values(95020,1,66); INSERT into sc values(95020,2,99); INSERT into sc values(95020,5,93); INSERT into sc values(95021,2,93); INSERT into sc values(95021,5,91); INSERT into sc values(95021,6,99); INSERT into sc values(95022,3,69); INSERT into sc values(95022,4,93); INSERT into sc values(95022,5,82); INSERT into sc values(95022,6,100); INSERT into student values(95001,"liyong","M",20,"CS"); INSERT into student values(95002,"licheng","F",19,"IS"); INSERT into student values(95003,"wangming","F",22,"MA"); INSERT into student values(95004,"zhangli","M",19,"IS"); INSERT into student values(95005,"liugang","M",18,"MA"); INSERT into student values(95006,"sunqing","M",23,"CS"); INSERT into student values(95007,"yisiling","F",19,"MA"); INSERT into student values(95008,"lina","F",18,"CS"); INSERT into student values(95009,"mengyuanyuan","F",18,"MA"); INSERT into student values(95010,"kongxiaotao","M",19,"CS"); INSERT into student values(95011,"baoxiaobo","M",18,"MA"); INSERT into student values(95012,"sunhua","F",20,"CS"); INSERT into student values(95013,"fengwei","M",21,"CS"); INSERT into student values(95014,"wangxiaoli","F",19,"CS"); INSERT into student values(95015,"wangjun","M",18,"MA"); INSERT into student values(95016,"qianguo","M",21,"MA"); INSERT into student values(95017,"wangfengjuan","F",18,"IS"); INSERT into student values(95018,"wangyi","F",19,"IS"); INSERT into student values(95019,"xingxiaoli","F",19,"IS"); INSERT into student values(95020,"zhaoqian","M",21,"IS"); INSERT into student values(95021,"zhouer","M",17,"MA"); INSERT into student values(95022,"zhangming","M",20,"MA"); SELECT * FROM course; -- 查詢學生總人數 SELECT count(*) FROM student; -- 查詢全體學生的學號與姓名 SELECT student.Sno, student.Sname FROM student; -- 查詢選修了課程的學生姓名, SELECT student.Sname FROM student JOIN sc on student.Sno = sc.Sno GROUP BY student.Sname; -- 計算1號課程的學生平均成績,sc表 SELECT avg(sc.Grade) FROM sc WHERE Cno = 1 GROUP BY Cno; -- 這一個寫法要快一點 select avg(Grade) from sc group by Cno having Cno=1; -- 查詢各科成績平均分 -- 這個所有學系的各科平均分 SELECT course.Cname, avg(sc.Grade) FROM course JOIN sc on course.Cno=sc.Cno GROUP BY course.Cname; -- 這樣寫要快一點 SELECT course.Cname, avg(sc.Grade) FROM course JOIN sc on course.Cno=sc.Cno GROUP BY course.Cname,sc.Cno; -- 查詢選修1號課程的學生最高分數 SELECT max(sc.Grade) FROM sc WHERE sc.Cno = 1; -- 這個寫法要快一點 select Grade from sc where Cno=1 order by Grade desc limit 1; select Grade from sc where Cno=1 distribute by Grade sort by Grade desc limit 1; -- 求各個課程號及相應的選課人數 SELECT sc.Cno, count(1) as num from sc GROUP BY Cno; -- 查詢選修了3門以上的課程的學生學號 SELECT sc.Sno FROM sc GROUP BY Sno HAVING count(1) > 3; -- 查詢學生信息,結果按學號全局有序 SELECT student.* FROM student ORDER BY student.Sno; -- 查詢學生信息,結果區分性別按年齡有序 SELECT * FROM student ORDER BY sex,Sage asc; -- 查詢每個學生及其選修課程的成績情況 SELECT student.*,course.Cname,sc.Grade FROM student JOIN sc on sc.Sno = student.Sno JOIN course on course.Cno=sc.Cno ORDER BY student.Sno; -- 查詢學生的得分情況 SELECT student.Sname,course.Cname,sc.Grade FROM student JOIN sc on sc.Sno = student.Sno JOIN course on course.Cno=sc.Cno ORDER BY student.Sname; -- 查詢選修2號課程且成績在90分以上的所有學生。 SELECT student.* FROM student JOIN sc on student.Sno=sc.Sno WHERE sc.Cno=2 and sc.Grade > 90; -- 查詢所有學生的信息,如果在成績表中有成績,則輸出成績表中的課程號 SELECT student.*,sc.Cno FROM student left JOIN sc on student.Sno=sc.Sno; -- 查詢與“licheng”在同一個系學習的學生 -- exists寫法於join差不多快 SELECT stu1.Sname FROM student stu1 WHERE exists ( SELECT * FROM student stu2 WHERE stu2.Sname = 'licheng' and stu1.Sdept = stu2.Sdept ); -- in 寫法 SELECT stu1.Sname FROM student stu1 WHERE stu1.Sdept in ( SELECT stu2.Sdept FROM student stu2 WHERE stu2.Sname = 'licheng' ); -- join寫法最快 SELECT stu.Sname FROM student stu JOIN student st on st.Sname = 'licheng' and st.Sdept = stu.Sdept and stu.Sname != 'licheng'; select s2.* from student as s1 inner join student as s2 on(s2.Sdept=s1.Sdept) where s1.Sname='licheng';
原先數據格式是這樣,寫了個腳本轉成insert 形式
ss = '''95001,李勇,男,20,CS 95002,劉晨,女,19,IS 95003,王敏,女,22,MA 95004,張立,男,19,IS 95005,劉剛,男,18,MA 95006,孫慶,男,23,CS 95007,易思玲,女,19,MA 95008,李娜,女,18,CS 95009,夢圓圓,女,18,MA 95010,孔小濤,男,19,CS 95011,包小柏,男,18,MA 95012,孫花,女,20,CS 95013,馮偉,男,21,CS 95014,王小麗,女,19,CS 95015,王君,男,18,MA 95016,錢國,男,21,MA 95017,王風娟,女,18,IS 95018,王一,女,19,IS 95019,邢小麗,女,19,IS 95020,趙錢,男,21,IS 95021,週二,男,17,MA 95022,鄭明,男,20,MA ''' rr = "INSERT into student values(%s);"; for el in ss.split('\n'): temp = "" i = 0 for ell in el.split(','): if i == 0 or i==3: temp +=ell+',' elif i == 1 or i == 2: temp +="\"%s\""%ell+',' else: temp += "\"%s\""%ell i += 1 print (rr%temp)