--stab (学生信息表)
--sctab(学生选课信息表)
【例】--从数据库查询 同时选修了C1和C3号课程的学生号:
Use Studentadd
Go
Select xh
From sctab
Where kch = 'C1' AND xh IN (Select xh From sctab Where kch = 'C3')
Go
--改成 查询 同时选修了C1和C3号课程的学生号,和姓名
--我不知道怎么把 stab表的学生姓名(xm)添加进去?
--在select 后面加 stab.xm 就会导致姓名和学号不对应 而且有重复项, 肿么办?
--创建 学生信息表
Use Studentadd
Go
Create Table stab
(xh char(6) PRIMARY KEY ,
xm varchar(8) NOT NULL ,
xb char(2) NOT NULL DEFAULT'男' ,
csrq date NOT NULL ,
rxsj date NOT NULL ,
ssx varchar(20) NOT NULL ,
bj varchar(20) NOT NULL ,
dh char(11)
)
Go
--创建 学生选课信息表
Use Studentadd
Go
Create Table sctab
(xh char(6) NOT NULL REFERENCES stab(xh) ,
kch char(3) NOT NULL ,
jsh char(4) NOT NULL ,
cj decimal(4,1) CHECK(cj>=0 and cj<=100) ,
PRIMARY KEY(xh,kch) ,
FOREIGN KEY(jsh,kch) REFERENCES tctab(jsh,kch) ,
--REFERENCES ttab(jsh) ,REFERENCES ctab(kch) ,
)
Go
--插入stab (学生信息表)
Use Studentadd
Go
insert into stab values('100001','孙大有','男','1989-6-23','2009-9-4','电气系','09机电','13509877890')
insert into stab values('100002','王芳','女','1990-12-9','2008-9-4','会计系','08会计','15845677654')
insert into stab values('100003','刘晓亮','男','1988-5-4','2008-9-4','电气系','08电汽','13512344321')
insert into stab values('100004','孙晓光','男','1989-7-2','2009-9-4','电气系','09机电','13509870000')
insert into stab values('100005','陈玉霞','女','1990-1-19','2008-9-4','计算机系','08网络','15832857837')
insert into stab values('100006','黑昊天','男','1988-5-24','2008-9-4','计算机系','08应用','13578653876')
insert into stab values('100007','陈江中','男','1990-1-12','2009-9-4','会计系','08投资','13553467233')
insert into stab values('100008','汪云','女','1989-11-23','2008-9-4','会计系','09机电','13558377636')
insert into stab values('100009','胡满霞','女','1990-5-4','2008-9-4','计算机系','08应用','13587482387')
insert into stab values('100010','良天','男','1989-9-4','2008-9-4','会计系','08会计','15838728522')
insert into stab values('100011','程云丽','女','1990-8-7','2009-9-4','会计系','09会计','13567345554')
insert into stab values('100012','孙大鹏','男','1988-12-23','2008-9-4','计算机系','08网络','15834378934')
go
----插入sctab(学生选课信息表)
Use Studentadd
Go
insert into sctab values('100001','C1','0001',65)
insert into sctab values('100001','C2','0005',87)
insert into sctab values('100001','C3','0003',73)
insert into sctab values('100002','C1','0002',90)
insert into sctab values('100002','C3','0003',56)
insert into sctab values('100002','C4','0003',67)
insert into sctab values('100002','C5','0002',82)
insert into sctab values('100003','C2','0005',76)
insert into sctab values('100003','C5','0002',49)
insert into sctab values('100004','C1','0001',90)
insert into sctab values('100004','C2','0005',59)
insert into sctab values('100004','C3','0003',87)
insert into sctab values('100009','C1','0001',78.9)
insert into sctab values('100009','C2','0005',56)
insert into sctab values('100009','C5','0002',98.3)
insert into sctab values('100009','C6','0001',67)
insert into sctab values('100012','C1','0001',53)
insert into sctab values('100012','C5','0002',89)
insert into sctab values('100012','C6','0001',91.3)
Go
------解决思路----------------------
-- 查询同时选修了C1和C3号课程的学生号,和姓名
select a.xh,a.xm
from stab a
inner join
(select xh
from sctab
where kch in('C1','C3')
group by xh
having count(distinct kch)>=2) b on a.xh=b.xh
/*
xh xm
------ --------
100001 孙大有
100002 王芳
100004 孙晓光
(3 行受影响)
*/