-- 课程表(课号,名称)
if object_id('tempdb..#课程表') is not null drop table #课程表
create table #课程表(课号 varchar(4),课程 varchar(20))
insert into #课程表
select 'K001','语文' union all
select 'K002','英语' union all
select 'K003','数学' union all
select 'K004','生物' union all
select 'K005','地理'
-- 学生表(学号,姓名)
if object_id('tempdb..#学生表') is not null drop table #学生表
create table #学生表(学号 varchar(4),姓名 varchar(20))
insert into #学生表
select 'S001','张三' union all
select 'S002','李四' union all
select 'S003','王五' union all
select 'S004','赵六' union all
select 'S005','陈七'
-- 选修表(课号,学号)
if object_id('tempdb..#选修表') is not null drop table #选修表
create table #选修表(课号 varchar(4),学号 varchar(4))
insert into #选修表
select 'K001','S001' union all
select 'K001','S002' union all
select 'K001','S003' union all
select 'K001','S004' union all
select 'K001','S005' union all
select 'K002','S001' union all
select 'K002','S003' union all
select 'K002','S005' union all
select 'K003','S001' union all
select 'K003','S002' union all
select 'K003','S003' union all
select 'K003','S004' union all
select 'K003','S005' union all
select 'K004','S002' union all
select 'K004','S003' union all
select 'K004','S005' union all
select 'K005','S001' union all
select 'K005','S002' union all
select 'K005','S003'
-- 查所有人都选修的课程,用课号关联,选修数过滤
select x.课号,k.课程,k.选修数
from (select 课号,选修数=count(课号) from #选修表 group by 课号)x
left join (select 课号,课程,选修数=(select count(学号) from #学生表) from #课程表)k on x.课号=k.课号
where x.选修数=k.选修数
--查询结果
课号 课程 选修数
K001 语文 5
K003 数学 5
[此贴子已经被作者于2017-3-31 11:12编辑过]