数据库系统原理实验报告5 | 数据查询

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。

专业课本:

————

本次实验使用到的图形化工具:Heidisql

目录

一、实验目的

二、实验内容

1.找出读者所在城市是“shanghai”的身份是“professor”的读者,或所在城市名包含“jing”的身份为“student”的读者的读者号及身份,按读者号的降序排列

2.对每一种有读者订购的图书,找出书号及有读者订购该书读者所在的所有城市,输出结果包括:书号和城市(输出的列取别名)

3.找出订购了书号为B2的图书的读者姓名及所在城市(用两种方法做:连接、嵌套)

4.找出有一个以上读者订购的图书书号和图书名 

5.求至少订购了一本《Pascal》的读者姓名

6.找出没有订购B1号图书的读者号

7.找出价格大于等于15.00或者读者R2最近订购的图书的书号及书名

8.求图书B2的订购数

9.查询订购的书的数量不确定的(qty是空值),读者编号和书号

10.查询图书单价不是15,17,10的图书的图书号和图书名及价格 

11.查询所有订购了图书的读者的读者号和姓名

12.查询单价小于等于10的所有图书被读者订购的数量,输出书名和订购总数量 

13.查询订购了至少两种书的读者姓名和书的种类数

14.查询书价比同一出版社的平均书价高的图书的书号和书名

15.查询每个出版社书价最高的图书是哪些, 输出出版社,书号,书名

16.找出没有订购B2号图书的读者号,读者的姓名(用存在谓词查询)

17.查询读者R4订购的图书的书号和书名(用存在谓词查询)

18.查询订购了全部书籍的读者的姓名

19.查询至少订购了R1所订购的书籍的读者的编号 

20.把所有Commerce出版社的图书的价格都增加1 

21.把B2读者订购的所有图书的数量改为0

23.查出每个出版社的图书的平均价格,保存到数据库中

24.将所有Beijing读者订购的图书数量改为一本 

25.删去Shanghai的所有读者的订书单

三、实验结果总结

四、实验结果的运用


缅怀!

一、实验目的

1、掌握 数据查询select语句,能够灵活使用它的各个子句进行各种查询,包括分组查询、链接查询、嵌套查询、集合查询等。

2、进一步掌握数据更新语句,insert,update,delete,尤其是数据更新的嵌套操作。


二、实验内容

现有读者购书数据库,该数据库中包含三个表:读者相关信息表R,图书信息表B,读者订购图书表OD。

