目录
--1.学生表Student(SId,Sname,Sage,Ssex)--SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表Course(CId,Cname,TId)--CId 课程编号,Cname 课程名称,TId 教师编号
--3.教师表Teacher(TId,Tname)--TId 教师编号,Tname 教师姓名
--4.成绩表SC(SId,CId,score)--SId 学生编号,CId 课程编号,score 分数
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);
- mysql> select * from (select * from sc where CId=01) as t1 inner join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId;
-
- +------+------+-------+------+------+-------+
-
- | SId | CId | score | SId | CId | score |
-
- +------+------+-------+------+------+-------+
-
- | 01 | 01 | 80.0 | 01 | 02 | 90.0 |
-
- | 02 | 01 | 70.0 | 02 | 02 | 60.0 |
-
- | 03 | 01 | 80.0 | 03 | 02 | 80.0 |
-
- | 04 | 01 | 50.0 | 04 | 02 | 30.0 |
-
- | 05 | 01 | 76.0 | 05 | 02 | 87.0 |
-
- +------+------+-------+------+------+-------+
-
- 5 rows in set (0.00 sec)
- mysql> select * from (select * from sc where CId=01) as t1 left outer join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId;
-
- +------+------+-------+------+------+-------+
-
- | SId | CId | score | SId | CId | score |
-
- +------+------+-------+------+------+-------+
-
- | 01 | 01 | 80.0 | 01 | 02 | 90.0 |
-
- | 02 | 01 | 70.0 | 02 | 02 | 60.0 |
-
- | 03 | 01 | 80.0 | 03 | 02 | 80.0 |
-
- | 04 | 01 | 50.0 | 04 | 02 | 30.0 |
-
- | 05 | 01 | 76.0 | 05 | 02 | 87.0 |
-
- | 06 | 01 | 31.0 | NULL | NULL | NULL |
-
- +------+------+-------+------+------+-------+
-
- 6 rows in set (0.00 sec)
- mysql> select * from (select * from sc where CId=01) as t1 right outer join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId where t1.CId is null;
-
- +------+------+-------+------+------+-------+
-
- | SId | CId | score | SId | CId | score |
-
- +------+------+-------+------+------+-------+
-
- | NULL | NULL | NULL | 07 | 02 | 89.0 |
-
- +------+------+-------+------+------+-------+
-
- 1 row in set (0.00 sec)
- mysql> select * from ( select SId,avg(score) from sc group by SId having avg(score)>=60) as t1 inner join (select Sname,SId from student) as t2 on t2.SId=t1.SId;
-
- +------+------------+--------+-----+
-
- | SId | avg(score) | Sname | SId |
-
- +------+------------+--------+-----+
-
- | 01 | 89.66667 | 赵雷 | 01 |
-
- | 02 | 70.00000 | 钱电 | 02 |
-
- | 03 | 80.00000 | 孙风 | 03 |
-
- | 05 | 81.50000 | 周梅 | 05 |
-
- | 07 | 93.50000 | 郑竹 | 07 |
-
- +------+------------+--------+-----+
-
- 5 rows in set (0.00 sec)
- mysql> select * from student right outer join sc on student.SId=sc.SId;
-
- +------+--------+---------------------+------+------+------+-------+
-
- | SId | Sname | Sage | Ssex | SId | CId | score |
-
- +------+--------+---------------------+------+------+------+-------+
-
- | 01 | 赵雷 | 1990-01-01 00:00:00 | 男 | 01 | 01 | 80.0 |
-
- | 01 | 赵雷 | 1990-01-01 00:00:00 | 男 | 01 | 02 | 90.0 |
-
- | 01 | 赵雷 | 1990-01-01 00:00:00 | 男 | 01 | 03 | 99.0 |
-
- | 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 02 | 01 | 70.0 |
-
- | 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 02 | 02 | 60.0 |
-
- | 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 02 | 03 | 80.0 |
-
- | 03 | 孙风 | 1990-12-20 00:00:00 | 男 | 03 | 01 | 80.0 |
-
- | 03 | 孙风 | 1990-12-20 00:00:00 | 男 | 03 | 02 | 80.0 |
-
- | 03 | 孙风 | 1990-12-20 00:00:00 | 男 | 03 | 03 | 80.0 |
-
- | 04 | 李云 | 1990-12-06 00:00:00 | 男 | 04 | 01 | 50.0 |
-
- | 04 | 李云 | 1990-12-06 00:00:00 | 男 | 04 | 02 | 30.0 |
-
- | 04 | 李云 | 1990-12-06 00:00:00 | 男 | 04 | 03 | 20.0 |
-
- | 05 | 周梅 | 1991-12-01 00:00:00 | 女 | 05 | 01 | 76.0 |
-
- | 05 | 周梅 | 1991-12-01 00:00:00 | 女 | 05 | 02 | 87.0 |
-
- | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 | 06 | 01 | 31.0 |
-
- | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 | 06 | 03 | 34.0 |
-
- | 07 | 郑竹 | 1989-01-01 00:00:00 | 女 | 07 | 02 | 89.0 |
-
- | 07 | 郑竹 | 1989-01-01 00:00:00 | 女 | 07 | 03 | 98.0 |
-
- +------+--------+---------------------+------+------+------+-------+
-
- 18 rows in set (0.00 sec)
- mysql> select * from (select SId,Sname from student) as t1 left outer join ( select SId,count(CId),sum(score) from sc group by SId) as t2 on t1.SId=t2.SId;
-
- +-----+--------+------+------------+------------+
-
- | SId | Sname | SId | count(CId) | sum(score) |
-
- +-----+--------+------+------------+------------+
-
- | 01 | 赵雷 | 01 | 3 | 269.0 |
-
- | 02 | 钱电 | 02 | 3 | 210.0 |
-
- | 03 | 孙风 | 03 | 3 | 240.0 |
-
- | 04 | 李云 | 04 | 3 | 100.0 |
-
- | 05 | 周梅 | 05 | 2 | 163.0 |
-
- | 06 | 吴兰 | 06 | 2 | 65.0 |
-
- | 07 | 郑竹 | 07 | 2 | 187.0 |
-
- | 09 | 张三 | NULL | NULL | NULL |
-
- | 10 | 李四 | NULL | NULL | NULL |
-
- | 11 | 李四 | NULL | NULL | NULL |
-
- | 12 | 赵六 | NULL | NULL | NULL |
-
- | 13 | 孙七 | NULL | NULL | NULL |
-
- +-----+--------+------+------------+------------+
-
- 12 rows in set (0.00 sec)
4.1 查有成绩的学生信息
- mysql> select * from student right outer join sc on student.SId=sc.SId;
-
- +------+--------+---------------------+------+------+------+-------+
-
- | SId | Sname | Sage | Ssex | SId | CId | score |
-
- +------+--------+---------------------+------+------+------+-------+
-
- | 01 | 赵雷 | 1990-01-01 00:00:00 | 男 | 01 | 01 | 80.0 |
-
- | 01 | 赵雷 | 1990-01-01 00:00:00 | 男 | 01 | 02 | 90.0 |
-
- | 01 | 赵雷 | 1990-01-01 00:00:00 | 男 | 01 | 03 | 99.0 |
-
- | 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 02 | 01 | 70.0 |
-
- | 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 02 | 02 | 60.0 |
-
- | 02 | 钱电 | 1990-12-21 00:00:00 | 男 | 02 | 03 | 80.0 |
-
- | 03 | 孙风 | 1990-12-20 00:00:00 | 男 | 03 | 01 | 80.0 |
-
- | 03 | 孙风 | 1990-12-20 00:00:00 | 男 | 03 | 02 | 80.0 |
-
- | 03 | 孙风 | 1990-12-20 00:00:00 | 男 | 03 | 03 | 80.0 |
-
- | 04 | 李云 | 1990-12-06 00:00:00 | 男 | 04 | 01 | 50.0 |
-
- | 04 | 李云 | 1990-12-06 00:00:00 | 男 | 04 | 02 | 30.0 |
-
- | 04 | 李云 | 1990-12-06 00:00:00 | 男 | 04 | 03 | 20.0 |
-
- | 05 | 周梅 | 1991-12-01 00:00:00 | 女 | 05 | 01 | 76.0 |
-
- | 05 | 周梅 | 1991-12-01 00:00:00 | 女 | 05 | 02 | 87.0 |
-
- | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 | 06 | 01 | 31.0 |
-
- | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 | 06 | 03 | 34.0 |
-
- | 07 | 郑竹 | 1989-01-01 00:00:00 | 女 | 07 | 02 | 89.0 |
-
- | 07 | 郑竹 | 1989-01-01 00:00:00 | 女 | 07 | 03 | 98.0 |
-
- +------+--------+---------------------+------+------+------+-------+
-
- 18 rows in set (0.00 sec)
- mysql> select count(1) from teacher where Tname like "李%";
-
- +----------+
-
- | count(1) |
-
- +----------+
-
- | 1 |
-
- +----------+
-
- 1 row in set (0.00 sec)
- mysql> select * from student where SId in (select SId from sc where CId=( select CId from course where TId=(select TId from teacher where Tname = "张三")));
-
- +-----+--------+---------------------+------+
-
- | 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 | 女 |
-
- | 07 | 郑竹 | 1989-01-01 00:00:00 | 女 |
-
- +-----+--------+---------------------+------+
-
- 6 rows in set (0.00 sec)
- mysql> select * from student where SId in (select SId from sc group by SId having count(CId) !=( select count(1) from course));
- +-----+--------+---------------------+------+
- | SId | Sname | Sage | Ssex |
- +-----+--------+---------------------+------+
- | 05 | 周梅 | 1991-12-01 00:00:00 | 女 |
- | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 |
- | 07 | 郑竹 | 1989-01-01 00:00:00 | 女 |
- +-----+--------+---------------------+------+
- 3 rows in set (0.01 sec)
- mysql> select * from student where SId in (select SId from sc where CId in ( select CId from sc where SId=01) group by SId) limit 1,6;
- +-----+--------+---------------------+------+
- | SId | Sname | Sage | Ssex |
- +-----+--------+---------------------+------+
- | 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 | 女 |
- +-----+--------+---------------------+------+
- 6 rows in set (0.00 sec)
- mysql> select * from student where SId in ( select SId from sc where CId in (select CId from sc where SId=01) group by SId having count(CId)=(select count(CId) from sc where SId=01));
- +-----+--------+---------------------+------+
- | 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 | 男 |
- +-----+--------+---------------------+------+
- 4 rows in set (0.00 sec)
- mysql> select * from student where SId=(select t1.SId from (select SId from sc group by SId) as t1 left outer join ( select SId from sc where CId = (select CId from course where TId in (select TId from teacher where Tname="张三"))) as t2 on t1.SId=t2.SId where t2.SId <=>null);
- +-----+--------+---------------------+------+
- | SId | Sname | Sage | Ssex |
- +-----+--------+---------------------+------+
- | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 |
- +-----+--------+---------------------+------+
- 1 row in set (0.00 sec)
- mysql> select * from (select SId from student) as t1 inner join (select SId,avg(score) from sc where score < 60 group by SId having count(CId)>=2) as t2 on t1.SId=t2.SId;
-
- +-----+------+------------+
-
- | SId | SId | avg(score) |
-
- +-----+------+------------+
-
- | 04 | 04 | 33.33333 |
-
- | 06 | 06 | 32.50000 |
-
- +-----+------+------------+
-
- 2 rows in set (0.00 sec)
- mysql> select * from student inner join (select * from sc where CId=01 and score <60 order by score desc) as t2 on student.SId=t2.SId;
-
- +-----+--------+---------------------+------+------+------+-------+
-
- | SId | Sname | Sage | Ssex | SId | CId | score |
-
- +-----+--------+---------------------+------+------+------+-------+
-
- | 04 | 李云 | 1990-12-06 00:00:00 | 男 | 04 | 01 | 50.0 |
-
- | 06 | 吴兰 | 1992-01-01 00:00:00 | 女 | 06 | 01 | 31.0 |
-
- +-----+--------+---------------------+------+------+------+-------+
-
- 2 rows in set (0.00 sec)
- mysql> select * from (select SId,avg(score) from sc group by SId order by avg(score) desc) as t1 left outer join sc on sc.SId=t1.SId;
-
- +------+------------+------+------+-------+
-
- | SId | avg(score) | SId | CId | score |
-
- +------+------------+------+------+-------+
-
- | 07 | 93.50000 | 07 | 02 | 89.0 |
-
- | 07 | 93.50000 | 07 | 03 | 98.0 |
-
- | 01 | 89.66667 | 01 | 01 | 80.0 |
-
- | 01 | 89.66667 | 01 | 02 | 90.0 |
-
- | 01 | 89.66667 | 01 | 03 | 99.0 |
-
- | 05 | 81.50000 | 05 | 01 | 76.0 |
-
- | 05 | 81.50000 | 05 | 02 | 87.0 |
-
- | 03 | 80.00000 | 03 | 01 | 80.0 |
-
- | 03 | 80.00000 | 03 | 02 | 80.0 |
-
- | 03 | 80.00000 | 03 | 03 | 80.0 |
-
- | 02 | 70.00000 | 02 | 01 | 70.0 |
-
- | 02 | 70.00000 | 02 | 02 | 60.0 |
-
- | 02 | 70.00000 | 02 | 03 | 80.0 |
-
- | 04 | 33.33333 | 04 | 01 | 50.0 |
-
- | 04 | 33.33333 | 04 | 02 | 30.0 |
-
- | 04 | 33.33333 | 04 | 03 | 20.0 |
-
- | 06 | 32.50000 | 06 | 01 | 31.0 |
-
- | 06 | 32.50000 | 06 | 03 | 34.0 |
-
- +------+------------+------+------+-------+
-
- 18 rows in set (0.00 sec)