[SQL语句]十道典型例题

 上篇我们对数据库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#)

猜你喜欢

转载自blog.csdn.net/m0_73381672/article/details/131126302