具体情况如下表:

  1. 根据以上表的情况,做出如下查询,逐题给出代码及截图。

  2. R-B-OD数据库建库建表代码:

  3. CREATE DATABASE RBOD2;USE RBOD2;CREATE TABLE R
    (
    Rno CHAR(4)   PRIMARY KEY,
    Rname VARCHAR(20),
    STATUS VARCHAR(20),
    CITY VARCHAR(20)
    );CREATE TABLE B
    (
    Bno CHAR(4)   PRIMARY KEY,
    Bname VARCHAR(20),
    Price numeric(5,2),
    Pub VARCHAR(20)
    );CREATE TABLE OD
    (
    Rno CHAR(4) NOT NULL,
    Bno CHAR(4) NOT NULL,
    Qty SMALLINT,
    PRIMARY KEY(Rno,Bno),
    FOREIGN KEY (Rno) REFERENCES R(Rno),
    FOREIGN KEY (Bno) REFERENCES B(Bno)
    );INSERT INTO R VALUES('R1','CHenBing','Student','Beijing');
    INSERT INTO R VALUES('R2','ZhouYucai','Professor','Shanghai');
    INSERT INTO R VALUES('R3','WangLiping','Doctor','Nanjing');
    INSERT INTO R VALUES('R4','LiYong','Student','Shanghai');
    INSERT INTO R VALUES('R5','DingWei','Assistant','Beijing');INSERT INTO B VALUES('B1','Modern',15,'Education');
    INSERT INTO B VALUES('B2','Pascal',17,'Qinghua');
    INSERT INTO B VALUES('B3','Scentific',10,'Commerce');
    INSERT INTO B VALUES('B4','PenHuai',9.8,'People');
    INSERT INTO B VALUES('B5','Date Stru',12.6,'Commerce');INSERT INTO OD VALUES('R1','B1',2);
    INSERT INTO OD VALUES('R1','B2',1);
    INSERT INTO OD VALUES('R2','B1',3);
    INSERT INTO OD VALUES('R2','B2',3);
    INSERT INTO OD VALUES('R2','B4',4);
    INSERT INTO OD VALUES('R3','B3',1);
    INSERT INTO OD VALUES('R4','B2',2);
    INSERT INTO OD VALUES('R4','B5',1);

  4. 1.找出读者所在城市是“shanghai”的身份是“professor”的读者,或所在城市名包含“jing”的身份为“student”的读者的读者号及身份,按读者号的降序排列

  5. 代码:
  6. SELECT rno,rname
    FROM r
    WHERE city='Shanghai' AND STATUS='professor'
    UNION 
    SELECT rno,rname
    FROM r
    WHERE city LIKE '%jing%' AND STATUS='student'
    ORDER BY rno DESC;

      运行结果:

  7. 2.对每一种有读者订购的图书,找出书号及有读者订购该书读者所在的所有城市,输出结果包括:书号和城市(输出的列取别名)

  8. 代码:
  9. SELECT bno 书号,city 城市
    FROM od,r
    WHERE od.Rno=r.Rno;
    运行结果:

3.找出订购了书号为B2的图书的读者姓名及所在城市(用两种方法做:连接、嵌套)

代码:

SELECT rname,city
FROM od,r
WHERE od.Rno=r.Rno AND bno='B2'

运行结果: 

  

代码:

SELECT rname,city
FROM r
WHERE rno IN (SELECT rnoFROM odWHERE bno='B2'
);

运行结果:

4.找出有一个以上读者订购的图书书号和图书名 

代码:

SELECT od.Bno,bname
FROM b,od
WHERE b.Bno=od.Bno
GROUP BY Bno HAVING COUNT(*)>1

 运行结果:

  

5.求至少订购了一本《Pascal》的读者姓名

代码:

SELECT rname
FROM r,b,od
WHERE r.Rno=od.Rno AND b.Bno=od.Bno AND qty>=1 AND bname='Pascal'

运行结果:

6.找出没有订购B1号图书的读者号

代码:

SELECT rno
FROM r
WHERE rno NOT IN(SELECT rnoFROM odWHERE Bno='B1' 
);

运行结果:

7.找出价格大于等于15.00或者读者R2最近订购的图书的书号及书名

代码:

SELECT bno,bname
FROM b
WHERE price>=15
UNION
SELECT b.Bno,bname
FROM od,b
WHERE od.Bno=b.Bno AND rno='R2'

 运行结果:

  

8.求图书B2的订购数

代码:

SELECT SUM(Qty)
FROM od
WHERE Bno='B2';

运行结果:

9.查询订购的书的数量不确定的(qty是空值),读者编号和书号

代码:

SELECT rno,bno
FROM od
WHERE qty IS NULL;

运行结果:

10.查询图书单价不是15,17,10的图书的图书号和图书名及价格 

代码:

SELECT bno,bname,price
FROM b
WHERE price NOT IN (15,17,10);

运行结果:

11.查询所有订购了图书的读者的读者号和姓名

代码:

SELECT rno,rname
FROM r
WHERE EXISTS (SELECT *FROM odWHERE od.Rno=r.Rno
)

运行结果:

12.查询单价小于等于10的所有图书被读者订购的数量,输出书名和订购总数量 

代码:

SELECT Bname,SUM(qty)
FROM b,od
WHERE Price <= 10 AND b.bno=od.Bno
GROUP BY od.Bno,Bname;

