数据库——第三章作业


简述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
posted @ 2022-06-14 01:09  hh2048  阅读(386)  评论(0编辑  收藏  举报