sql试题--经典三表问题----4----

本文通过具体实例,详细介绍了如何使用标准SQL嵌套语句进行复杂的数据查询操作,包括但不限于查询特定条件下的学员信息、课程信息等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为管理岗位业务培训信息,建立3个表:

S(S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄

C (C#,CN) C#,CN 分别代表课程编号、课程名称

cs (S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩

1.      使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名


create table s 
(sid varchar(22),sn varchar(22),sd varchar(22),sa varchar(22));
insert into s values('1','zhangsan','cn','219');
insert into s values('2','zhangsan2','cn','129');
insert into s values('3','zhangsan3','cn','290');
insert into s values('4','zhangsan4','cn','329');

create table c(cid varchar(22), cn varchar(22));
insert into c values('1','yuwen');
insert into c values('2','yuwen');
insert into c values('3','yuwen');
insert into c values('4','税收基础');
insert into c values('4','yuwen2');


create table cs (sid varchar(22),cid varchar(22),g float);
insert into cs values('1','1','473.8');
insert into cs values('1','2','447.8');
insert into cs values('2','1','147.8');
insert into cs values('2','2','247.8');
insert into cs values('3','1','477.8');

insert into cs values('1','4','4522.8');
insert into cs values('2','4','45.8');
insert into cs values('3','4','37.8');
insert into cs values('1','4','87.8');


select s1.sid, s1.sn from s s1 where s1.sid in ( select cs1.sid from cs cs1,c c1 where c1.cid = cs1.cid and c1.cn= '税收基础');


比较复杂的第二种方法:

select s1.sid, s1.sn from s s1 where s1.sid in(
select cs1.sid 
from cs cs1 
	where cs1.cid = 
		(
			select c1.cid from c c1 
			where c1.cn='税收基础'
		)
);

2       使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位

select s1.sn, s1.sd from s s1 where s1.sid in ( select cs1.sid from cs cs1,c c1 where c1.cid = cs1.cid);
3   使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
select s1.sn, s1.sd from s s1 where s1.sid not in ( select cs1.sid from cs cs1,c c1 where c1.cid = cs1.cid);

4

使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位

select sn,sd
from s
where not exists(
select *
from c
where not exists(
select *
from cs
where sid=s.sid
and cid=c.cid))

SQL 语言中exists,代表‘存在’,带有exists的子查询不返回任何数据,只返回代表‘不’的true和代表‘肯定’的false.not exists表示不存在。选修全部课程的学员姓名和所属单位 用逻辑来表达就是‘任意’课程‘他都选’,转换之后,就变成‘没有’一门课程‘他不选’。第一个not exists代表‘没有’,中间的‘select *
  from c’表示‘一门课程’,因为是从c中选的嘛,第二个not exists 表示‘不’,下面的select *
from sc
where s#=s.s#
and c#=c.c#表示他选,合起来就是‘他不选’

注:参见王珊的数据库系统概论 第三版 P113



查询选修了课程的学员人数


select count(distinct(sid)) from cs;
6 查询选修课程超过5门的学员学号和所属单位


select count(*) from s where sid in(
select sid from cs group by sid having count(sid)=(select count(cid) from c)
) ; 
与第四个非常类似
自己看别人写也不理解,但是自己写了就明白了



稍微变下条件

S(SNO,SNAME) 学生关系。SNO 为学号,SNAME为姓名

C(CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME为课程名,CTEACHER 为任课教师

SC(SNO,CNO,SCGRADE)选课关系。SCGRADE 为成绩

7      找出没有选修过“李明”老师讲授课程的所有学生姓名


第一种方法:

select sn from s where sid not in
(select cs1.sid from cs cs1 where cs1.cid not in
(select c1.cid from c c1 where c1.ct ='laoshi2')
)

第二种方法:
select sn from s where not exists (select * from c,cs where s.sid=cs.sid and cs.cid = c.cid and 
c.ct='laoshi2');

8 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

select s.sid,s.sn,(select avg(g) from cs  where cs.sid=s.sid) from s where s.sid in (select sid from cs where cs.g< '200' group by sid having count(*) >=2);

列出既学过“1”号课程,又学过“2”号课程的所有学生姓名

select s.sn from s where 
s.sid in (select cs.sid from cs ,c  where cs.cid = c.cid and c.cn in ('yuwen','yuwen2') group by cs.sid having count(cs.sid) =2 ) 

第二种方法:非常类似

select s.sn from s where 
s.sid in (select cs.sid from cs ,c  where cs.cid = c.cid and (c.cn ='yuwen' or c.cn='yuwen2') group by cs.sid having count(cs.sid) =2 )

小结

mysql from 表名不能用select代替,
防止出现笛卡尔积就用相对做条件。

having后面不能接字句,只能是函数

10 


一、选择题:(20分) 1、根据关系数据基于的数据模型——关系模型的特征判定下列正确的一项:(___) A、只存在一对多的实体关系,以图形方式来示。 B、以二维格结构来保存数据,在关系中不答应有重复行存在。 C、能体现一对多、多对多的关系,但不能体现一对一的关系。 D、关系模型数据库是数据库发展的最初阶段。 2、在“连接”组中有两种连接认证方式,其中在(___)方式下,需要客户端应用程序连接时提供登录时需要的用户标识和密码。 A、Windows身份验证 B、SQL Server 身份验证 C、以超级用户身份登录时 D、其他方式登录时 3、SQL Server 2000 在安装之前,应留意的事项:(___) A、SQL Server 2000的任何版本在安装时都不用考虑操作系统的制约。 B、SQL Server 2000的安装对硬件的要求不作任何限制。 C、SQL Server 2000 在安装之前,必须在操作系统级启用TCP/IP。 D、在Windows NT Server 4.0上安装SQL Server 2000时,最低的要求是必须安装Service Pack 4(SP4)以上。 4、关系数据库中,主键是(1___),主键的建立有(2___)种方法,当运用Transact-SQL语句创建主键时,可以是(3___)。 ⑴ A、为标识中唯一的实体 B、创建唯一的索引,答应空值 C、只答应以中第一字段建立 D、答应有多个主键的 ⑵ A、一 B、二 C、 D、四 ⑶ A、create table table1 (column1 char(13) not null primary, column2 int not) on primary; B、alter table table1 with notcheck add constraint [PK_table1] primary key nonclustered ( column1) on primary; C、alter table table1 column1 primary key ; 5、在数据库中是一个非常重要的数据对象,它是用来(1___)各种数据内容的,数据库创建后就可以创建了,创建可以用(2___)等方法来创建。 ⑴ A、显示 B、查询 C、存放 D、检索 ⑵ A、企业治理器 B、查询分析器 C、OSQL D、企业治理器和CREATE TABLE语句 6、为数据创建索引的目的是(1___),可以在创建时用(2___)来创建唯一索引,也可以用(2___)来创建唯一索引。 ⑴ A、提高查询的检索性能 B、创建唯一索引 C、创建主键 D、归类 ⑵ A、设置主键约束,设置唯一约束 B、Create table,Create index C、设置主键约束,Create index D、以上都可以 7、 在Transact-SQL语法中,用来插入数据的命令是(___),用于更新的命令是(___)。 A、INSERT,UPDATE B、UPDATE,INSERT C、DELETE,UPDATE D、CREATE,INSERT INTO 8、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1___),使用要害字(2___)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3___),假如在SELECT语句中使用集合函数时,一定在后面使用(4___)。 ⑴ A、SELECT,INTO B、SELECT,FROM C、SELECT,GROUP D、仅SELECT ⑵ A、DISTINCT B、UNION C、ALL C、TOP ⑶ A、JOIN B、UNION C、INTO C、LIKE ⑷ A、GROUP BY B、COMPUTE BY C、HAVING D、COMPUTE 9、视图是一种常用的数据对象,它是提供(1___)和(1___)数据的另一种途径,可以简化数据库操作,当使用多个数据来建立视图时,的连接不能使
SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的SQL接口。 它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。    结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。    美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。ANSI SQL-92有时被称为ANSI SQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。    SQL语言包含4个部分:    数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。    数据查询语言(DQL),例如:SELECT语句。    数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。    SQL语言包括种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值