数据库SQL查询例题与解答

数据库SQL查询例题与解答
数据库SQL查询例题与解答

1 实验目的

1.熟悉数据库的交互式SQL工具。

2.熟悉通过SQL对数据库进行操作。

3.完成作业的上机练习。

2 实验工具sql server

利用Sql server及其交互式查询工具-查询分析器来熟悉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 *

from Sailors

where sname like '%'

3执行结果:

4.正确,无问题

(3)查询租用过6号船的船员姓名

1.

sname

曹操

勾践

2.

from Sailors,Reserves

where Sailors.sid=Reserves.sid and bid=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.实现语句:select distinct sid

from Reserves

3.执行结果

4.正确,无问题

(5)查找rating>7且年龄>25的水手编号1.

sid

7

2.

from Sailors

where rating>7 and age>25 3执行结果:

4.正确,无问题

(6)查找租用过红船和白船的水手名字

1.

sname

张飞

2.实现语句:select sid

from Sailors

where Sailors.sid=Reserves.sid and

Boats.bid=Reserves.bid and color='红'

intersect

select sid

from Sailors

where Sailors.sid=Reserves.sid and

Boats.bid=Reserves.bid and color='白'

3执行结果

4.无法执行,改变实现语句

【2.实现语句:select sname

from Sailors,Reserves,Boats

where Sailors.sid=Reserves.sid and

Boats.bid=Reserves.bid and color='红'

And sname in

(select sname

from Sailors,Reserves,Boats

where Sailors.sid=Reserves.sid and Boats.bid=Reserves.bid and color='白')

3.执行结果:

4.正确。】

(7)查找租用过红船或绿船的水手编号

1.

sid

1

3

6

8

10

17

16

14

2.实现语句:select distinct sid

from boats,Reserves

where boats.bid=Reserves.bid and

color='绿'or color='红'

3,执行结果

4.执行错误,改变实现语句:

【2.实现语句:select distinct sid

from boats,Reserves

where boats.bid=Reserves.bid and ( color='绿'or color='红');

3.执行结果:

4.正确。】

(8)查找最年长的水手的年龄和名字

1.

Sname Age

马克思41

2.实现语句:select sname,age

from sailors

where age>=all(select agefrom sailors) 3执行结果

4.正确,无问题

(9)在18岁以上水手中,对于每个rating级别中最少有两个水手以上的组中最年轻水手的年龄

1.

Rating Age

2 20

3 23

4 25

5 27

6 31

7 37

2.

from sailors x

where age=(select min(age)

from sailors y

where age>20 and

y.rating=x.rating

group by rating

having count(sid)>1)

3执行结果

4.正确,无问题。

(10)查找每条红色船只被租用的次数

1.

bid count

1 2

8 1

2.

from Reserves,boats

where boats.bid=Reserves.bid

and color='红'

group by boats.bid

3执行结果

4.注意bid前面需要加boats以加以明确。(11)把30岁以上船员的级别调高一级

1.正确结果:

2.实现语句:update sailors

set rating=rating+1

where age>30select *from sailors 3执行结果:

1.正确结果:

2.实现语句:delete

from sailors

where age>40

delete

from Reserves

where sid in(select sidfrom sailors where age>40)

select *from sailorsselect *from Reserves 3执行结果:

4.正确,无问题。

1.实现语句:create view is_sailors

as

select sid,sname,rating,age

from sailors

where age>25

2.执行结果

(14)对(13)建立的视图,举一操作的例子(查询、删除、修改均可)

1.实现语句:select *

from is_sailors

where rating>5

2.执行结果:

(三)出现的问题

1.数据写入的时候没有注意导致某些问题无法解决。

2.交运算无法执行。

3.and与or的运算顺序搞错。

4.出现指代不明的情况。

(四)解决的问题

1.修改数据

2.查阅电脑,问题为:

3.如果想先算or带括号,如题(7)。

4.带上其所属的表,如有连接的话,select后面应该加sailors.bid而不是

只有bid。

(五)未解决的问题

1.修改一旦执行就不能返回了么?

2.

另:由于数据输入的原因,为使结果更据代表性,某些题目可能做了修改,但不改变题目考察意图。

相关主题
相关文档
最新文档