运行结果:

13.查询订购了至少两种书的读者姓名和书的种类数

代码:

SELECT rname,COUNT(bno) 书的种类数
FROM od,r
WHERE od.Rno=r.Rno
GROUP BY od.Rno HAVING COUNT(*)>=2

运行结果:

14.查询书价比同一出版社的平均书价高的图书的书号和书名

代码:

SELECT bno,bname
FROM b x
WHERE price> (SELECT AVG(price)FROM b yWHERE x.Pub=y.Pub 
)

运行结果:

15.查询每个出版社书价最高的图书是哪些, 输出出版社,书号,书名

代码:

SELECT pub,bno,bname
FROM b x
WHERE price= (SELECT MAX(price)FROM b yWHERE x.Pub=y.Pub
);

运行结果:

16.找出没有订购B2号图书的读者号,读者的姓名(用存在谓词查询)

代码:

SELECT rno,rname
FROM r
WHERE NOT EXISTS (SELECT *FROM odWHERE od.rno=r.Rno AND bno='B2'
);

运行结果:

17.查询读者R4订购的图书的书号和书名(用存在谓词查询)

代码:

SELECT bno,bname
FROM b
WHERE EXISTS (SELECT *FROM odWHERE od.bno=b.bno AND rno='R4'
);

运行结果:

18.查询订购了全部书籍的读者的姓名

代码:

SELECT rname
FROM r
WHERE NOT EXISTS (SELECT *FROM bWHERE NOT EXISTS (SELECT *FROM odWHERE od.Rno=r.Rno AND od.Bno=b.bno)
);

运行结果:

19.查询至少订购了R1所订购的书籍的读者的编号 

代码:

SELECT DISTINCT  rno
FROM od X
WHERE NOT EXISTS (SELECT *FROM od yWHERE rno='R1' AND NOT EXISTS (SELECT *FROM od zWHERE z.Rno=x.rno AND z.Bno=y.Bno)
);

运行结果:

20.把所有Commerce出版社的图书的价格都增加1 

代码:

UPDATE b 
SET price=price+1
WHERE pub='Commerce';

运行结果:

21.把B2读者订购的所有图书的数量改为0

代码:

UPDATE od
SET qty=0
WHERE rno='R2'

运行结果:

22.查询读者表中是否有一个Beijing的读者WangWei,如果有,把他删除

代码:

DELETE FROM r
WHERE city='Beijing' AND rname='WangWei'

运行结果:

23.查出每个出版社的图书的平均价格,保存到数据库中

代码:

CREATE TABLE pub_price (pub CHAR(15),Avg_price smallint
);
INSERT 
INTO pub_price(pub,Avg_price)
SELECT pub,AVG(price)
FROM b
GROUP BY pub;

运行结果:

24.将所有Beijing读者订购的图书数量改为一本 

代码:

update od
SET Qty=1
WHERE Rno IN
(select Rnofrom Rwhere CITY='北京'
);

运行结果:

25.删去Shanghai的所有读者的订书单

代码:

delete
from od
where Rno IN
(select Rnofrom Rwhere CITY='上海'
);

运行结果:

(备注:由于我是代码全部写完,执行过了之后最后再截图粘贴到实验报告的,后五题是增删改,有的数据已经被更改过了,再运行前面的查询代码截图时结果可能会和正确的不太一样。不过前面的代码我是多次更改后保证正确之后才写上去的,实际结果应没有问题。)


三、实验结果总结

 1、本次实验我用时3个半小时,做得比较慢,有些地方有卡顿。单个查询作业没什么问题,但综合起来做,由于可选择的方法太多,以及对题目表述的不熟悉,导致完成起来有些不熟练。

2、为了避免上述问题,我需要再次进行综合性的梳理,以及保持每天的练习。

3、本次实验中遇到的部分问题通过上网搜索以及与同学讨论,已经成功解决。

