数据库SQL查询例题及解答.docx
《数据库SQL查询例题及解答.docx》由会员分享,可在线阅读,更多相关《数据库SQL查询例题及解答.docx(17页珍藏版)》请在冰豆网上搜索。
数据库SQL查询例题及解答
数据库SQL查询例题及解答
1 实验目的
1.熟悉数据库的交互式SQL工具。
2. 熟悉通过SQL对数据库进行操作。
3. 完成作业的上机练习。
2 实验工具sqlserver
利用Sqlserver及其交互式查询工具-查询分析器来熟悉SQL。
3 实验内容和要求
1)实验内容:
创建数据库boat,包括Sailors,Boats,Reserves三个表,表结构如下:
Sailors(sid:
integer,sname:
string,rating:
integer,age:
real)
船员(船员编号,姓名,级别,年龄)
Boats(bid:
integer,bname:
string,color:
string)
船(船编号,名称,颜色)
Reserves(sid:
integer,bid:
integer,day:
date)
租赁(船员编号,船编号,日期)
(注:
下划线表示主键),并插入一定数据。
2)完成下列要求:
(1)查询所有船员的信息
(2)查询所有姓王的船员的信息
(3)查询租用过103号船的船员姓名
(4)查找租用过船只的船员编号
(5)查找rating>7且年龄>25的水手编号
(6)查找租用过红船和绿船的水手名字
(7)查找租用过红船或绿船的水手编号
(8)查找最年长的水手的年龄和名字
(9)在18岁以上水手中,对于每个rating级别中最少有两个水手以上的组中最年轻水手的年龄
(10)查找每条红色船只被租用的次数
(11)把30岁以上船员的级别调高一级
(12)删除所有年龄超过40岁的船员信息
(13)建立年龄超过25岁的船员的视图
(14)对(13)建立的视图,举一操作的例子(查询、删除、修改均可)
2)要求:
a.建立boat数据库的SQL脚本,插入所有数据项的SQL脚本(包括所有的测试数据)。
b.记录完成查询要求的SQL语句脚本。
c.记录完成查询的查询结果。
《数据库系统概论》实验报告
题目:
交互式SQL
学号:
日期:
2012年4月29日
实验内容与完成情况:
(一)实验所用数据(截图):
Sailors表
Boats表
Reserves表
(二)实验内容和要求
1)实验内容:
创建数据库boat,包括Sailors,Boats,Reserves三个表,表结构如下:
Sailors(sid:
integer,sname:
string,rating:
integer,age:
real)
船员(船员编号,姓名,级别,年龄)
Boats(bid:
integer,bname:
string,color:
string)
船(船编号,名称,颜色)
Reserves(sid:
integer,bid:
integer,day:
date)
租赁(船员编号,船编号,日期)
(注:
下划线表示主键),并插入一定数据。
2)完成下列要求:
(1)查询所有船员的信息。
1.正确结果:
2.实现语句:
select*fromSailors
3.执行结果:
4.正确,无问题
(2)查询所有姓李的船员的信息
1.正确结果:
sid
sname
rating
age
2
李世民
2
20
4
李刚
4
25
13
李刚
5
27
2.实现语句:
select*
fromSailors
wheresnamelike'李%'
3执行结果:
4.正确,无问题
(3)查询租用过6号船的船员姓名
1.正确结果:
sname
曹操
勾践
2.实现语句:
selectdistinctsname
fromSailors,Reserves
whereSailors.sid=Reserves.sid
andbid=6
3执行结果
4.正确,无问题
(4)查找租用过船只的船员编号
1.正确结果:
sid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2.实现语句:
selectdistinctsid
fromReserves
3.执行结果
4.正确,无问题
(5)查找rating>7且年龄>25的水手编号
1.正确结果:
sid
7
2.实现语句:
selectsid
fromSailors
whererating>7andage>25
3执行结果:
4.正确,无问题
(6)查找租用过红船和白船的水手名字
1.正确结果:
sname
张飞
2.实现语句:
selectsid
fromSailors
whereSailors.sid=Reserves.sidand
Boats.bid=Reserves.bidandcolor='红'
intersect
selectsid
fromSailors
whereSailors.sid=Reserves.sidand
Boats.bid=Reserves.bidandcolor='白'
3执行结果
4.无法执行,改变实现语句
【2.实现语句:
selectsname
fromSailors,Reserves,Boats
whereSailors.sid=Reserves.sidand
Boats.bid=Reserves.bidandcolor='红'
Andsnamein
(selectsname
fromSailors,Reserves,Boats
whereSailors.sid=Reserves.sidand
Boats.bid=Reserves.bidandcolor='白')
3.执行结果:
4.正确。
】
(7)查找租用过红船或绿船的水手编号
1.正确结果:
sid
1
3
6
8
10
17
16
14
2.实现语句:
selectdistinctsid
fromboats,Reserves
whereboats.bid=Reserves.bidand
color='绿'orcolor='红'
3,执行结果
4.执行错误,改变实现语句:
【2.实现语句:
selectdistinctsid
fromboats,Reserves
whereboats.bid=Reserves.bidand
(color='绿'orcolor='红');
3.执行结果:
4.正确。
】
(8)查找最年长的水手的年龄和名字
1.正确结果:
Sname
Age
马克思
41
2.实现语句:
selectsname,age
fromsailors
whereage>=all(selectagefromsailors)
3执行结果
4.正确,无问题
(9)在18岁以上水手中,对于每个rating级别中最少有两个水手以上的组中最年轻水手的年龄
1.正确结果:
Rating
Age
2
20
3
23
4
25
5
27
6
31
7
37
2.实现语句:
selectrating,age
fromsailorsx
whereage=(selectmin(age)
fromsailorsy
whereage>20and
y.rating=x.rating
groupbyrating
havingcount(sid)>1)
3执行结果
4.正确,无问题。
(10)查找每条红色船只被租用的次数
1.正确结果:
bid
count
1
2
8
1
2.实现语句:
selectboats.bid,count(sid)
fromReserves,boats
whereboats.bid=Reserves.bid
andcolor='红'
groupbyboats.bid
3执行结果
4.注意bid前面需要加boats以加以明确。
(11)把30岁以上船员的级别调高一级
1.正确结果:
2.实现语句:
updatesailors
setrating=rating+1
whereage>30select*fromsailors
3执行结果:
(12)删除所有年龄超过40岁的船员信息
1.正确结果:
2.实现语句:
delete
fromsailors
whereage>40
delete
fromReserves
wheresidin(selectsidfromsailorswhereage>40)
select*fromsailorsselect*fromReserves
3执行结果:
4.正确,无问题。
(13)建立年龄超过25岁的船员的视图
1.实现语句:
createviewis_sailors
as
selectsid,sname,rating,age
fromsailors
whereage>25
2.执行结果
(14)对(13)建立的视图,举一操作的例子(查询、删除、修改均可)
1.实现语句:
select*
fromis_sailors
whererating>5
2.执行结果:
(三)出现的问题
1.数据写入的时候没有注意导致某些问题无法解决。
2.交运算无法执行。
3.and与or的运算顺序搞错。
4.出现指代不明的情况。
(四)解决的问题
1.修改数据
2.查阅电脑,问题为:
3.如果想先算or带括号,如题(7)。
4.带上其所属的表,如有连接的话,select后面应该加sailors.bid而不是只有bid。
(五)未解决的问题
1.修改一旦执行就不能返回了么?
2.
另:
由于数据输入的原因,为使结果更据代表性,某些题目可能做了修改,但不改变题目考察意图。