【数据库原理】三级项目——数据库基本操作

一、项目名称

数据库基本操作

二、项目内容

  1. 了解一种DBMS的功能和界面。
  2. 使用图形化界面创建数据库。
  3. 使用图形化界面创建课本70页习题6中的关系表。
  4. 使用图形化界面向所建的关系表中插入数据。
  5. 完成70页习题6第3-5小题的各项查询。
  6. 查询每个城市供应的零件总数。
  7. 查询使用零件数量最多的项目编号和零件数。

所用课本为王珊 萨师煊的《数据库系统概论 第五版》,如下图

image-20230727181309346

三、实验报告

3.1 了解一种DBMS的功能和页面

在这里我使用的是下载MySQL 自带的DBMS——MySQL Workbench

img

Graph 1 MySQL Workbench软件的首页

img

Graph 2 新建数据库的链接(这里我之前已经创建了与端口3306的连接了)

img

Graph 3 填写连接相关的信息

注:这里我之前创了一个数据库连接,使用的是MySQL Sever默认端口3306,如果想用别的端口名可以更改MySQL Server的端口号,具体做法如下:你可以在MySQL Server配置文件中更改端口号。默认情况下,MySQL Server的配置文件通常是my.cnf(Unix/Linux)或my.ini(Windows)。您可以打开该文件,搜索并修改"port"(端口)的设置为一个未被占用的端口号,然后重启MySQL Server。完成后,在MySQL Workbench中创建新的数据库连接,并使用您指定的新端口号。

img

Graph 4 完成连接后的操作页面

注:该DBMS的功能栏已用红框框出并使用//给出了相关的使用注释


3.2 使用图形化界面创建数据库(创建模式)

img

Graph 5 右击模式列表空白处

img

Graph 6 在选项卡中填写该模式的相关信息

img

Graph 7 填写完成后点击Apply选项

img

Graph 8 一直Apply即可

img

Graph 9 创建selfpractise模式成功了


3.3 使用图形化界面创建课本70页习题6中的关系表。

设有一个 SPJ 数据库,包括 S、P、]及 SPJ4 个关系模式

  • S(SNO,SNAMESTATUS,CITY)
  • P(PNO.PNAME.COLORWEIGHT)
  • J(JNOJNAME,CITY)
  • SPJ(SNO,PNONO,QTY)

供应商表 S 由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。

零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。

工程项目表]由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市 (CITY)组成

供应情况表 SPJ 由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(OTY)组成,表示某供应商供应某种零件给某工程项目的数量为 QTY。
今有若干数据如下

image-20230727182115676

img

Graph 10 进入selfpractise模式右击Table后点击Create Table

img

Graph 11 填写该表的相关属性

img

Graph 12 S表的相关属性

img

Graph 13 创建S表的相关代码(系统自动生成的)

img

Graph 14 P表的相关属性

img

Graph 15 创建P表的相关代码(系统自动生成的)

img

Graph 16 J表的相关属性

img

Graph 17 创建J表的相关代码(系统自动生成的)

img

Graph 18 SPJ表的相关属性

img

Graph 19 创建SPJ表的相关代码(系统自动生成的)


3.4 使用图形化界面向所建的关系表中插入数据

img

Graph 20 进入插入数据页面

img

Graph 21 依次填写各项记录对应的属性值

img

Graph 22 J表填写情况

img

Graph 23 J表填写系统自动生成的代码

img

Graph 24 P表填写情况

img

Graph 25 P表填写系统自动生成的代码

img

Graph 26 S表填写情况

img

Graph 27 S表填写系统自动生成的代码

img

Graph 28 SPJ表填写情况

img

Graph 29 SPJ表填写系统自动生成的代码

注:修改了两处地方分别是各表的?NO类型和SPJ的key,以下是修改细节 1. 将SNO\PNO\JNO属性分别从INT类型调整为CHAR类型 2. 将SPJ表中SNO的PK属性给删除了

3.5 完成70页习题6第3-5小题的各项查询

3.5.1求供应工程J1零件为红色的供应商号码SNO
CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `new_view` AS
    SELECT 
        `spj`.`SNO` AS `SNO`
    FROM
        `spj`
    WHERE
        ((`spj`.`JNO` = 'J1')
            AND `spj`.`PNO` IN (SELECT 
                `p`.`PNO`
            FROM
                `p`
            WHERE
                (`p`.`COLOR` = '红')))

Result:

img

3.5.2 求没有使用天津供应商生产的红色零件的工程号JNO
CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `5-2` AS
    SELECT 
        `spj`.`JNO` AS `JNO`
    FROM
        `spj`
    WHERE
        (`spj`.`SNO` IN (SELECT 
                `s`.`SNO`
            FROM
                `s`
            WHERE
                (`s`.`CITY` <> '天津'))
            AND spj.PNO IN (SELECT 
                p.PNO
            FROM
                p
            WHERE
                (p.COLOR = '红')))

Result:

image-20230727183110781

3.5.3 求至少用了供应商S1所提供的全部零件的工程号JNO
CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `5-3` AS
    SELECT DISTINCT
        `spjz`.`JNO` AS `JNO`
    FROM
        `spj` `spjz`
    WHERE
        EXISTS( SELECT 
                `spjy`.`PNO`
            FROM
                `spj` `spjy`
            WHERE
                ((`spjy`.`JNO` = `spjz`.`JNO`)
                    AND EXISTS( SELECT 
                        `spjx`.`PNO`
                    FROM
                        `spj` `spjx`
                    WHERE
                        ((`spjx`.`SNO` = 'S1')
                            AND (`spjx`.`PNO` = `spjy`.`PNO`)))))

Result:

image-20230727183216329

3.6 查询每个城市供应的零件总数

  1. 先创建了一个j-spj的联合视图
CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `j-spj` AS
    SELECT 
        `j`.`JNO` AS `JNO`,
        `j`.`CITY` AS `CITY`,
        `j`.`JNAME` AS `JNAME`,
        `spj`.`SNO` AS `SNO`,
        `spj`.`PNO` AS `PNO`
    FROM
        (`j`
        JOIN `spj`)
    WHERE
        (`j`.`JNO` = `spj`.`JNO`)

Result:

img

  1. 随后使用查询操作进行分组
SELECT SUM(count) AS count, CITY
FROM (
    SELECT COUNT(PNO) AS count, CITY
    FROM selfpractise.`j-spj`
    GROUP BY JNO, CITY
) AS subquery
GROUP BY CITY;

Result:

img


3.7 查询使用零件数量最多的项目编号和零件数

  1. 先创建项目编号和零件数的视图
CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `jno-pnum` AS
    SELECT 
        `spj`.`JNO` AS `JNO`, COUNT(`spj`.`PNO`) AS `PNUM`
    FROM
        `spj`
GROUP BY `spj`.`JNO`

Result:

img

  1. 随后对其零件数最大的一组进行查询
SELECT JNO, PNUM 
from selfpractise.`jno-pnum`
where PNUM = (select max(PNUM) from selfpractise.`jno-pnum`)

Result:

img

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hiddenSharp429

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值