4、在照着书敲代码时,结果报出了语法错误。意识到书本上的不是mysql,在实验过程中不能盲目跟随课本。

5、应当对之前章节或实验中学习的建表删除更新的语句语法进行复习,以免遗忘。 


四、实验结果的运用

在educ数据库中的应用。

educ数据库建库建表代码:

create database educ;
use educ;
CREATE TABLE Student
(
Sno CHAR(9) NOT NULL PRIMARY KEY,
Sname CHAR(20),
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);CREATE TABLE Course
(
Cno CHAR(4) NOT NULL PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);CREATE TABLE SC
(
Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);INSERT INTO Student VALUES('200215121','李勇','男',20,'CS');
INSERT INTO Student VALUES('200215122','刘晨','女',19,'CS');
INSERT INTO Student VALUES('200215123','王敏','女',18,'MA');
INSERT INTO Student VALUES('200215125','张立','男',19,'IS');
INSERT INTO Student VALUES('200215124','张立','男',19,'IS');INSERT INTO Course VALUES('2','数学',null,2);
INSERT INTO Course VALUES('6','数据处理',null,2);
INSERT INTO Course VALUES('7','pascal语言','6',4);
INSERT INTO Course VALUES('5','数据结构','7',4);
INSERT INTO Course VALUES('4','操作系统','6',3);
INSERT INTO Course VALUES('1','数据库','5',4);
INSERT INTO Course VALUES('3','信息系统','1',4);INSERT INTO SC VALUES('200215121','1',92);
INSERT INTO SC VALUES('200215121','2',85);
INSERT INTO SC VALUES('200215121','3',88);
INSERT INTO SC VALUES('200215122','2',90);
INSERT INTO SC VALUES('200215122','3',80);

代码:

