MySQL练习(学生表,课程表,选课表)超详解
生活随笔
收集整理的這篇文章主要介紹了
MySQL练习(学生表,课程表,选课表)超详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
mysql練習
- 一、題目:
- 二、創建學生,課程,選課表并插入數據
- 三、習題答案
環境: win10系統,MySQL數據庫
一、題目:
已知關系: S(Sno,Sname,Sage,Ssex,Sdept) C(cno,cname,cpno,ccredit) SC(sno,cno,grade) (其中sno:學號;sname:姓名;Ssex:性別;Sdept:系別;Sage :年齡;cno:課程號;cname:課程名; cpno: 直接先行課;ccredit:學分;grade:成績), 1、查詢“CS”系學生的基本信息;2、查詢“CS”系學生年齡不在19到21之間的學生的學號、姓名;3、查詢學生中的最大年齡;4、找出“計算機”系年齡最大的學生,顯示其學號、姓名;5、統計各系學生的人數,結果按升序排列;6、按系統計各系學生的平均年齡,結果按降序排列;7、查詢選修了“1”或“2”號課程的學生學號和姓名;8、查詢選修了課程名為“數據庫”且成績在60分以下的學生的學號、姓名和成績;9、查詢選修了3門以上課程的學生學號;10、查詢選修課程成績至少有一門在80分以上的學生學號;11、查詢選修課程成績均在80分以上的學生學號;12、查詢選修課程平均成績在80分以上的學生學號13、找出各系年齡最大的學生,顯示其學號、姓名;二、創建學生,課程,選課表并插入數據
首先選擇數據庫,然后直接執行下面代碼 【設置字符集為utf8】
CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8; use test; #創建學生表:包括學號,姓名,年齡,性別,院系 CREATE TABLE s ( Sno VARCHAR(7)PRIMARY KEY, Sname VARCHAR(10)NOT NULL, Sage INT, Ssex VARCHAR(2), Sdept VARCHAR(20) DEFAULT '計算機系' );#創建課程表:包括課程號,課程名,選修課課程號,學分 CREATE TABLE c ( Cno VARCHAR(10)PRIMARY KEY, Cname VARCHAR (20)NOT NULL, Cpno VARCHAR(10), Ccredit INT );#創建選課表 CREATE TABLE sc ( Sno VARCHAR(7), Cno VARCHAR(10), grade INT, FOREIGN KEY (sno) REFERENCES s(Sno), FOREIGN KEY (cno) REFERENCES c(cno) );# 向學生表S中插入數據 INSERT INTO s(Sno,Sname,Sage,Ssex,Sdept) VALUE("10001","張三",20,'男','計算機'),("10002","李梅",19,'女','計算機'),("10003","王五",18,'男','CS'),("10004","小明",21,'男','計算機'),("10006","黎明",18,'男','藝術表演'),("10008","杰克",21,'男','計算機'),("10005","小紅",22,'女','CS');# 向課程表C中插入數據 INSERT INTO c(Cno,Cname,Cpno,Ccredit) VALUE("1","離散數學",NULL,5),("2","線性代數",'3',6),("3","高等數學",NULL,4),("4","數據結構",'3',6),("5","操作系統",'1',4),("6","數據庫",'4',5);# 向選課表SC中插入數據 INSERT INTO sc(Sno,Cno,grade) VALUE("10001","1",70),("10001","6",56),("10003","4",90),("10003","5",83),("10004","1",75),("10004","3",90),("10008","1",70),("10008","5",70),("10008","6",88),("10002","1",85),("10002","6",89);三、習題答案
# 1、查詢“CS”系學生的基本信息; SELECT * FROM s WHERE Sdept="CS";# 2、查詢“CS”系學生年齡不在19到21之間的學生的學號、姓名; SELECT Sno,Sname,Sage,Sdept FROM s WHERE (Sage<19 OR Sage>21) AND Sdept = "CS";# 3、查詢學生中的最大年齡; SELECT MAX(Sage) FROM s;# 4、找出“計算機”系年齡最大的學生,顯示其學號、姓名; SELECT Sno, Sname FROM s WHERE Sdept="計算機" ORDER BY Sage DESC LIMIT 1;# 5、統計各系學生的人數,結果按升序排列; SELECT Sdept,COUNT(*) '人數' FROM s GROUP BY Sdept ORDER BY '人數';# 6、按系統計各系學生的平均年齡,結果按降序排列; SELECT Sdept,AVG(Sage) '平均年齡' FROM s GROUP BY Sdept ORDER BY '平均年齡'DESC;# 7、查詢選修了“1”或“2”號課程的學生學號和姓名; SELECT s.Sno,Sname FROM s JOIN sc ON s.`Sno`=sc.`Sno` WHERE Cno IN ("1","2");# 8、查詢選修了課程名為“數據庫”且成績在60分以下的學生的學號、姓名和成績; SELECT s.Sno,Sname FROM s JOIN sc ON s.`Sno`=sc.`Sno` JOIN c ON sc.`Cno`=c.`Cno` WHERE Cname ="數據庫" AND grade<60;# 9、查詢選修了3門以上課程的學生學號; SELECT sno FROM sc GROUP BY sc.Sno HAVING COUNT(*)>=3;# 10、查詢選修課程成績至少有一門在80分以上的學生學號; SELECT sno FROM sc GROUP BY sc.Sno HAVING MAX(grade)>80;# 11、查詢選修課程成績均在80分以上的學生學號; SELECT sno FROM sc GROUP BY sc.Sno HAVING MIN(grade)>80;# 12、查詢選修課程平均成績在80分以上的學生學號 SELECT sno FROM sc GROUP BY sc.Sno HAVING AVG(grade)>80;# 13、找出各系年齡最大的學生,顯示其學號、姓名; SELECT sno,Sname FROM s JOIN (SELECT Sdept,MAX(Sage) SageFROM sGROUP BY Sdept) a ON (s.`Sage`=a.Sage AND s.`Sdept` = a.Sdept) ;如果對你有幫助,請點個贊。
總結
以上是生活随笔為你收集整理的MySQL练习(学生表,课程表,选课表)超详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MYSQL创建课程表course_MyS
- 下一篇: linux cmake编译源码,linu