数据库系统原理实验报告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.hqwc.cn/news/675093.html

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

相关文章

【C/C++】设计模式——单例模式

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

创意无限,批量剪辑技巧:视频剪辑中的画中画技巧大揭秘

在视频剪辑的世界里&#xff0c;创意是无限的&#xff0c;而技巧则是实现这些创意的关键。画中画技巧作为视频剪辑中的一种高级技术&#xff0c;可以带给观众新颖的视觉体验&#xff0c;提升视频的质量和观赏性。本文将深入探讨批量剪辑中的画中画技巧&#xff0c;揭示其背后的…

分布式与一致性协议之ZAB协议(五)

ZAB协议 ZAB集群如何从故障中恢复 如果我们想把ZAB集群恢复到正常状态&#xff0c;那么新领导者就必须确立自己的领导关系&#xff0c;成为唯一有效的领导者&#xff0c;然后作为主节点"领导"各备份节点一起处理读写请求 如何确立领导关系 前面提到&#xff0c;选…

Python-VBA函数之旅-property函数

目录 一、property函数的常见应用场景 二、property函数使用注意事项 三、如何用好property函数&#xff1f; 1、property函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、prop…

Backblaze发布2024 Q1硬盘故障质量报告-1

作为一家在2021年在美国纳斯达克上市的云端备份公司&#xff0c;Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告&#xff0c;给大家提供了一份真实应用场景下的稳定性分析参考数据。 截至2024年第一季度末&#xff0c;Backblaze在其全球数据中心的云存储服务器…

嵌入式开发常见概念简介

目录 0. 《STM32单片机自学教程》专栏总纲 API Handle(句柄) 0. 《STM32单片机自学教程》专栏总纲 本文作为专栏《STM32单片机自学教程》专栏其中的一部分&#xff0c;返回专栏总纲&#xff0c;阅读所有文章,点击Link: STM32单片机自学教程-[目录总纲]_stm32 学习-CSD…

HCIP的学习(OSPF总篇)

HCIA的复习 这边可以与我之前写的HCIA博客结合起来一起看&#xff0c;效果更好 HCIA的学习&#xff08;6&#xff09; OSPF状态机 down—关闭-----一旦启动OSPF进程&#xff0c;并发出hello报文&#xff0c;则进入下一个状态init----初始化状态------当收到的hello报文中存在…

太阳能光伏在生活中的三大作用

随着现在太阳能光伏的逐步发展&#xff0c;太阳能光伏已经越来越走近人们的生活&#xff0c;小编带大家盘点一下光伏在生活中的应用 一、发电 光伏的最初应用就是用来发电&#xff0c;以替代传统的化石燃料发电方式。光伏发电可以从根本上解决当今社会面临的能源短缺问题&…

GhostNetV2 Enhance Cheap Operation with Long-Range Attention 论文学习

论文地址&#xff1a;https://arxiv.org/abs/2211.12905 代码地址&#xff1a;https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/ghostnetv2_pytorch 解决了什么问题&#xff1f; 在计算机视觉领域&#xff0c;深度神经网络在诸多任务上扮演着重要角色。为…

数据结构(c):队列

目录 &#x1f37a;0.前言 1.什么是队列 2. 队列的实现 2.1定义队列节点 2.2定义队列 2.3队尾入队列 2.4判断队列是否为空 2.5队头出队列 2.6 队列首元素 2.7队尾元素 2.8队列内的元素个数 2.9销毁队列 3.试运行 &#x1f48e;4.结束语 &#x1f37a;0.前言 言C之…

揿针有危险吗?

点击文末领取揿针的视频教程跟直播讲解 揿针是一种特殊的针具&#xff0c;具有一定的危险性&#xff0c;可能会导致局部感染、疼痛、出血、神经损伤、气胸等危害。 具体体现在什么地方呢&#xff1f; 1、局部感染如果在进行揿针治疗时&#xff0c;没有严格进行无菌操作&#…

【每日刷题】Day33

【每日刷题】Day33 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 2. 445. 两数相加 II - 力扣&#xff08;…