数据库——第三章作业
简述SQL Server的特点。
综合统一;语法简单、易学易用;面向集合操作;高度非过程化;一语多用。
解释ODBC。简述SQL包含的子语言系统。
ODBC,即开放数据库互连接口,且有完整的管理功能。通过它简单的操作就可以非常安全地稳定对数据库进行处理。
SQL包含的子语言系统:DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)、DCL(数据控制语言)。
简述关系代数的选择、投影和连接,分别对应SELECT…FROM…WHERE的短语。
选择:\(\sigma \iff Where\) 。
投影:\(\Pi \iff Select\) 。
连接:\(\Join \iff From\) 。
使用SQL Server完成如下操作:
在下列表中,
供应商S(供应商号SNo,供应商名SName,所在城市City)
零件P(零件号PNo,零件名PName,颜色Color,重量Weight)
工程J(工程号JNo,工程名JName,所在城市City)
供应SPJ(SNo,PNo,JNo,供应数量Qty)
(1)查询所有供应商的姓名和所在城市。
(2)查询所有零件的名称、颜色、重量。
(3)查询使用供应商S1所供应零件的名称。
(4)查询能提供P2零件的供应商及其数量。
(5)查询上海厂商供应的所有零件号码。
(6)查询供应S3供应P3零件的名称。
(7)查询没有供应天津产的零件的供应商。
(8)把全部红色零件的颜色改成蓝色。
(9)删除供应商S4,并从供应关系中删除其相应的记录。
(10)请将(S6,P6,300)插入到零件供应关系(SP)中。
-- 1
select SName, City
from S
-- 2
select PName, Color, Weight
from P
-- 3
select PName
from SPJ, P
where SPJ.PNo = P.PNo and SNo = 'S1'
-- 4
select SNo, Qty
from SPJ
where SPJ.PNo = 'P2'
-- 5
select PNo
from S, SPJ
where S.SNo = SPJ.SN0 and City = '上海'
-- 6
select PName
from SPJ, P
where SPJ.PNo = P.PNo and SNo = 'S3' and PNo = 'P3'
-- 7
select SNo
from S
where S.City not like '天津'
-- 8
update P
set Color = '蓝色'
where Color = '红色'
-- 9
delete form SPJ
where SNo = 'S4'
-- 10
insert into SPJ
values('S6', 'P6', '300')
使用SQL Server完成如下操作:
已知数据库的关系分别为职工(工号,姓名,年龄,性别)、社团(团号,团名,团长,地点)、参加(工号,团号,日期)。
(1)查询参加篮球队的职工的工号和姓名。
(2)查询职工号为666的职工参加的社团名称。
(3)查询各个社团编号及相应的参加人数。
(4)建立视图SInfo(工号,姓名,性别,年龄,团号,团名,团长,日期)。
(5)查询参加歌唱队或者篮球队的职工的工号和姓名。
(6)查询没有参加任何社团的职工基本信息。
(7)查询参加全部社团的职工基本信息。
(8)查询参加工号为666的职工所参加的全部社团的职工工号。
(9)统计每个社团的参加人数。
(10)查询参加人数最多的社团的团名和参加人数。
(11)查询参加人数超过99人的社团的团名和团长。
(12)把对职工和社团的查询和插入权限赋给李明,并允许其继续授权。
-- 1 查询参加篮球队的职工的工号和姓名。
select 工号, 姓名
from 职工
-- 2 查询职工号为666的职工参加的社团名称。
select 团名
from 参加, 社团
where 参加.团号 = 社团.团号 and 参加.工号 = '666'
-- 3 查询各个社团编号及相应的参加人数。
select 团号, count(工号)
from 参加
group by 团号
-- 4 建立视图SInfo(工号,姓名,性别,年龄,团号,团名,团长,日期)。
creat view SInfo as
select 工号, 姓名, 性别, 年龄, 团号, 团名, 团长, 日期
from 职工, 参加, 社团
where 职工.工号 = 参加.工号 and 参加.团号 = 社团.团号
-- 5 查询参加歌唱队或者篮球队的职工的工号和姓名。
select 工号, 姓名
from 职工, 社团, 参加
where 职工.工号 = 参加.工号 and 参加.团号 = 社团.团号 and (社团.团名= '歌唱队' or 社团.团名= '篮球队')
select 工号, 姓名
from 职工, 社团, 参加
where 职工.工号 = 参加.工号 and 参加.团号 = 社团.团号 and 社团.团名= '歌唱队'
union
select 工号, 姓名
from 职工, 社团, 参加
where 职工.工号 = 参加.工号 and 参加.团号 = 社团.团号 and 社团.团名= '篮球队'
-- 6 查询没有参加任何社团的职工基本信息。
select 工号, 姓名, 性别, 年龄
from 职工
where not exists(
select 工号
from 参加
where 职工.工号 = 参加.工号
)
-- 7 查询参加全部社团的职工基本信息。
select 工号, 姓名, 性别, 年龄
from 职工
where not exists(
select * from 社团
where not exists(
select *
from 参加
where 职工.工号 = 参加.工号 and 参加.团号 = 社团.团号
)
)
-- 8 查询参加工号为666的职工所参加的全部社团的职工工号。
select 工号
from 参加
where 团号 in (
select 团号
from 参加
where 工号 = '666'
)
-- 9 统计每个社团的参加人数。
select count(团号)
from 参加
group by 团号
-- 10 查询参加人数最多的社团的团名和参加人数。
select 团名, count(工号)
from 社团, 参加
where 参加.团号 = 社团.团号 and 团号 in(
select 团号
from 参加
group by 团号 having count(*) >= all
)
group by 工号
-- 11 查询参加人数超过99人的社团的团名和团长。
select 团名, 团长
from 社团
where 团号 in(
select 团号
from 参加
group by 团号 having count(*) > 99
)
-- 12 把对职工和社团的查询和插入权限赋给李明,并允许其继续授权。
grant select insert
on 职工, 社团
to 李明
with grant option