/* 嵌套查询(不相关) */
SELECT sno,sname
FROM student
WHERE ssex='女' and sno IN (SELECT snoFROM sc);SELECT sno,cno 
FROM sc
WHERE sno IN (SELECT snoFROM studentWHERE sdept='CS');/* 嵌套查询(相关)	*/
SELECT cno,sno
FROM sc x
WHERE grade<(SELECT AVG(grade)FROM sc yWHERE x.Sno=y.Sno);SELECT sno,AVG(grade)
FROM sc
GROUP BY sno HAVING  AVG(grade)>80SELECT cno,sno
FROM sc x
WHERE grade<(SELECT avg(grade)FROM sc yWHERE x.sno=y.sno);SELECT sno,sname
FROM student x
WHERE sage <(SELECT AVG(sage)FROM student yWHERE x.Sno=y.SnoGROUP BY sdept);SELECT sno,sname
FROM student
WHERE NOT EXISTS (SELECT *FROM scWHERE sno=student.Sno AND cno='1'
);/* 嵌套查询(全称谓词) */
SELECT cno,cname
FROM course
WHERE NOT EXISTS (SELECT *FROM scWHERE cno=course.Cno AND sno='200215121'
);SELECT distinct sno
FROM sc X
WHERE NOT EXISTS (SELECT *FROM sc yWHERE y.Sno='200215122' AND NOT EXISTS (SELECT *FROM sc zWHERE z.sno=x.sno AND z.cno=y.Cno));SELECT DISTINCT sno
FROM sc x
WHERE NOT EXISTS (SELECT *FROM sc yWHERE y.Cno='1' AND NOT EXISTS (SELECT *FROM sc zWHERE z.Cno=y.Cno AND z.Sno=x.Sno));SELECT sname
FROM student
WHERE NOT EXISTS (SELECT *FROM courseWHERE NOT EXISTS (SELECT *FROM scWHERE sno=student.Sno AND cno=course.cno));SELECT sname
FROM student
WHERE sno IN (SELECT snoFROM scGROUP BY sno HAVING COUNT(*)>3);SELECT sno,sname
FROM student x
WHERE sage<(SELECT AVG(sage)FROM student yWHERE y.Sdept=x.Sdept);SELECT sno
FROM sc X
WHERE grade=(SELECT MIN(grade)FROM sc yWHERE y.Cno=x.Cno);	/* 删除(带有子查询的) */
delete
from student
where sno IN
(select snofrom scwhere grade='88'
);/* 更新(带有子查询的) */
update sc
SET grade=90
WHERE sno IN
(select snofrom studentwhere sdept='IS'
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最佳实践 | 八爪鱼采集器如何用PartnerShare做全民分销?

在数字化时代&#xff0c;数据采集和分析已经成为企业运营和决策的重要一环。八爪鱼采集器作为一款领先的SaaS产品&#xff0c;凭借其强大的数据采集和处理能力&#xff0c;成为了众多企业和个人用户的心头好。为了进一步拓展市场份额&#xff0c;提升品牌影响力&#xff0c;八…

Web 安全基础理论

Web 安全基础理论 培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;624032112 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 移动应用开发群&#xff1a;548238632 短视频制作群&#xff1a; 744125867极安云…

云动态摘要 2024-05-09

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [免费试用]即刻畅享自研SaaS产品 腾讯云 2024-04-25 涵盖办公协同、营销拓客、上云安全保障、数据分析处理等多场景 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…

springcloud服务间调用 feign 的使用

引入依赖包 <!-- 服务调用feign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>创建调用外部服务的接口 需要使用的地方注入 使用 启动类增…

华为eNSP小型园区网络配置(上)

→跟着大佬学习的b站直通车← 目标1&#xff1a;dhcp分配ip地址 目标2&#xff1a;内网用户访问www.yzy.com sw1 # vlan batch 10 # interface Ethernet0/0/1port link-type accessport default vlan 10 # interface Ethernet0/0/2port link-type trunkport trunk allow-pass…

经验浅谈!伦敦银如何交易?

近期&#xff0c;伦敦银价格出现很强的上涨&#xff0c;这促使一些新手投资者进入了市场&#xff0c;但由于缺乏经验&#xff0c;他们不知道该怎么在市场中交易&#xff0c;下面我们就从宏观上介绍一些方法&#xff0c;来讨论一下伦敦银如何交易。 首先我们要知道&#xff0c;要…

以目录创建的conda环境添加到jupyter的kernel中

场景&#xff1a;由于某些原因&#xff0c;服务器上的conda环境不能通过--name的方式创建&#xff0c;只能通过指定目录即-p的方式&#xff0c;在这种情况下该环境在conda env list中没有显示&#xff0c;无法在jupyter kernel中搜到&#xff0c;只能手动添加。 1.进入环境 # …

Unity VR在编辑器下开启Quest3透视(PassThrough)功能

现在有个需求是PC端串流在某些特定时候需要开启透视。我研究了两天发现一些坑,记录一下方便查阅,也给没踩坑的朋友一些思路方案。 先说结论,如果要打PC端或者在Unity编辑器中开启,那么OpenXR当前是不行的可能还需要一个长期的过程,必须需要切换到Oculus。当然Unity官方指…

如何用画图处理截图【攻略】

如何用画图处理截图【攻略】 前言版权推荐如何用画图处理截图用画图打开图片简单使用操作&#xff1a;重设图片大小操作&#xff1a;简单覆盖 最后 前言 2024-5-9 22:29:27 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于…

C++对象引用作为函数参数

使用对象引用作为函数参数最常见&#xff0c;它不但有指针作为参数的优点&#xff0c;而且比指针作为参数更简单、更方便。 引用方式进行参数传递&#xff0c;形参对象就是实参对象的“别名”&#xff0c;对形参的操作其实就是对实参的操作。 例如:用对象引用进行参数传…

Git泄露(CTFHUB的git泄露)

log 当dirsearch 扫描一下&#xff0c;命令&#xff1a; python dirsearch.py -u url/.git 发现存在了git泄露 借助kali里面&#xff0c;打开GitHack所在的目录&#xff0c;然后 输入&#xff1a; python2 GitHack.py -u url/.git/ 必须要用Python2 tree 命令 可以看到…

MATLAB 自定义实现点云随机抽稀方法(66)

MATLAB 自定义实现点云随机抽稀方法(66) 一、算法介绍二、算法实现1.代码2.结果三、数据链接一、算法介绍 MATLAB虽然提供了点云随机抽稀的内置函数,但是我们也可以自己实现这个功能,有助于理解,下面是具体的实现效果和代码(直接复制粘贴即可使用): 使用提供的数据直接…

信息收集篇 V1.1

零、 前言 0.1 话说 0.2 更新 0.3 致谢 一、 whois 1.1 常用在线收集whois信息站点&#xff1a; 1.2 查询企业的备案信息&#xff0c;主要的三种方式&#xff1a; 1.3 网站真实IP 1.4 旁站C端 二、 子域名 2.1 谷歌语法 2.2 第三方网站聚合了大量的DNS数据&#xff0c;…

Langchain实战

感谢阅读 LangChain介绍百度文心API申请申请百度智能云创建应用 LLMChain demo以及伪幻觉问题多轮对话的实现Sequential ChainsSimpleSequentialChainSequentialChainRouter Chain Documents ChainStuffDocumentsChainRefineDocumentsChainMapReduceDocumentsChainMapRerankDoc…

C语言 变量的作用域

今天 我们来说变量的作用域和存储类型 每种事物 都有自己作用的范围限制 例如 汽车只能在路上跑 轮船只能在海洋 飞机只能通行于天空 函数的参数 也只有在函数被调用过程中分配内存资源 函数执行结束 空间也会被立即释放 这也说明了 行参变量只有在函数内才有效 离开了该函数 …

【Linux】项目自动化构建工具make/makefile的简单使用

使用步骤 1) 编写 创建 makefile 文件 vim makefile用 vim 打开名为 makefile 的文件,存在该文件则打开编辑,不存在则创建并打开.在 makefile 文件中编写需要编译的文件 test:test.cppg -o test test.cpp第一行: 冒号左侧为编译后的可执行文件名,可以随便取. 冒号右侧为依赖…

