网上流传较广的50道SQL训练,前18道题的难度依次递增,从19题开始的后半部分算是循环练习和额外function的附加练习,难度恢复到普通状态。
以下答案都是我自己实践后写出来的,当前参考了网上其他的答案,目的是为了练习SQL,让自己写SQL语句变得熟练。
一、数据表介绍
以下SQL语句用的全是MySQL ,版本 5.7.16
- 学生表
Student(SId,Sname,Sage,Ssex)
–SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
CREATE TABLE `Student` (
`SId` varchar(10) DEFAULT NULL,
`Sname` varchar(10) DEFAULT NULL,
`Sage` datetime DEFAULT NULL,
`Ssex` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO Student (SId,Sname,Sage,Ssex) VALUES
('01','赵雷','1990-01-01 00:00:00.000','男')
,('02','钱电','1990-12-21 00:00:00.000','男')
,('03','孙风','1990-12-20 00:00:00.000','男')
,('04','李雷','1990-12-06 00:00:00.000','男')
,('05','周梅','1991-12-01 00:00:00.000','女')
,('06','吴兰','1992-01-01 00:00:00.000','女')
,('07','郑竹','1989-01-01 00:00:00.000','女')
,('09','张三','2017-12-20 00:00:00.000','女')
,('10','李四','2017-12-25 00:00:00.000','女')
,('11','韩梅梅','2012-06-06 00:00:00.000','女')
,('12','赵六','2013-06-13 00:00:00.000','女')
,('13','孙七','2014-06-01 00:00:00.000','女')
,('08','聂小倩','2019-12-12 12:12:12.000','女')
;
- 课程表
Course(CId,Cname,TId)
–CId 课程编号,Cname 课程名称,TId 教师编号
CREATE TABLE `Course` (
`CId` varchar(10) DEFAULT NULL,
`Cname` varchar(10) DEFAULT NULL,
`TId` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO Course (CId,Cname,TId) VALUES
('01','语文','02')
,('02','数学','01')
,('03','英语','03')
;
- 教师表
Teacher(TId,Tname)
–TId 教师编号,Tname 教师姓名
CREATE TABLE `Teacher` (
`TId` varchar(10) DEFAULT NULL,
`Tname` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO Teacher (TId,Tname) VALUES
('01','张三')
,('02','李四')
,('03','王五')
;
- 成绩表
SC(SId,CId,score)
–SId 学生编号,CId 课程编号,score 分数
CREATE TABLE `SC` (
`SId` varchar(10) DEFAULT NULL,
`CId` varchar(10) DEFAULT NULL,
`score` decimal(18,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO SC (SId,CId,score) VALUES
('01','01',80.0)
,('01','02',90.0)
,('01','03',99.0)
,('02','01',70.0)
,('02','02',60.0)
,('02','03',80.0)
,('03','01',80.0)
,('03','02',80.0)
,('03','03',80.0)
,('04','01',50.0)
,('04','02',30.0)
,(