現有班級、學生以及成績三張表:
備註:表名稱和字段名稱可以參考表格內單詞設置
根據表格信息,按要求完成下面SQL語句的編寫:
1、使用SQL分別創建班級表、學生表以及成績表的表結構,表內數據可以一條一條的插入也可以批量插入
2、查詢每個班級中每一科的平均成績,顯示數據包括班級名稱,課程以及平均分數,並按照班ID升序排列
3、查詢所有同學的學生ID,姓名,性別以及總分,並按照成績從高到低排序
4、查詢課程成績小於75分的學生ID,姓名,班級,課程以及分數
5、將李米米的數學成績修改爲88分
6、計算重點班中每一科的平均成績,顯示數據包括:重點班級ID,班級名稱,課程,平均分數,按照降序排列
1、
-- 班級表
CREATE TABLE class(
c_id TINYINT(3) UNSIGNED ZEROFILL AUTO_INCREMENT KEY COMMENT '班級ID',
name VARCHAR(50) NOT NULL UNIQUE COMMENT '名稱',
descrip VARCHAR(200) DEFAULT '' COMMENT '備註'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT class(name,descrip) VALUES('一年級一班','重點班'),
('一年級二班','重點班'),
('二年級一班','重點班'),
('二年級二班','普通班');
-- 學生表
CREATE TABLE student(
s_id INT UNSIGNED AUTO_INCREMENT KEY COMMENT '學生ID',
name VARCHAR(50) NOT NULL COMMENT '姓名',
gender ENUM('男','女') NOT NULL DEFAULT '男' COMMENT '性別',
class_id TINYINT UNSIGNED NOT NULL COMMENT '班級',
CONSTRAINT `fk_class_id` FOREIGN KEY(class_id) REFERENCES class(c_id)
)ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;
INSERT student(name,gender,class_id) VALUES ('趙曉明','男','001'),
('王曉紅','女','001'),
('張曉曉','女','001'),
('孫琪琪','女','003'),
('李米米','女','004'),
('趙曉剛','男','003'),
('張大寶','男','002'),
('張蘭','女','004'),
('孫好','男','001');
-- 成績表
CREATE TABLE score(
sc_id INT(3) UNSIGNED ZEROFILL AUTO_INCREMENT KEY COMMENT '成績ID',
s_id INT UNSIGNED NOT NULL COMMENT '學生ID',
course VARCHAR(50) NOT NULL COMMENT '課程',
mark TINYINT UNSIGNED NOT NULL COMMENT '分數',
CONSTRAINT `fk_s_id` FOREIGN KEY(s_id) REFERENCES student(s_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT score(s_id,course,mark) VALUES ('1001','數學','98'),
('1001','語文','90'),
('1001','英語','97'),
('1002','數學','96'),
('1002','語文','88'),
('1003','語文','88'),
('1002','英語','91'),
('1003','數學','96'),
('1003','英語','86'),
('1004','數學','89'),
('1004','語文','82'),
('1004','英語','83'),
('1005','數學','75'),
('1005','語文','86'),
('1005','英語','77'),
('1006','數學','81'),
('1006','語文','77'),
('1006','英語','60'),
('1007','數學','89'),
('1007','語文','56'),
('1007','英語','70'),
('1008','數學','87'),
('1008','語文','55'),
('1008','英語','66'),
('1009','數學','78'),
('1009','語文','60'),
('1009','英語','52');
2、
-- 查詢每個班級中每一科的平均成績,顯示數據包括班級名稱,課程以及平均分數,並按照班ID升序排列
SELECT c.name AS '班級',
sc.course AS '課程',
AVG(sc.mark) AS '平均分'
FROM score AS sc
JOIN student AS s
ON sc.s_id=s.s_id
JOIN class AS c
ON s.class_id=c.c_id
GROUP BY c.name,sc.course
ORDER BY c.c_id;
3、
-- 查詢所有同學的學生ID,姓名,性別以及總分,並按照成績從高到低排序
SELECT sc.s_id AS '學生ID',
s.name AS '姓名',
s.gender AS '性別',
SUM(sc.mark) AS '總分'
FROM score AS sc
JOIN student AS s
ON sc.s_id=s.s_id
GROUP BY sc.s_id
ORDER BY '總分' DESC;
4、
-- 查詢課程成績小於75分的學生ID,姓名,班級,課程以及分數
SELECT sc.s_id AS '學生ID',
s.name AS '姓名',
c.name AS '班級',
sc.course AS '課程',
sc.mark AS '分數'
FROM score AS sc
JOIN student AS s
ON sc.s_id=s.s_id
JOIN class AS c
ON s.class_id=c.c_id
WHERE sc.mark <75;
5、
-- 將李米米的數學成績修改爲88分
UPDATE score SET mark=88
WHERE s_id IN (
SELECT s_id FROM student WHERE name='李米米'
) AND course='數學';
6、
-- 計算重點班中每一科的平均成績,顯示數據包括:重點班級ID,班級名稱,課程,平均分數,按照降序排列
SELECT c.c_id AS '班級ID',
c.name AS '班級名',
sc.course AS '課程',
AVG(sc.mark) AS '平均分'
FROM score AS sc
JOIN student AS s
ON sc.s_id=s.s_id
JOIN class AS c
ON s.class_id=c.c_id
WHERE c.descrip='重點班'
GROUP BY sc.course,c.name
ORDER BY sc.course DESC,AVG(sc.mark) DESC;