《2022年数据库题目借鉴 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库题目借鉴 .pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.新建学生-课程数据库的三个表:学生表:Student(Sno,Sname,Ssex,Sage,Sdept)Sno为主码;课程表:Course(Cno,Cname,Cpno,Credeit)Cno 为主码;学生选修表:SC(Sno,Cno,Grade)Sno,Cno,为主码;Student 学号(Sno)姓名Sname 性别Ssex 年龄Sage 所在系Sdept 95001 李勇男20 CS 95002 刘晨女19 IS 95003 王敏女18 MA 95004 张立男19 IS Course:课程号Cno 课程名Cname 先行课Cpno 学分Credit 1 数据库5 4 2 数学2
2、3 信息系统1 4 4 操作系统6 3 5 数据结构7 4 6 数据处理2 7 Pascal语言 6 4 SC:学号Sno 课程号Cno 成绩Grade 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80 数据库生成语句:Sql 代码create database stu_course 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 15 页 -use stu_course create table student(sno varchar(32),sname varchar(32),ssex varchar(32),sag
3、e int,sdept varchar(32)create table Course(Cno varchar(32),Cname varchar(32),Cpno varchar(32),credit int )create table SC(Sno varchar(32),Cno varchar(32),Grade int )create database stu_course use stu_course create table student(sno varchar(32),sname varchar(32),ssex varchar(32),sage int,sdept varcha
4、r(32)create table Course(Cno varchar(32),Cname varchar(32),Cpno varchar(32),credit int)create table SC(Sno varchar(32),Cno varchar(32),Grade int)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 15 页 -一:查询表中的列和行1:查询全体学生的学号与姓名select sno,sname from student 2:查询全体学生的姓名、学号、所在系。select sno,sname,sdept from student 3:查询全体学生的
5、详细记录select*from student 4:查询全体学生的姓名及出生年份select sname,DATEPART(yy,GETDATE()-sage+1 from student(SQLServer)5:查询全体学生的姓名,出生年份及所在系,要用小写字母表示系名select sname,DATEPART(yy,GETDATE()-sage+1,lower(sdept)from student 6:查询选修了课程的学生学号select sno,cno from sc 7:查询选修了课程的学生姓名select distinct sname from student,sc where st
6、udent.sno=sc.sno 二:条件查询:常用的查询条件查询条件谓词比较=,=,=,!=,!,!;not+上述比较运算符确定范围 Between and,Not between And,确定集合IN,not IN 字符匹配Like,Not Like 空值 IsNull,ISNOTNULL 多重条件 AND,OR 1:查询计算机系全体学生的姓名名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 15 页 -select sname from student where sdept=”CS”2:查询所有年龄在20 岁以下的学生姓名及其年龄select sname,sage from
7、 student where sage20 3:查询考试成绩有不及格的学生的学号select sno from sc where grade60 4:查询年龄在20 到 23 间的学生的姓名,系别及年龄select sname,sdept,sage from student where sage between 20 and 23 5:查询年龄不在20 到 23 间的学生的姓名,系别及年龄select sname,sdept,sage from student where sage not between 20 and 23 6:查询信息系(IS),数学系(MA)和计算机系(CS)学生的姓名和
8、性别select sname,ssex from student where sdept in(IS,MA,CS)7:查询不是信息系(IS),数学系(MA)和计算机系(CS)学生的姓名和性别select sname,ssex from student where sdept not in(IS,MA,CS)8:查询学号为”95001”的学生详细情况select*from student where sno=95001 9:查询所有姓刘的学生的姓名,学号和性别(where name like,刘%?)select sname,sno,ssex from student where sname l
9、ike 刘%10:查询姓”欧阳”且命名为三个汉字的学生的姓名select sname from student where sname like 欧阳 _ 11:查询名字中第2 个字为”阳”字的学生姓名和学号(where sname like _阳%)select sname,sno from student where sname like _阳%12:查询所有不姓刘的学生姓名名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 15 页 -select sname from student where sname not like 刘%13:查询 DB_Design 课程的课程号和
10、学分(where cname like Db_Design Escape)select cno,gredit from course where cname like Db_Design Escape 14:查 询 以”DB_”开 头,且倒 数 第 3 个 字 符为i 的 课 程 的 详细 情 况(where cname like,DB _%i_?escape?),DB _%i_?escape?)select cno,gredit from course where cname like,Db_%i_?escape?15:查询缺少成绩的学生的学号和相应的课程号(where grade is n
11、ot null)select sno,cno from sc where grade is null 16:查询有成绩的学生学号和课程号select sno,cno from sc where grade is not null 17:查询计算机系年龄在20 岁以下的学生姓名select sname from student where sdept=”CS”and sage3 四:连接查询:等值与非等值的连接查询在连接查询中用来连接两个有的条件称为连接条件或连接谓词,当连接运算符号为”=”时,称为等值连接,使用如,=,=,!=连接时称非等值连接1:查询每个学生及其选修课程的情况select s
12、tudent.*,sc.*from student,sc where student.sno=sc.sno 自身连接连接操作在同一个表中进行连接查询2:查询每一门课的间接先修课(即先修课的先修课)select o,second.cpno from course first,course second where first.cpno=o 五:复合条件连接名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 15 页 -1:查询选修2 号课程且成绩在90 分以上的所有学生。Select student,sname form student,sc Where student.sno=sc.
13、sno And So=?2?and sc.grade90六:嵌套查询1:带有谓词in 的子查询查询与“刘晨”在同一个系学习的学生select sno,sname,sdept from student where sdept in(select sdept from student where sname=刘晨)或:select s1.sname,s1.sdept from student s1,student s2 where s1.dept=s2.dept and s2.name=刘晨 查询选修了课程名为“信息系统”的学生学号和姓名select sno,sname from student
14、where sno in(select sno from sc where cno in(select cno from course where cname=信息系统)或:select sno,sname from student,sc,course where student.sno=sc.sno and o=o and 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 15 页 -ame=信息系统)2:带有 Any 或 all 谓词的子查询查询其他系中比信息系中某一学生年龄小的学生姓名和年龄select sname,sage from student where sage a
15、ny(select sage from student where sdept=?is?)and sdept?is?或用集函数:select sname,sage from student where sage(select max(sage)from student where sdept=?is?)and sdept?is?查询其他系中比信息系所有学生年龄都小的学生姓名及年龄select sname,sage from student where sageall(select sage from student where sdept=?is?)and sdept?is?3 带有 Exit
16、st 谓词的子查询查询所有选修了1号课程的学生姓名select sname from student where exists(select*from sc where sno=student.sno and cno=1)查询没有选修1 号课程的学生姓名名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 15 页 -select sname form student where not exists(select*form sc where sno=stuedent.sno and cno=?1?)查询选修所有全部课程的学生姓名select sname from student wh
17、ere not exists(select*from course where not exists(select*from sc where sno=student.sno and cno=o)查询只选修了学生95002 选修的全部课程的一部分的学生号码select distinct sno from sc scx where not exists(select*from sc scy where scy.sno=?95002?andnot exists(select*from sc scz where scz.sno=scx.sno and o=o)二:题一:表数据如下:FYear FNu
18、m 2006 1 2006 2 2006 3 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 15 页 -2007 4 2007 5 2007 6 按如下格式显示:年度2006 2007 汇总6 15 方案一:create table 表名(FID varchar(10),Field1 varchar(100)go insert into 表名select 1,A insert into 表名select 1,B insert into 表名select 1,C insert into 表名select 2,D insert into 表名select 2,E insert in
19、to 表名select 2,F go-创建一个合并的函数create function f_merge(name varchar(100)returns varchar(8000)as begin declare str varchar(8000)set str=select str=str+,+cast(Field1 as varchar(100)from 表名where FID=name set str=stuff(str,1,1,)return(str)End go-select*from 表名-调用自定义函数得到结果:select FID,dbo.f_merge(FID)as tel
20、from 表名group by FID drop table 表名drop function f_merge 方案二:名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 15 页 -select 汇总 as 年度,2006,2007 from(select fyear,fnum from T)as sourceTable pivot(sum(fnum)for fyear in(2006,2007)as pivotTable 回头发现可以用SQL2005 pivot 的方法很简单题二:表 A 数据如下:FID Field1 1 A 1 B 1 C 2 D 2 E 2 F 要求按如下格
21、式显示:FID Field1 1 A,B,C 2 D,E,F 如何做到?create table 表名(FID varchar(10),Field1 varchar(100)go insert into 表名select 1,A insert into 表名select 1,B insert into 表名select 1,C insert into 表名select 2,D insert into 表名select 2,E insert into 表名select 2,F go-创建一个合并的函数create function f_merge(name varchar(100)returns
22、 varchar(8000)as begin 名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 15 页 -declare str varchar(8000)set str=select str=str+,+cast(Field1 as varchar(100)from 表名where FID=name set str=stuff(str,1,1,)return(str)End go-select*from 表名-调用自定义函数得到结果:select FID,dbo.f_merge(FID)as tel from 表名group by FID drop table 表名drop
23、function f_merge 1.表 A 记录如下:aIDaData 1a1 2a2 3a3 表 B 记录如下:bIDbData 1b1 2b2 4b4-Inner join 两个表 a,b 相连接,要取出 id 相同的字段select*from a inner join b on a.aid=b.bid这是仅取出匹配的数据.此时的取出的是:1 a1 b1 2 a2 b2 那么 left join 指:select*from a left join b on a.aid=b.bid 首先取出a表中所有数据,然后再加上与a,b 匹配的的数据此时的取出的是:1 a1 b1 2 a2 b2 3
24、a3 空字符同样的也有right join 指的是首先取出b 表中所有数据,然后再加上与a,b匹配的的数据此时的取出的是:名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 15 页 -2./*建表:dept:deptno(primary key),dname,loc emp:empno(primary key),ename,job,mgr,sal,deptno*/1 列出 emp 表中各部门的部门号,最高工资,最低工资select max(sal)as 最高工资,min(sal)as 最低工资,deptno from emp group by deptno;2 列出 emp 表中
25、各部门job 为CLERK 的员工的最低工资,最高工资select max(sal)as 最高工资,min(sal)as 最低工资,deptno as 部门号from emp where job=CLERK group by deptno;3 对于 emp 中最低工资小于1000 的部门,列出job 为CLERK 的员工的部门号,最低工资,最高工资select max(sal)as 最高工资,min(sal)as 最低工资,deptno as 部门号from emp as b where job=CLERK and 1000(select min(sal)from emp as a where
26、 a.deptno=b.deptno)group by b.deptno 4 根据部门号由高而低,工资有低而高列出每个员工的姓名,部门号,工资select deptno as 部门号,ename as 姓名,sal as 工资from emp order by deptno desc,sal asc 5 写出对上题的另一解决方法(请补充)6 列出 张三 所在部门中每个员工的姓名与部门号select ename,deptno from emp where deptno=(select deptno from emp where ename=张三)7 列出每个员工的姓名,工作,部门号,部门名sel
27、ect ename,job,emp.deptno,dept.dname from emp,dept where emp.deptno=dept.deptno 8 列出 emp 中工作为 CLERK 的员工的姓名,工作,部门号,部门名select ename,job,dept.deptno,dname from emp,dept where dept.deptno=emp.deptno and job=CLERK 9 对于 emp 中有管理者的员工,列出姓名,管理者姓名(管理者外键为mgr)select a.ename as 姓名,b.ename as 管理者from emp as a,emp
28、as b where a.mgr is not null and a.mgr=b.empno 10 对于 dept 表中,列出所有部门名,部门号,同时列出各部门工作为CLERK 的员工名与工作select dname as 部门名,dept.deptno as 部门号,ename as 员工名,job as 工作 from dept,emp where dept.deptno*=emp.deptno and job=CLERK 11 对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序select a.deptno as 部门号,a.ename as 姓名,a.sal as
29、工资from emp as a where a.sal(select avg(sal)from emp as b where a.deptno=b.deptno)order by a.deptno 12 对于 emp,列出各个部门中平均工资高于本部门平均水平的员工数和部门号,按部门号排序select count(a.sal)as 员工数,a.deptno as 部门号from emp as a 名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 15 页 -where a.sal(select avg(sal)from emp as b where a.deptno=b.deptn
30、o)group by a.deptno order by a.deptno 13 对于 emp 中工资高于本部门平均水平,人数多与1 人的,列出部门号,人数,按部门号排序select count(a.empno)as 员工数,a.deptno as 部门号,avg(sal)as 平均工资from emp as a where(select count(c.empno)from emp as c where c.deptno=a.deptno and c.sal(select avg(sal)from emp as b where c.deptno=b.deptno)1 group by a.d
31、eptno order by a.deptno 14 对于 emp 中低于自己工资至少5人的员工,列出其部门号,姓名,工资,以及工资少于自己的人数select a.deptno,a.ename,a.sal,(select count(b.ename)from emp as b where b.sala.sal)as 人数from emp as a where(select count(b.ename)from emp as b where b.sal5 数据库笔试题1.存储过程和函数的区别存储过程是用户定义的一系列sql 语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常
32、是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。数据库笔试题2.事务是什么?事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:原子性事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如B 树索引或双向链表)都必须是正确的。隔离性由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时
33、数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。持久性事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。数据库笔试题3:.游标的作用?如何知道游标已经到了最后?游标用于定位结果集的行,通过判断全局变量FETCH_STA TUS 可以判断是否到了最后,通常此变量不等于0 表示出错或到了最后。名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 15 页 -数据库笔试题4:触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 15 页 -
限制150内