mysql練習題-2016.12.16

來源:互聯網
上載者:User

標籤:teacher   family   多表查詢   檢索   習題   sts   練習題   str   .com   

>>>>>>>>>>

練習時間:2016.12.16

編輯時間:2016-12-20-->22:12:08

題:
涉及:多表查詢、exists、count()、group by、order by 1.1 關係模式  學生student;    SNO:學號;    SNAME:姓名;    AGE:年齡 ;    SEX:性別  課程course:CNO:課程代碼,CNAME:課程名稱,TEACHER:教師  學產生績SC:SNO:學號,CNO:課程代碼,SCORE:成績    1.2 要求一 用SQL語言完成表的建立以及資料的插入。  1.3 要求二 用SQL語言完成如下要求:  (1) 檢索至少選修"程軍"老師所授全部課程的學生姓名(SNAME);   (2) 檢索"李強"同學不學課程的課程號(CNO);  (3) 檢索選修不少於3門課程的學生學號(SNO);  (4) 檢索選修全部課程的學生姓名(SNAME)。  (5) 檢索不學"C語言"的學生資訊   1.4 要求三 請用SQL語言完成如下查詢: (1)查詢“程軍”老師所教授的所有課程; (2)查詢“李強”同學所有課程的成績; (3)查詢課程名為“C語言”的平均成績; (4)查詢選修了所有課程的同學資訊。   1.5 要求四 (1)檢索王老師所授課程的課程號和課程名。 (2)檢索年齡大於23歲的男學生的學號和姓名。 (3)檢索至少選修王老師所授課程中一門課程的女學生姓名。 (4)檢索李同學不學的課程的課程號。 (5)檢索至少選修兩門課程的學生學號。 (6)檢索全部學生都選修的課程的課程號與課程名。 (7)檢索選修課程包含王老師所授課的學生學號。 (8)統計有學生選修的課程門數。 (9)求選修K1課程的學生的平均年齡。 (10)求王老師所授課程的每門課程的學生平均成績。 (11)統計每門課程的學生選修人數(超過2人的課程才統計)。要求輸出課程號和選修人數,查詢結果 按人數降序排列,若人數相同,按課程號升序排列。 (12)檢索學號比李同學大,而年齡比他小的學生姓名。 (13)檢索姓名以李打頭的所有學生的姓名和年齡。 (14)在SC中檢索成績為空白值的學生學號和課程號。 (15)求年齡大於女同學平均年齡的男學生姓名和年齡。 (16)求年齡大於所有女同學年齡的男學生姓名和年齡。>>>>>>>>>> 答:  ######## 1.2 要求一......用SQL語言完成表的建立以及資料的插入。#建立studentCREATE TABLE student(sno INT(10) COMMENT ‘學號‘,sname VARCHAR(10) COMMENT ‘姓名‘,age INT(3) COMMENT ‘年齡‘,sex VARCHAR(1) COMMENT ‘性別‘) #insert插入student資料INSERT INTO student(sno,sname,age,sex) VALUES(1,‘李強‘,18,‘男‘)INSERT INTO student(sno,sname,age,sex) VALUES(2,‘劉麗‘,188,‘女‘)INSERT INTO student(sno,sname,age,sex) VALUES(3,‘鳳凰‘,19,‘女‘)INSERT INTO student(sno,sname,age,sex) VALUES(4,‘婕拉‘,20,‘女‘)INSERT INTO student(sno,sname,age,sex) VALUES(5,‘張友‘,21,‘男‘)INSERT INTO student(sno,sname,age,sex) VALUES(6,‘孫悟空‘,500,‘男‘) #create建立courseCREATE TABLE course(cno VARCHAR(10) COMMENT ‘課程代碼‘,cname VARCHAR(10) COMMENT ‘課程名稱‘,teacher VARCHAR(10) COMMENT ‘教師‘) #insert插入course資料INSERT INTO course(cno,cname,teacher) VALUES(‘K1‘,‘C語言‘,‘王華‘)INSERT INTO course(cno,cname,teacher) VALUES(‘K2‘,‘C+語言‘,‘薛哥‘)INSERT INTO course(cno,cname,teacher) VALUES(‘K3‘,‘C++語言‘,‘薛哥‘)INSERT INTO course(cno,cname,teacher) VALUES(‘K4‘,‘java語言‘,‘薛哥‘)INSERT INTO course(cno,cname,teacher) VALUES(‘K5‘,‘資料庫原理‘,‘程軍‘)INSERT INTO course(cno,cname,teacher) VALUES(‘K6‘,‘linux語言‘,‘薛哥‘)INSERT INTO course(cno,cname,teacher) VALUES(‘K7‘,‘PHP語言‘,‘薛哥‘)INSERT INTO course(cno,cname,teacher) VALUES(‘K8‘,‘編譯原理‘,‘程軍‘) #create建立表SCCREATE TABLE sc(sno INT(10) COMMENT ‘學號‘,cno VARCHAR(10) COMMENT ‘課程代碼‘,score INT(10) COMMENT ‘成績‘) #insert插入sc資料INSERT INTO sc(sno,cno,score) VALUES(1,‘K1‘,83)INSERT INTO sc(sno,cno,score) VALUES(2,‘K1‘,85)INSERT INTO sc(sno,cno,score) VALUES(5,‘K1‘,92)INSERT INTO sc(sno,cno,score) VALUES(2,‘K5‘,90)INSERT INTO sc(sno,cno,score) VALUES(5,‘K5‘,84)INSERT INTO sc(sno,cno,score) VALUES(5,‘K8‘,80)  ######## 1.3 要求二.....用SQL語言完成如下要求:(1) 檢索至少選修"程軍"老師所授全部課程的學生姓名(SNAME);#檢索學生姓名SELECT sname FROM student  #檢索選修 程軍 課程的 課程代碼SELECT cno FROM course WHERE `teacher`=‘程軍‘#檢索選修課程的代碼的學號SELECT sno FROM sc WHERE cno IN (SELECT cno FROM course WHERE `teacher`=‘程軍‘)#結合SELECT sname FROM student WHERE sno IN (SELECT sno FROM sc WHERE cno IN (SELECT cno FROM course WHERE `teacher`=‘程軍‘))##以上結果為 錯誤的查詢方法!正確結果如下(運用exists): SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM course WHERE teacher = ‘程軍‘ AND NOT EXISTS(SELECT * FROM sc WHERE sno=student.`sno` AND cno=course.`cno`)) (2) 檢索"李強"同學不學課程的課程號(CNO);SELECT cno FROM course WHERE NOT EXISTS(SELECT * FROM student WHERE sname = ‘李強‘ AND EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.`sno` AND sc.`cno`=course.`cno`)) (2.2)查詢所有學生所學的科目編號以及成績

