建立两个表 分别是STUDENT表(学生表)、CHOOSE表(选课表)
建表语言如下
--创建表STUDENT
create table STUDENT(
ID varchar(20),
Name varchar(10),
Age int,
Department varchar(30)
);
--创建表CHOOSE
create table CHOOSE(
ID varchar(20),
CourseID varchar(30),
Score dec(5,2)
);
插入数据
insert STUDENT values('00001','张三',20,'计算机系');
insert STUDENT values('00002','李四',19,'计算机系');
insert STUDENT values('00003','王五',21,'计算机系');
insert CHOOSE values('00001','C1',95);
insert CHOOSE values('00001','C2',80);
insert CHOOSE values('00001','C3',84);
insert CHOOSE values('00002','C1',80);
insert CHOOSE values('00002','C2',85);
insert CHOOSE values('00003','C1',78);
insert CHOOSE values('00003','C3',70);
要查询选择了C2课程并且也选了C3课程的学生姓名
①第一种想到的是使用intersect
select name from STUDENT where ID in (
select ID from CHOOSE where CourseID = 'C2'
intersect
select ID from CHOOSE where CourseID = 'C3');
--输出结果为张三
②第二种是全部使用嵌套
select name from STUDENT where ID in (
select ID from CHOOSE where CourseID = 'C2' and ID in (
select ID from CHOOSE where CourseID = 'C3'));
--输出结果为张三
除了这两种方法以外,能不能通过使用隐式内连接或者自连接的方法完成查询呢?
SELECT NAME from STUDENT WHERE ID =
(SELECT ID FROM CHOOSE B
WHERE CourseID IN('C2','C3')
GROUP BY ID HAVING count(1)=2)