关系数据库练习题

一、 创建表格 (DDL)

SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
-- 学生表
CREATE TABLE student (
sno VARCHAR(10) PRIMARY KEY,
sname VARCHAR(20),
sex CHAR(1),
age INT,
dept VARCHAR(20)
);

-- 教师表
CREATE TABLE teacher (
tno VARCHAR(10) PRIMARY KEY,
tname VARCHAR(20),
sex CHAR(1),
title VARCHAR(20),
dept VARCHAR(20)
);

-- 课程表
CREATE TABLE course (
cno VARCHAR(10) PRIMARY KEY,
cname VARCHAR(30),
credit INT
);

-- 选课表
CREATE TABLE sc (
sno VARCHAR(10),
cno VARCHAR(10),
score INT,
PRIMARY KEY (sno, cno)
);

-- 授课表
CREATE TABLE tc (
tno VARCHAR(10),
cno VARCHAR(10),
PRIMARY KEY (tno, cno)
);

二、 插入数据 (DML)

SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
-- 学生表数据
INSERT INTO student VALUES
('S001', '张三', '男', 20, '计算机'),
('S002', '李四', '女', 19, '计算机'),
('S003', '王五', '男', 21, '软件工程'),
('S004', '赵六', '女', 20, '计算机'),
('S005', '孙七', '男', 22, '软件工程'),
('S006', '周八', '男', 23, '物联网');

-- 教师表数据
INSERT INTO teacher VALUES
('T001', '刘杨', '男', '教授', '计算机'),
('T002', '石丽', '女', '副教授', '计算机'),
('T003', '顾伟', '男', '讲师', '软件工程'),
('T004', '赵礼', '男', '教授', '软件工程'),
('T005', '孙梅', '女', '讲师', '物联网');

-- 课程表数据
INSERT INTO course VALUES
('C001', '数据库原理', 4),
('C002', '数据结构', 4),
('C003', '计算机网络', 3),
('C004', '操作系统', 4),
('C005', '物联网导论', 2);

-- 选课表数据
INSERT INTO sc VALUES
('S001', 'C001', 85),
('S001', 'C002', 78),
('S002', 'C001', 92),
('S002', 'C003', 88),
('S003', 'C002', 65),
('S003', 'C004', 72),
('S004', 'C001', 45),
('S004', 'C003', 81),
('S005', 'C004', 69),
('S006', 'C005', 91);

-- 授课表数据
INSERT INTO tc VALUES
('T001', 'C001'),
('T001', 'C002'),
('T002', 'C003'),
('T003', 'C002'),
('T004', 'C004'),
('T005', 'C005');

三、 练习题 SQL 语句

题号 题目描述 SQL 代码
第1题 查询计算机系或年龄大于20岁的学生 SELECT * FROM student WHERE dept = '计算机' UNION SELECT * FROM student WHERE age > 20;
第2题 查询计算机系中年龄不大于20岁的学生 SELECT * FROM student WHERE dept = '计算机' AND sno NOT IN (SELECT sno FROM student WHERE age > 20 AND dept = '计算机');
第3题 查询既选修了C001又选修了C002的学生 SELECT sno FROM sc WHERE cno = 'C001' AND sno IN (SELECT sno FROM sc WHERE cno = 'C002');
第4题 生成所有学生和课程的可能选课组合 SELECT * FROM student CROSS JOIN course;
第5题 查询计算机系年龄大于20岁的学生 SELECT * FROM student WHERE dept = '计算机' AND age > 20;
第6题 查询所有学生的姓名和所在院系 SELECT sname, dept FROM student;
第7题 查询成绩大于80分的学生姓名和课程名 SELECT s.sname, c.cname FROM sc JOIN student s ON sc.sno = s.sno JOIN course c ON sc.cno = c.cno WHERE sc.score > 80;
第8题 查询学生及其选课情况(含未选课者) SELECT * FROM student LEFT JOIN sc ON student.sno = sc.sno;
第9题 查询选修了所有课程的学生姓名 SELECT sname FROM student WHERE NOT EXISTS ( SELECT cno FROM course WHERE cno NOT IN ( SELECT cno FROM sc WHERE sc.sno = student.sno ) );
第10题 查询年龄不等于20岁的学生 SELECT * FROM student WHERE age != 20;
第11-1 查询计算机系且年龄大于20岁的学生 SELECT * FROM student WHERE dept = '计算机' AND age > 20;
第11-2 查询计算机系或年龄大于20岁的学生 SELECT * FROM student WHERE dept = '计算机' OR age > 20;
第11-3 查询不是计算机系的学生 SELECT * FROM student WHERE NOT (dept = '计算机');
第12题 综合查询:计算机系学生选修、成绩>80的课程名及教师名 SELECT s.sname, c.cname, t.tname FROM student s JOIN sc ON s.sno = sc.sno JOIN course c ON sc.cno = c.cno JOIN tc ON c.cno = tc.cno JOIN teacher t ON tc.tno = t.tno WHERE s.dept = '计算机' AND sc.score > 80;
[up主专用,视频内嵌代码贴在这]