[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 SN
having count(C#)=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#)
  • 26
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去北极避暑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值