封装一个可以最小化和展开的弹窗组件

gl-dialog 大概思路&#xff1a; 在弹窗组件内部引入gl-dialog-collapse&#xff0c;这个组件主要用于存储已经被最小化的弹窗&#xff08;基础数据&#xff09; 弹窗内部的数据如何在父组件拿到是通过作用域插槽来实现的 gl-dialog接收一个tempData这个数据会在内部被记录下来…

salmon使用体验

文章目录 salmon转录本定量brief模式一&#xff1a;fastq作为输入文件需要特别注意得地方 模式二&#xff1a; bam文件作为输入 salmon转录本定量 brief 第一点是&#xff0c;通常说的转录组分析其中有一项是转录本定量&#xff0c;这是一个很trick的说话&#xff0c;说成定量…

代码随想录算法训练营第四十二天| 01背包问题(二维、一维)、416.分割等和子集

系列文章目录 目录 系列文章目录动态规划&#xff1a;01背包理论基础①二维数组②一维数组&#xff08;滚动数组&#xff09; 416. 分割等和子集①回溯法&#xff08;超时&#xff09;②动态规划&#xff08;01背包&#xff09;未剪枝版剪枝版 动态规划&#xff1a;01背包理论基…

基于Vue3与ElementUI Plus酷企秀可视化设计器中的创新应用

一、引言 随着科技的快速发展&#xff0c;前端技术已经从简单的网页呈现进化到了复杂的数据可视化、互动体验和跨平台应用的构建。酷企秀可视化设计器作为一个集成了多种前端技术的创新平台&#xff0c;不仅为企业提供了全方位的数字化展示解决方案&#xff0c;还在多个行业领…