sqlGirl

今天是清新的SQL女孩

今日涉及知识点:

group by,inner join,left join,right join

每一区块我用不同颜色标识了,方便大家看懂。

建表:

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-05-20’ , ‘男’);
insert into Student values(’04’ , ‘李云’ , ‘1990-08-06’ , ‘男’);
insert into Student values(’05’ , ‘周梅’ , ‘1991-12-01’ , ‘女’);
insert into Student values(’06’ , ‘吴兰’ , ‘1992-03-01’ , ‘女’);
insert into Student values(’07’ , ‘郑竹’ , ‘1989-07-01’ , ‘女’);
insert into Student values(’08’ , ‘王菊’ , ‘1990-01-20’ , ‘女’);

create table Course(Cid varchar(10),Cname varchar(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);

查询开始:

1.查询” 01 “课程比” 02 “课程成绩高的学生的信息及课程分数
select a.Sid,a.Score from SC a, SC b where a.Sid=b.Sid and a.score>b.score and a.cid=’01’ and b.cid=’02’;
+——+——-+
| Sid | Score |
+——+——-+
| 02 | 70.0 |
| 04 | 50.0 |
+——+——-+

1.1 查询同时存在” 01 “课程和” 02 “课程的情况
select a.sid,a.cid,a.score a_score,b.cid,b.score b_score from sc a inner join sc b on a.sid=b.sid where a.cid=’01’ and b.cid=’02’;
+——+——+———+——+———+
| sid | cid | a_score | cid | b_score |
+——+——+———+——+———+
| 01 | 01 | 80.0 | 02 | 90.0 |
| 02 | 01 | 70.0 | 02 | 60.0 |
| 03 | 01 | 80.0 | 02 | 80.0 |
| 04 | 01 | 50.0 | 02 | 30.0 |
| 05 | 01 | 76.0 | 02 | 87.0 |
+——+——+———+——+———+

1.2 查询存在” 01 “课程但可能不存在” 02 “课程的情况(不存在时显示为 null )
select a.sid,a.cid,a.score a_score,b.cid,b.score b_score from sc a left join sc b on a.sid=b.sid and b.cid=’02’ where a.cid=’01’;
+——+——+———+——+———+
| sid | cid | a_score | cid | b_score |
+——+——+———+——+———+
| 01 | 01 | 80.0 | 02 | 90.0 |
| 02 | 01 | 70.0 | 02 | 60.0 |
| 03 | 01 | 80.0 | 02 | 80.0 |
| 04 | 01 | 50.0 | 02 | 30.0 |
| 05 | 01 | 76.0 | 02 | 87.0 |
| 06 | 01 | 31.0 | NULL | NULL |
+——+——+———+——+———+

1.3 查询不存在” 01 “课程但存在” 02 “课程的情况
select * from sc a where a.sid not in (select sid from sc where cid=’01’) and a.cid=’02’;
+——+——+——-+
| Sid | Cid | score |
+——+——+——-+
| 07 | 02 | 89.0 |
+——+——+——-+

2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
select sid,avg(score) avg_score from sc group by sid having avg_score>=60;
+——+———–+
| sid | avg_score |
+——+———–+
| 01 | 89.66667 |
| 02 | 70.00000 |
| 03 | 80.00000 |
| 05 | 81.50000 |
| 07 | 93.50000 |
+——+———–+

3.查询在 SC 表存在成绩的学生信息
select distinct(b.sid),b.sname,b.sage,b.ssex from sc a left join student b on a.sid=b.sid;
+——+——-+———————+——+
| sid | sname | sage | ssex |
+——+——-+———————+——+
| 01 | 赵雷 | 1990-01-01 00:00:00 | 男 |
| 02 | 钱电 | 1990-12-21 00:00:00 | 男 |
| 03 | 孙风 | 1990-05-20 00:00:00 | 男 |
| 04 | 李云 | 1990-08-06 00:00:00 | 男 |
| 05 | 周梅 | 1991-12-01 00:00:00 | 女 |
| 06 | 吴兰 | 1992-03-01 00:00:00 | 女 |
| 07 | 郑竹 | 1989-07-01 00:00:00 | 女 |
+——+——-+———————+——+

今天是清新的SQL女孩已关闭评论