整卷阅览:
想要获取试卷原版请点击以下链接下载:
https://download.csdn.net/download/qq_53142796/88168133https://download.csdn.net/download/qq_53142796/88168133
解题过程:
数据库:studentdb
数据库表如下:
题目一:数据内容基本操作(每题4分,共20分)
1. 创建数据库studentdb
代码如下:
CREATE DATABASE studentdb;
USE studentdb;
2. 在studentdb 数据库中创建student表和score表,包括主外键关系
代码如下:
-- 创建student表
CREATE TABLE IF NOT EXISTS student (
STUID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
PHONE VARCHAR(20),
SEX VARCHAR(2),
BIRTHDAY DATE,
SCLASS VARCHAR(50)
);
-- 创建score表
CREATE TABLE IF NOT EXISTS score (
SCOREID INT PRIMARY KEY AUTO_INCREMENT,
STUID INT,
ENGLISH INT,
MATH INT,
FOREIGN KEY (STUID) REFERENCES student(STUID)
);
3. 插入一条学生信息:姓名:李冰,电话:18866567880,性别:男,出生日期:1980-05-22
代码如下:
INSERT INTO student (NAME, PHONE, SEX, BIRTHDAY)
VALUES ('李冰', '18866567880', '男', '1980-05-22');
SELECT * FROM student;
4. 修改学生编号为22的英语成绩为88
代码如下:
INSERT INTO student (STUID, NAME, PHONE, SEX, BIRTHDAY)
VALUES (22, '张三', '17866567770', '女', '1982-05-20');
INSERT INTO score (STUID, ENGLISH)
VALUES (22, 80);
SELECT * FROM student;
SELECT * FROM score;
UPDATE score
SET ENGLISH = 88
WHERE STUID = 22;
SELECT * FROM score;
5. 删除学生编号为35的学生信息
代码如下:
INSERT INTO student (STUID, NAME, PHONE, SEX, BIRTHDAY)
VALUES (35, '李四', '14086567770', '男', '1981-05-20');
SELECT * FROM student;
DELETE FROM student
WHERE STUID = 35;
题目二:查询操作(每题5分)
1. 查询所有性别为男的学生信息
代码如下:
INSERT INTO student (NAME, PHONE, SEX, BIRTHDAY)
VALUES ('王五', '15066567880', '男', '1988-08-22'),
('王柳', '14366567880', '男', '1982-08-22'),
('马七', '19466567880', '女', '1995-09-22'),
('马坝', '14276567880', '男', '1995-04-22'),
('张和', '18366567880', '男', '1980-05-22'),
('张武心', '19866567880', '男', '1995-01-22'),
('张二虎', '18766567880', '男', '1995-05-22');
SELECT * FROM student;
SELECT *
FROM student
WHERE SEX = '男';
2. 查询所有英语成绩和数学成绩都及格的成绩信息
代码如下:
ALTER TABLE score
ADD COLUMN MATH INT,
ADD COLUMN ENGLISH INT;
INSERT INTO score (STUID, MATH, ENGLISH)
VALUES (36, 85, 95), -- 插入王五的成绩
(37, 80, 90), -- 插入王柳的成绩
(38, 90, 85), -- 插入马七的成绩
(39, 85, 90), -- 插入马坝的成绩
(40, 85, 95), -- 插入张和的成绩
(41, 90, 95), -- 插入张武心的成绩
(42, 75, 85); -- 插入张二虎的成绩
SELECT * FROM score;
SELECT *
FROM score
WHERE ENGLISH >= 60 AND MATH >= 60;
3. 查询出生日期在1995年的学生信息
代码如下:
SELECT *
FROM student
WHERE YEAR(BIRTHDAY) = 1995;
4. 学校里面需要在每个月的1号为该月过生日的同学采购生日礼物,于是我们需要一张报表用于查询该年度每个月过生日的同学数,从而计算出每个月生日礼需要的经费,假设每一个同学的生日礼成本为88元钱,需要统计信息:月份、人数、生日礼费用,请用SQL实现
代码如下:
SELECT MONTH(BIRTHDAY) AS 月份, COUNT(*) AS 人数, COUNT(*) * 88 AS 生日礼费用
FROM student
WHERE YEAR(BIRTHDAY) = 1995
GROUP BY MONTH(BIRTHDAY);
5. 学校里面需要选拔一批英语超过95分的学生参加市里面的英语大赛,并且还要求成绩从高到低进行显示,方便筛选。学校教务处需要得到信息:学生编号、学生姓名、分数,请用SQL实现:
代码如下:
SELECT student.STUID, student.NAME, score.ENGLISH
FROM student
INNER JOIN score ON student.STUID = score.STUID
WHERE score.ENGLISH > 95
ORDER BY score.ENGLISH DESC;
6. 查询所有性别为女性的学生的学号,姓名和电话
代码如下:
SELECT STUID, NAME, PHONE
FROM student
WHERE SEX = '女';
7. 查询所有姓‘张’的且是三个字的学生信息,请用至少2中方式实现
代码如下:
-- 第一种 --
SELECT *
FROM student
WHERE NAME LIKE '张__' AND LENGTH(NAME) = 3;
-- 第二种 --
SELECT *
FROM student
WHERE NAME LIKE '张%'
AND SUBSTR(NAME, 2, 3) != '';
8. 查询数学成绩的最高分,最低分,平均分
代码如下:
SELECT MAX(MATH) AS 最高分, MIN(MATH) AS 最低分, AVG(MATH) AS 平均分
FROM score;
9. 查询数学成绩分数最低的学生人数
代码如下:
SELECT COUNT(*)
FROM score
WHERE MATH = (SELECT MIN(MATH) FROM score);
10. 查询既有数学成绩又有英语成绩的学生信息
代码如下:
SELECT s.STUID, s.NAME, sc.ENGLISH, sc.MATH
FROM student s
JOIN score sc ON s.STUID = sc.STUID
WHERE sc.ENGLISH IS NOT NULL AND sc.MATH IS NOT NULL;
11. 统计各班的不同性别的学生人数
代码如下:
SELECT SCLASS, SEX, COUNT(*) AS 人数
FROM student;
12. 查询所有参与考试的学生信息
代码如下:
SELECT DISTINCT student.*
FROM student
JOIN score ON student.STUID = score.STUID;
13. 查询所有数学成绩与英语成绩差20分以上的学生名单,这些学生将作为偏科学生由学校老师专门进行辅导。需要查询出的信息:学生编号、学生姓名、数学成绩、英语成绩、分数差值,请用SQL实现。
代码如下:
SELECT student.STUID, student.NAME, score.MATH, score.ENGLISH, ABS(score.MATH - score.ENGLISH) AS 分数差值
FROM student
JOIN score ON student.STUID = score.STUID
WHERE ABS(score.MATH - score.ENGLISH) > 20;
14. 为了将平均分低于80分的班级作为重点关注班级,需要信息:班级名称、平均分数,请用SQL实现。
代码如下:
SELECT student.SCLASS AS 班级名称, AVG((score.ENGLISH + score.MATH) / 2) AS 平均分数
FROM student
JOIN score ON student.STUID = score.STUID
GROUP BY student.SCLASS
HAVING AVG((score.ENGLISH + score.MATH) / 2) < 80;