数据库简答题.docx
《数据库简答题.docx》由会员分享,可在线阅读,更多相关《数据库简答题.docx(16页珍藏版)》请在冰豆网上搜索。
![数据库简答题.docx](https://file1.bdocx.com/fileroot1/2022-11/14/44361f16-58e3-46a1-a945-bf157f82fcb0/44361f16-58e3-46a1-a945-bf157f82fcb01.gif)
数据库简答题
考点:
数据库逻辑设计ER图
设某商业集团数据库中有三个实体集:
“公司”实体集,其中的属性有公司编号、公司名、地址等;“仓库”实体集,其中的属性有仓库编号、仓库名、规格、地址等;“职工”实体集,其中的属性有职工编号、姓名、性别等。
公司与仓库之间存在“隶属”联系,每个公司管辖若干仓库,每个仓库只能属于一个公司管辖;仓库与职工之间存在着“聘用”联系,每个可聘用的职工人数应该在10~40人之间,每个职工只能在一个仓库工作,仓库聘用职工有聘用期和工资。
(1)试画出ER图;
(2)将ER图转换成关系模型,并注明主码和外码。
解:
(1)ER图如下:
(2)将ER图转换成关系模型如下[注:
下划线表示为主码(关键字),波浪线为外码(外关键字)]:
公司(公司编号,公司名,地址)
仓库(仓库编号,仓库名,地址,公司编号)
职工(职工编号,姓名,性别,仓库编号,聘期,工资)
考点:
数据库建立和维护
1使用T-SQL语句建立一个宾馆数据库(要判断是否已经存在同名数据库,如果是,则删除后再新建),文件属性如下表:
(10分)
参数参数值
数据库名bg
逻辑数据文件名Bg_dat
操作系统数据文件名D:
\bg_dat.mdf
数据文件的初始大小2MB
数据文件的最大大小20MB
数据文件增长帐度2MB
日志逻辑文件名Bg_log
操作系统日志文件名D:
\bg_log.ldf
日志文件初始大小1MB
日志文件增长幅度15%
参考答案:
usemaster
Go
ifexists(select*fromsysdatabaseswherename=’bg')-------------2分
dropdatabasebg
createdatabasebg
on
(name=bg_dat,
filename='d:
\bg_dat.mdf',
size=2MB,
maxsize=20MB,
filegrowth=2MB)
logon
(name='bg_log',
filename='d:
\bg_log.ldf',
size=1MB,
filegrowth=15%)----------------------------------------------------------------------建数据库代码共8分,每个参数错了扣1分)
考点:
表的建立和维护
一、按下图所示创建表格stuinfo,其中字段Stuname为主键,性别为“男、女”,年龄<40类型请根据实际情况制定;并使用sql语句插入图1所示数据。
图1
createtablestuinfo
(stunamevarchar(20)primarykey,
stunovarchar(18),
stusexchar(5),
stuageint,
stuseatintidentity(1,1),
stuaddressvarchar(25),check(stusexin('男','女')andstuage<40))-----5分
insertintostuinfoselect'张秋丽','s25301','男','18','北京海淀'
unionselect'李文才','s25302','男','28','地址不详'
unionselect'李斯文','s25303','女','22','河南洛阳'
unionselect'欧阳俊雄','s25304','女','34','地址不详'
unionselect'梅超风','s25318','女','23','地址不详'--------------3分
1.(建表)创建表student(学号,姓名,性别,生源地,出生日期,系号),并在定义中声明
主键;学生的性别只能取‘男’或者‘女’;姓名不能为空;建立外键系号,关联表DEPARTMENT中的系号
答案:
createtablestudent(
学号char(10)primarykeynotnull,
姓名varchar(20)notnull,
性别char(4)default'男',
生源地varchar(12),
出生日期datetime,
check((性别='男')or(性别='女')),
foreignkey(系号)referencesdepartment(系号)
)
5.商品销售数据库
Article(商品号char(4),商品名char(16),单价Numeric(8,2),库存量int)
Customer(顾客号char(4),顾客名char(8),性别char
(2),年龄int)
OrderItem(顾客号char(4),商品号char(4),数量int,日期date)
1用SQL建立三个表,须指出该表的实体完整性和参照完整性,对性别和年龄指出用户自定义的约束条件。
(性别分成男女,年龄从10到100)。
顾客表的数据用插入语句输入数据,其它两表可用任意方式输入数据。
2检索定购商品号为‘0001’的顾客号和顾客名。
3检索定购商品号为‘0001’或‘0002’的顾客号。
4检索男顾客的人数和平均年龄。
5检索至少订购了3单商品的顾客号和顾客名及他们定购的商品次数和商品总数量,并按商品总数量降序排序。
【6】采用美国的ABCDE五级打分制来显示笔试成绩。
(表名为stumarks)
A级:
90分以上;B级:
80-89分;C级:
70-79分;D级:
60-69分;E级:
60分以下。
答案:
SelectstuNo,成绩=case
Whenwrittenexam<60then‘E’
Whenwrittenexambetween60and69then‘D’
Whenwrittenexambetween70and79then‘C’
Whenwrittenexambetween80and89then‘B’
Else‘A’
End
Fromstumarks
21职工(职工号、职工名、工资)管理(仓库号、职工号、领导)
E1王亮427WH1E3E3
E2李刚521WH1E4E3
E3张长弓625WH2E1E2
E4刘燕521WH2E2E2
仓库(仓库号、仓库名、面积)
WH1燃料库500
WH2原料库350
1.写出创建上面所示三个表的建表sql代码,其中职工表职工号为主键,仓库表仓库号为主键,管理表中仓库号为主键;并使用sql语句插入上图所示数据三个表的数据。
2.完成下列操作的SQL语言:
(1)将工资低于600元的所有职工工资增加60元。
(2)列出管理WH2仓库的所有职工的姓名。
(3)找出燃料库的领导职工号
(4)管理仓库WH1的所有职工的平均工资
1createdatabasefactory
usefactory
createtable职工(职工号vachar(10)primarykey,职工名varchar(10)notnull,工资int)
createtable管理
(仓库号vachar(10)primarykey,
职工号varchar(10)notnull,
领导varchar(10)
)
createtable仓库
(仓库号vachar(10)primarykey,
仓库名varchar(10)notnull,
面积int
)
----添加数据
insertinto职工values('E1','王亮','427')
insertinto职工values('E2','李刚','521')
insertinto职工values('E3','张长弓','625')
insertinto职工values('E4','刘燕','521')
insertinto仓库values('WH1','燃料库','500')
insertinto仓库values('WH2','原料库','350')
insertinto管理values('WH1','E3','E3')
insertinto管理values('WH1','E4','E3')
insertinto管理values('WH2','E1','E2')
insertinto管理values('WH2','E2','E2')
2update职工set工资=(工资+60)
where工资<600
select职工名from职工
where职工号=(
select职工号from管理
where仓库号='WH2')
3select管理.职工号from管理,仓库where仓库.仓库名='燃料库')
4selectavg(工资)
from职工
having职工号=(
select职工号from管理
where仓库号='WH1')
考点:
查询
1设关系模式SCG(S#,C#,grade)中S#为学生号,C#为课程号,grade为某学生学某号课程的考试成绩。
今要查询平均分数超过80分的课程的平均成绩,且要求查询的结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列。
写出SQL查询。
SelectC#,AVG(grade)
FromSCG
GroupbyC#
HavingAVG(grade)>80
Orderby2,C#desc
考点:
分组查询排序聚集函数难度:
中
2.(子查询)使用带有exists的子查询来表示:
查询至少选修了sno=1001012111所选修的全部课程的学生号码(表sc为课程表,sno表示学生号码)
参考:
selectdistinctsno
Fromscx
Wherenotexists
(select*fromscywherey.sno=’1001012111’andnotexists
(select*fromsczwherez.sno=x.snoando=o))
考点:
子查询除法难度:
难
8.查询选修了全部课程的学生姓名
student(sno,sname,sage)
course(cno,cname)
sc(sno,cno,grade)
答:
Selectsname
Fromstudent
Wherenotexists
(select*
fromcourse
Wherenotexists
(select*fromsc
Wheresno=student.sno
Andcno=o))
考点:
子查询除法难度:
难
5.已知:
Student(Sno,Sname,Sage,Ssex)学生表
Course(Cno,Cname,Tno)课程表
SC(Sno,Cno,score)成绩表
Teacher(Tno,Tname)教师表
查询“001”课程比“002”课程成绩高的所有学生的学号SQL语句答:
selecta.Snofrom(selectsno,scorefromscwhereCno='001')a,(sel