学生表(sno sn sex age dept)
s2 钱尔 男 18 信息
s3 孙善 女 20 信息
s4 李思 男 21 自动化
s5 周武 男 19 计算机
s6 吴丽 女 20 自动化
s7 李器 男 18 外语
s8 古名 男 计算机
s9 赵一 女 17 计算机
选课表
SNO CNO SCORE
s2 c5 57
s2 c6 80
s2 c7
s3 c1 75
s3 c2 70
s3 c4 85
s4 c1 93
s4 c2 85
s4 c3 83
s5 c2 89
s9 c1 90
s9 c2 85
课程表
CNO CN CT ID_TC
C1 程序设计 60 1
C2 微机原理 80 2
C3 数字逻辑 60 3
C4 数据结构 80 4
C5 数据库 60 5
C6 编译原理 60 6
C7 操作系统 60 7
通过这三张表查询 同时选修了‘微机原理’和‘数据结构’的学生姓名和学号,怎么用SQL语言实现哦!!
------解决方案--------------------
- SQL code
DECLARE @S TABLE(sno VARCHAR(2), sn NVARCHAR(4), sex NVARCHAR(1), age INT, dept NVARCHAR(10))INSERT @SSELECT N's2', N'钱尔', '男', 18, N'信息' UNION ALL SELECT N's3', N'孙善', '女', 20, N'信息' UNION ALL SELECT N's4', N'李思', '男', 21, N'自动化' UNION ALL SELECT N's5', N'周武', '男', 19, N'计算机' UNION ALL SELECT N's6', N'吴丽', '女', 20, N'自动化' UNION ALL SELECT N's7', N'李器', '男', 18, N'外语' UNION ALL SELECT N's8', N'古名', '男', 18, N'计算机' UNION ALL SELECT N's9', N'赵一', '女', 17, N'计算机'DECLARE @SCORE TABLE(SNO VARCHAR(2), CNO VARCHAR(2), SCORE INT)INSERT @SCORESELECT 's2', 'c5', 57 UNION ALL SELECT 's2', 'c6', 80 UNION ALL SELECT 's2', 'c7', 86 UNION ALL SELECT 's3', 'c1', 75 UNION ALL SELECT 's3', 'c2', 70 UNION ALL SELECT 's3', 'c4', 85 UNION ALL SELECT 's4', 'c1', 93 UNION ALL SELECT 's4', 'c2', 85 UNION ALL SELECT 's4', 'c3', 83 UNION ALL SELECT 's5', 'c2', 89 UNION ALL SELECT 's9', 'c1', 90 UNION ALL SELECT 's9', 'c2', 85DECLARE @COURSE TABLE(CNO VARCHAR(2), CN NVARCHAR(10), CT INT, ID_TC INT)INSERT @COURSESELECT 'C1', N'程序设计', 60, 1 UNION ALL SELECT 'C2', N'微机原理', 80, 2 UNION ALL SELECT 'C3', N'数字逻辑', 60, 3 UNION ALL SELECT 'C4', N'数据结构', 80, 4 UNION ALL SELECT 'C5', N'数据库', 60, 5 UNION ALL SELECT 'C6', N'编译原理', 60, 6 UNION ALL SELECT 'C7', N'操作系统', 60, 7SELECT DISTINCT S.SNO,SNFROM @S AS S JOIN @SCORE AS SC ON S.SNO=SC.SNOWHERE NOT EXISTS(SELECT 1 FROM (SELECT SNO,CNO FROM @SCORE WHERE SNO=S.SNO) AS SC2 RIGHT JOIN (SELECT DISTINCT CNO FROM @COURSE WHERE CN IN (N'微机原理',N'数据结构')) A ON A.CNO=SC2.CNO WHERE SC2.CNO IS NULL) /*SNO SN ---- ---- s3 孙善*/
------解决方案--------------------
select s.sno,s.sn from student s left join score sc on s.sno=sc.sno left join course c on sc.cno=c.cno
where c.cn in ('微机原理','数据结构')
group by s.sno,s.sn
having count(*)>1