SELECT st.sno,st.sname,cr.cname,sc.`score`,cr.teacher
FROM student st,sc,course cr
WHERE st.sno=sc.`sno` AND cr.cno = sc.`cno`

(2.3)查詢沒有選修程軍老師課程的學生姓名:SELECT * FROM student st WHERE NOT EXISTS(SELECT * FROM course cr WHERE teacher = ‘程軍‘ AND EXISTS(SELECT * FROM sc WHERE sc.`cno`=cr.cno AND sc.`sno`=st.sno))(2.4)找出李強老師學生SELECT * FROM student st,sc,course cr WHERE sname=‘李強‘ AND sc.`sno`=st.`sno` AND sc.`cno`=cr.cno  (3) 檢索選修不少於3門課程cno的學生學號(SNO);#檢索學號select sno from scSELECT sno FROM sc GROUP BY sno  HAVING COUNT(*) >= 3 (4) 檢索選修全部課程的學生姓名(SNAME)#錯誤寫法:SELECT sname FROM student WHERE sno IN (SELECT sno FROM sc GROUP BY sno  HAVING COUNT(*) >= 3)#正確寫法:SELECT sname FROM student WHERE NOT EXISTS (SELECT * FROM course  WHERE NOT EXISTS(SELECT * FROM sc WHERE sc.sno=student.`sno` AND sc.cno=course.`cno`)) (5) 檢索不學"C語言"的學生資訊(因所有學生都有學習C語言,所以把C語言改為“編譯原理”)#錯誤寫法:SELECT * FROM student WHERE sno IN (SELECT sno FROM sc WHERE cno IN (SELECT cno FROM course WHERE cname <> ‘C語言‘))#正確寫法:SELECT * FROM student WHERE NOT EXISTS(SELECT * FROM course WHERE cname = ‘編譯原理‘ AND  EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.`sno` AND sc.`cno`=course.`cno`))  ######### 1.4 要求三 請用SQL語言完成如下查詢:(1)查詢“程軍”老師所教授的所有課程;SELECT cname FROM course WHERE teacher = ‘程軍‘ (2)查詢“李強”同學所有課程的成績;SELECT course.cname,sc.score FROM course,sc WHERE EXISTS(SELECT * FROM student WHERE sname = ‘李強‘ AND EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.`sno` AND sc.`cno`=course.`cno`))  GROUP BY course.cname (3)查詢課程名為“C語言”的平均成績;#C語言課程標號: select cno from course where cname = ‘C語言‘SELECT AVG(score) FROM sc WHERE cno = (SELECT cno FROM course WHERE cname = ‘C語言‘) (4)查詢選修了所有課程的同學資訊。SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM course  WHERE NOT EXISTS(SELECT * FROM sc WHERE sc.sno=student.`sno` AND sc.cno=course.`cno`))     ######## 1.5 要求四 (1)檢索王華老師所授課程的課程號和課程名。 SELECT cno,cname FROM course WHERE teacher = ‘王華‘ (2)檢索年齡大於23歲的男學生的學號和姓名。 SELECT sno,sname FROM student WHERE age >= 23 AND sex = ‘男‘ (3)檢索至少選修王老師所授課程中一門課程的女學生姓名。 SELECT sname FROM student WHERE EXISTS (SELECT * FROM course WHERE teacher = ‘王華‘ AND EXISTS (SELECT * FROM sc WHERE sno=student.`sno` AND cno=course.`cno`)) AND sex = ‘女‘ (4)檢索李強同學不學的課程的課程號。SELECT cno FROM course WHERE NOT EXISTS(SELECT * FROM student WHERE sname = ‘李強‘ AND EXISTS (SELECT * FROM sc WHERE sno=student.`sno` AND cno=course.`cno`)) (5)檢索至少選修兩門課程的學生學號。SELECT sno FROM sc GROUP BY sno HAVING COUNT(*) >= 2 (6)檢索全部學生都選修的課程的課程號與課程名。SELECT cno,cname FROM course WHERE NOT EXISTS(SELECT * FROM student WHERE NOT EXISTS(SELECT * FROM sc WHERE sc.`sno`=student.`sno` AND sc.`cno`=course.`cno`)) (7)檢索選修課程包含王華老師所授課的學生學號。SELECT sno FROM student WHERE EXISTS(SELECT * FROM course WHERE teacher = ‘王華‘ AND EXISTS(SELECT * FROM sc WHERE sc.`sno`=student.`sno` AND sc.`cno`=course.`cno`)) (8)統計所有學生選修的課程門數。SELECT sname,sc.`sno`,COUNT(cno) FROM student,sc  WHERE  sc.`sno`=student.`sno` GROUP BY sno (9)求選修K1課程的學生的平均年齡。SELECT AVG(age) FROM student WHERE EXISTS (SELECT * FROM sc WHERE cno=‘k1‘ AND sc.`sno`=student.`sno`) (10)求王華老師所授課程的每門課程的學生平均成績。  SELECT sno,AVG(score) FROM sc  WHERE EXISTS (SELECT * FROM course WHERE teacher=‘程軍‘ AND sc.`cno`=course.`cno` ) GROUP BY cno(11)統計每門課程的學生選修人數(超過2人的課程才統計)。要求輸出課程號和選修人數,查詢結果 按人數降序排列,若人數相同,按課程號升序排列。SELECT COUNT(sno),cno FROM sc GROUP BY cno HAVING COUNT(sno)>=2 ORDER BY COUNT(sno) ASC (12)檢索學號比李強同學大,而年齡比他小的學生姓名。 SELECT sname FROM student WHERE sno>(SELECT sno FROM student WHERE sname=‘李強‘) AND age> (SELECT age FROM student WHERE sname=‘李強‘) (13)檢索姓名以李打頭的所有學生的姓名和年齡。 SELECT sname,age FROM student WHERE sname LIKE ‘%李%‘ (14)在SC中檢索成績為空白值的學生學號和課程號。 SELECT sno,cno FROM student,course WHERE EXISTS (SELECT * FROM sc WHERE score is NULL AND sc.`sno`=student.`sno` AND sc.`cno`=course.`cno`) (15)求年齡大於女同學平均年齡的男學生姓名和年齡。SELECT sname,age FROM student WHERE sex = ‘男‘ AND age >(SELECT AVG(age) FROM student WHERE sex = ‘女‘) (16)求年齡大於所有女同學年齡的男學生姓名和年齡。SELECT sname,age FROM student WHERE age>(SELECT max(age) FROM student WHERE sex=‘女‘) AND sex=‘男‘>>>>>>>>>>>>>>>>>>>> 查詢學號為1的學生 選修了的課程#方式一:SELECT * FROM course WHERE cno = (SELECT cno FROM sc WHERE sno=1)#方式二:SELECT * FROM course WHERE  EXISTS (SELECT * FROM student WHERE sno = 1 AND EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.sno AND sc.`cno`=course.`cno`)) 查詢學號為1的學生 是否選修“程軍”老師的課程SELECT * FROM course WHERE teacher = ‘程軍‘ AND EXISTS (SELECT * FROM student WHERE sno = 1 AND EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.sno AND sc.`cno`=course.`cno`)) 查詢學號為1的學生 是否選修了“程軍”老師的課程,如果沒有選修,請輸出該同學沒有選修的課程資訊SELECT * FROM course WHERE teacher = ‘程軍‘ AND NOT EXISTS (SELECT * FROM student WHERE sno = 1 AND EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.sno AND sc.`cno`=course.`cno`)) 查看選修了程軍老師課程的學生姓名資訊:SELECT * FROM student WHERE EXISTS (SELECT * FROM course WHERE teacher = ‘程軍‘ AND  EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.sno AND sc.`cno`=course.`cno`))查看沒有全部選修程軍老師課程的學生資訊SELECT * FROM student WHERE EXISTS (SELECT * FROM course WHERE teacher = ‘程軍‘ AND NOT EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.sno AND sc.`cno`=course.`cno`))查看沒有選修程軍老師課程的學生姓名資訊:SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM course WHERE teacher = ‘程軍‘ AND EXISTS (SELECT * FROM sc WHERE sc.`sno`=student.sno AND sc.`cno`=course.`cno`))查看選修了程軍老師所有課程的學生姓名資訊:SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM course WHERE teacher=‘程軍‘ AND NOT EXISTS(SELECT cno FROM sc WHERE sc.`sno`=student.`sno` AND course.`cno`=sc.`cno`))  (註:個人所寫,並不保證全部正確、寫法最優,如有意見,歡迎指出)>>>>>>>>>>

mysql練習題-2016.12.16

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.