上篇我们对数据库SQL语句有了一定了解,接下来这十道例题会带你真正去操纵数据表,用多种语句得到想要查询的结果,加深对语句的理解。我们不单单是在一张表上查询,而是在多张表连接的表中查询。接下来我们开始由浅入深。
我们先设有如下四个基本表S(学生表),C(课程表),SC(学生选课表),T(教师表)。
(1)用SQL的DDL语言创建S表,S#为主码,SN不能为空。
(2)创建计算机系学生的视图,该视图的属性列由学号、姓名、课程号和任课教师号组成。
(3)检索计算机系年龄在20岁以上的学生学号。
(4)检索姓王的教师所讲课程的课程号及课程名称。
(5)检索张三同学所学课程的成绩,列出SN、C#和GR。
(6)检索选修总收入超过1000元的教师所讲课程的学生姓名、课程号和成绩。
(7)检索没有选修C1课程且选修课程数为两门的学生的姓名和平均成绩,并按平均成绩降序排列。
(8)检索选修和张三同学所选课程中任意一门相同的学生姓名、课程名。
(9)S1同学选修了C3,将此信息插入SC表中。
(10)删除S表中没有选修任何课程的学生记录。
(1)用SQL的DDL语言创建S表,S#为主码,SN不能为空。
create table S(
S# char(6) primary key,
SN char(20) not null,
AGE char(3),
DEPT char(20)
)
(2)创建计算机系学生的视图,该视图的属性列由学号、姓名、课程号和任课教师号组成。
create view 计算机学生选课信息表 as
select S.S# as 学号,SN as 姓名,SC.C# as 课程号,TN as 任课教师
from S left join SC on S.S# = SC.S# left join T on SC.C# = T.C#
where DEPT = '计算机'
--or
create view 计算机学生选课信息表 as
select S.S# as 学号,SN as 姓名,SC.C# as 课程号,TN as 任课教师
from S,SC,T
where S.S# = SC.S# and
SC.C# = T.C# and
DEPT = '计算机'
(3)检索计算机系年龄在20岁以上的学生学号。
select S# as 学生学号
from S
where DEPT = '计算机' and AGE > '20'
(4)检索姓王的教师所讲课程的课程号及课程名称。
select T.C# as 课程号, CN as 课程名称
from T left join C on T.C# = C.C#
where TN like '王%'
--or
select T.C# as 课程号, CN as 课程名称
from T,C
where T.C# = C.C# and
SN like '王%'
(5)检索张三同学所学课程的成绩,列出SN、C#和GR。
select SN,C#,GR
from SC left join S on SC.S# = S.S#
where SN = '张三'
--or
select SN,C#,GR
from S,SC
where S.S# = SC.S# and
SN = '张三'
(6)检索选修总收入超过1000元的教师所讲课程的学生姓名、课程号和成绩。
select SN,T.S#,GR
from T,SC,S
where T.C# = SC.C# and
SC.S# = C.S# and
(SAL+COMM)> 1000
(7)检索没有选修C1课程且选修课程数为两门的学生的姓名和平均成绩,并按平均成绩降序排列。
select SN,avg(GR)
from S,SC
where SC.S# = S.S# and
C# <> 'C1'
group by S#,SN
having count(S#)=2
order by avg(GR) desc
(8)检索选修和张三同学所选课程中任意一门相同的学生姓名、课程名。
select SN,CN
from S,SC,C
where S.S# = SC.S# and
SC.C# = C.C# and
SN <> '张三' and
C# in(select C#
from S,SC
where S.S# = SC.S# and SN = '张三')
(9)S1同学选修了C3,将此信息插入SC表中。
insert into SC(S#,C#)
values('S1','C3')
(10)删除S表中没有选修任何课程的学生记录。
delete table S
where S# not in(select distinct S#
from SC)
--or
delete table S
where not exists(select distinct S#
from SC
where S.S# = SC.S#)