50道SQL练习题
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-12-20' , '男');
insert into Student values('04' , '李云' , '1990-12-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-01-01' , '女');
insert into Student values('07' , '郑竹' , '1989-01-01' , '女');
insert into Student values('09' , '张三' , '2017-12-20' , '女');
insert into Student values('10' , '李四' , '2017-12-25' , '女');
insert into Student values('11' , '李四' , '2012-06-06' , '女');
insert into Student values('12' , '赵六' , '2013-06-13' , '女');
insert into Student values('13' , '孙七' , '2014-06-01' , '女');
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);
select st.*, sc1.score as "01课程成绩", sc2.score as "02课程成绩"
from student as st
inner join sc as sc1 on st.SId = sc1.SId and sc1.CId = "01"
inner join sc as sc2 on st.SId = sc2.SId and sc2.CId = "02"
where sc1.score > sc2.score;
+
| SId | Sname | Sage | Ssex | 01课程成绩 | 02课程成绩 |
+
| 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 70.0 | 60.0 |
| 04 | 李云 | 1990-12-06 00:00:00 | 男 | 50.0 | 30.0 |
+
select st.*, sc1.score as "01课程成绩", sc2.score as "02课程成绩"
from student as st
inner join sc as sc1 on st.SId = sc1.SId and sc1.CId = "01"
inner join sc as sc2 on st.SId = sc2.SId and sc2.CId = "02";
+
| SId | Sname | Sage | Ssex | 01课程成绩 | 02课程成绩 |
+
| 01 | 赵雷 | 1990-01-01 00:00:00 | 男 | 80.0 | 90.0 |
| 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 70.0 | 60.0 |
| 03 | 孙风 | 1990-12-20 00:00:00 | 男 | 80.0 | 80.0 |
| 04 | 李云 | 1990-12-06 00:00:00 | 男 | 50.0 | 30.0 |
| 05 | 周梅 | 1991-12-01 00:00:00 | 女 | 76.0 | 87.0 |
+
select st.*, sc1.score as "01课程成绩", sc2.score as "02课程成绩"
from student as st
inner join sc as sc1 on st.SId = sc1.SId and sc1.CId = "01"
left join sc as sc2 on st.SId = sc2.SId and sc2.CId = "02";
+
| SId | Sname | Sage | Ssex | 01课程成绩 | 02课程成绩 |
+
| 01 | 赵雷 | 1990-01-01 00:00:00 | 男 | 80.0 | 90.0 |
| 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 70.0 | 60.0 |
| 03 | 孙风 | 1990-12-20 00:00:00 | 男 | 80.0 | 80.0 |
| 04 | 李云 | 1990-12-06 00:00:00 | 男 | 50.0 | 30.0 |
| 05 | 周梅 | 1991-12-01 00:00:00 | 女 | 76.0 | 87.0 |
| 06 | 吴兰 | 1992-01-01 00:00:00 | 女 | 31.0 | NULL |
+
select st.*, sc1.CId
from student as st
inner join sc as sc1 on st.SId = sc1.SId and sc1.CId = "02"
where sc1.SId not in (select SId from sc where CId = "01");
+
| SId | Sname | Sage | Ssex | CId |
+
| 07 | 郑竹 | 1989-01-01 00:00:00 | 女 | 02 |
+
select st.*, sc1.CId
from student as st
inner join sc as sc1 on st.SId = sc1.SId
where sc1.SId not in (select SId from sc where CId = "01");
+
| SId | Sname | Sage | Ssex | CId |
+
| 07 | 郑竹 | 1989-01-01 00:00:00 | 女 | 02 |
| 07 | 郑竹 | 1989-01-01 00:00:00 | 女 | 03 |
+
select SId,round(avg(sc.score),2) as "平均成绩"
from sc group by SId;
+
| SId | 平均成绩 |
+
| 01 | 89.67 |
| 02 | 70.00 |
| 03 | 80.00 |
| 04 | 33.33 |
| 05 | 81.50 |
| 06 | 32.50 |
| 07 | 93.50 |
+
select st.SId as "学生编号", st.Sname as "学生姓名", round(avg(sc1.score),2) as "平均成绩"
from student as st
inner join sc as sc1 on st.SId = sc1.SId
group by st.SId, st.Sname having 平均成绩 >= 60;
+
| 学生编号 | 学生姓名 | 平均成绩 |
+
| 01 | 赵雷 | 89.67 |
| 02 | 钱电 | 70.00 |
| 03 | 孙风 | 80.00 |
| 05 | 周梅 | 81.50 |
| 07 | 郑竹 | 93.50 |
+
select st.SId as "学生编号", st.Sname as "学生姓名",sc1.CId as "科目",sc1.score as "成绩"
from student as st
inner join sc as sc1 on st.SId = sc1.SId;
+
| 学生编号 | 学生姓名 | 科目 | 成绩 |
+
| 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 |
| 04 | 李云 | 03 | 20.0 |
| 05 | 周梅 | 01 | 76.0 |
| 05 | 周梅 | 02 | 87.0 |
| 06 | 吴兰 | 01 | 31.0 |
| 06 | 吴兰 | 03 | 34.0 |
| 07 | 郑竹 | 02 | 89.0 |
| 07 | 郑竹 | 03 | 98.0 |
+
select st.SId as "学生编号", st.Sname as "学生姓名"
from student as st
inner join sc as sc1 on st.SId = sc1.SId
group by st.SId,st.Sname;
+
| 学生编号 | 学生姓名 |
+
| 01 | 赵雷 |
| 02 | 钱电 |
| 03 | 孙风 |
| 04 | 李云 |
| 05 | 周梅 |
| 06 | 吴兰 |
| 07 | 郑竹 |
+
select distinct st.*
from student as st
inner join sc on st.SId = sc.SId;
+
| SId | Sname | Sage | Ssex |
+
| 01 | 赵雷 | 1990-01-01 00:00:00 | 男 |
| 02 | 钱电 | 1990-12-21 00:00:00 | 男 |
| 03 | 孙风 | 1990-12-20 00:00:00 | 男 |
| 04 | 李云 | 1990-12-06 00:00:00 | 男 |
| 05 | 周梅 | 1991-12-01 00:00:00 | 女 |
| 06 | 吴兰 | 1992-01-01 00:00:00 | 女 |
| 07 | 郑竹 | 1989-01-01 00:00:00 | 女 |
+
select st.SId as "学生编号",
st.Sname as "学生姓名",
count(sc.CId) as "选课总数",
sum(sc.score) as "总成绩"
from student as st
left join sc on st.SId = sc.SId
group by st.SId,st.Sname;
+
| 学生编号 | 学生姓名 | 选课总数 | 总成绩 |
+
| 01 | 赵雷 | 3 | 269.0 |
| 02 | 钱电 | 3 | 210.0 |
| 03 | 孙风 | 3 | 240.0 |
| 04 | 李云 | 3 | 100.0 |
| 05 | 周梅 | 2 | 163.0 |
| 06 | 吴兰 | 2 | 65.0 |
| 07