欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

数据库SQL学习的经典案例:学生专业老师分数表的操练

程序员文章站 2022-05-05 10:12:25
...

数据库SQL学习的经典案例:学生专业老师分数表的操练;针对一个问题------选了课程1而没有选课程2的学生有哪些? 下面的SQL语句是各个不同的写法,整理下~ 无 mysql desc SC;+-------+---------------+------+-----+---------+-------+| Field | Type | Null

数据库SQL学习的经典案例:学生专业老师分数表的操练;针对一个问题------选了课程1而没有选课程2的学生有哪些?

下面的SQL语句是各个不同的写法,整理下~
mysql> desc SC;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| S_id  | varchar(10)   | YES  |     | NULL    |       |
| C_id  | varchar(10)   | YES  |     | NULL    |       |
| score | decimal(18,1) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> select * from SC;
+------+------+-------+
| S_id | C_id | score |
+------+------+-------+
| 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 |
| 08   | 04   |  79.0 |
| 11   | 03   |  77.9 |
| 12   | 02   |  47.9 |
| 12   | 04   |  47.9 |
| 11   | 01   |  77.9 |
| 01   | 04   |  73.9 |
| 01   | 05   |  83.9 |
| 06   | 04   |  75.0 |
| 06   | 05   |  85.0 |
| 11   | 05   |  81.0 |
| 11   | 04   |  91.0 |
+------+------+-------+
29 rows in set (0.00 sec)


--1
select B.* from SC B where B.C_id = '01' 
and not exists(select * from SC B2 where B.S_id = B2.S_id and B2.C_id = '02');

--2
select * from 
(select B.S_id, B.C_id aC_id, B.score ascore, B2.C_id bC_id, B2.score bscore 
from SC B inner join SC B2 
on B.S_id = B2.S_id and B.C_id = '01' and B2.C_id != '01') 
BBB 
where not exists 
(select * from (select B.S_id, B.C_id aC_id, B.score ascore, B2.C_id bC_id, B2.score bscore 
from SC B inner join SC B2 
on B.S_id = B2.S_id and B.C_id = '01' and B2.C_id != '01') 
CCC where BBB.S_id = CCC.S_id and CCC.bC_id = '02' );

--3
select * from SC where C_id = '01' 
and S_id not in 
(select distinct S_id from SC where C_id = '02');

--4
select B.S_id, B.C_id aC_id, B.score ascore, B2.C_id bC_id, B2.score bscore 
from SC B inner join SC B2 
on B.S_id = B2.S_id and B.C_id = '01' and B2.C_id != '01' 
group by S_id having (aC_id, bC_id) != ('01','02');

--5
select B.*, B2.* from SC B left join SC B2 
on B.S_id = B2.S_id and B2.C_id = '02' 
where B.C_id = '01' and B2.C_id is null;

--6
select B.*, B2.* from SC B right join SC B2 
on B.S_id = B2.S_id and B.C_id = '02' 
where B2.C_id = '01' and B.C_id is null;

--7
select B.S_id, B.C_id aC_id, B.score ascore, B2.C_id bC_id, B2.score bscore 
from SC B inner join SC B2 
on B.S_id = B2.S_id and B.C_id = '01' 
and B2.C_id != '01' 
group by S_id having nullif(bC_id, '02') >> 1;