數據庫-自由編程

現有班級、學生以及成績三張表:

備註:表名稱和字段名稱可以參考表格內單詞設置

根據表格信息,按要求完成下面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;

 

發佈了334 篇原創文章 · 獲贊 66 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章