数据库实验三 SQL查询数据

实验三

SQL查询数据

实验目的

熟练掌握使用SQL查询语言。完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询)。

 

实验内容

现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且可以借给任何单位成员,每个单位成员可以借多本书,单位成员与图书的关系是多对多的关系。假设系统中仅有三个关系模式。

数据表结构

Reader

属性名

类型

长度

是否空

含义

RNO

varchar2

4

 

员工编号(主码)

Rname

varchar2

10

员工姓名

Rsex

varchar2

2

 

性别

Rage

integer

integer

 

年龄

Rboss

varchar2

10

 

直接上司

Raddress

varchar2

30

 

办公地点

Book

属性名

类型

长度

是否空

含义

BNO

varchar2

4

 

书本编号(主码)

Bname

varchar2

50

书名

Bauthor

varchar2

50

 

作者

Bpress

varchar2

50

 

出版社

Bprice

varchar2

numeric(6,2)

 

价格

RB

属性名

类型

长度

是否空

含义

RNO

varchar2

4

 

员工编号

BNO

varchar2

4

 

书本编号

RBdate

date

 

 

借阅日期

 

 

 

 

 

提示(黄色底的代码可以直接粘贴运行):

  1. 创建新的用户并授权:

create user cc identified by ccpassword ;

grant resource, connect, DBA  to cc;

  1. 以用户CC的身份建立连接,并在此连接下执行后面的操作;
  2. 拷贝代码运行,删去旧的同名数据表:

Declare

tmp integer default 0;

Begin

select count(*) into tmp from user_tables where table_name='RB';

if(tmp>0) then

execute immediate 'drop table RB';

end if;

select count(*) into tmp from user_tables where table_name='READER';

if(tmp>0) then

execute immediate 'drop table READER';

end if;

select count(*) into tmp from user_tables where table_name='BOOK';

if(tmp>0) then

execute immediate 'drop table BOOK';

end if;

end;

 

问:为何要先删去RB?能不能先删去READER?

因为RB表中定义了外键RNO(关联Reader)和BNO(关联Book),如果先删去READER就会违反了参照完整性。

foreign key (RNO) references Reader(RNO),

foreign key (BNO) references Book(BNO)

 

  1. 拷贝代码运行,建立表格及输入数据:

create table Reader

(

    RNO      varchar2(4) primary key,

    Rname    varchar2(10) not null,

    Rsex       varchar2(2),

    Rage       integer,

    Rboss     varchar2(10),

    Raddress varchar2(30)

) ;

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R001','张三',20,'男','李四','416');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R002','张三',35,'女',null,'417');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R003','李四',30,'男',null,'416');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R004','王五',20,'男',null,'417');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R005','马六',40,'男',null,'416');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R006','刘三',20,'男',null,'417');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R007','王四',40,'男','李四','416');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R008','李小龙',20,'男','李四','417');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R009','王小倩',40,'男','李四','416');

insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R010','王一小',20,'男','李四','417');

 

create table Book

(

    BNO      varchar2(4),

    Bname    varchar2(50) not null,

    Bauthor  varchar2(50),

    Bpress    varchar2(50),

    Bprice    numeric(6,2),

    primary key(BNO)

);

insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B001','严蔚敏','数据结构','清华大学出版社',null);

insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B002','唐发根','数据结构','北航出版社',24);

insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B003','王珊','数据库原理','高等教育出版社',40);

insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B004','张飞','数据库原理','清华大学出版社',30);

insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B005','王珊','数据库原理','清华大学出版社',null);

 

create table RB

(

    RNO varchar2(4),

    BNO varchar2(4),

    RBdate date default sysdate,

    primary key(RNO,BNO),

    foreign key (RNO) references Reader(RNO),

    foreign key (BNO) references Book(BNO)

);

insert into RB (RNO,BNO) values ('R001','B001');

insert into RB (RNO,BNO) values ('R001','B002');

insert into RB (RNO,BNO) values ('R001','B004');

insert into RB (RNO,BNO) values ('R002','B001');

insert into RB (RNO,BNO) values ('R003','B001');

insert into RB (RNO,BNO) values ('R004','B001');

insert into RB (RNO,BNO) values ('R004','B002');

insert into RB (RNO,BNO) values ('R005','B001');

insert into RB (RNO,BNO) values ('R006','B001');

insert into RB (RNO,BNO) values ('R006','B003');

insert into RB (RNO,BNO) values ('R006','B005');

insert into RB (RNO,BNO) values ('R006','B002');

insert into RB (RNO,BNO) values ('R006','B004');

 

初始数据

reader

RNO

RNAME

RSEX

RAGE

RBOSS

RADDRESS

R001

张三

20

李四

416

R002

张三

35

 

417

R003

李四

30

 

416

R004

王五

20

 

417

R005

马六

40

 

416

R006

刘三

20

 

417

R007

王四

40

李四

416

R008

李小龙

20

李四

417

R009

王小倩

40

李四

416

R010

王一小

20

李四

417

 

book表中数据

BNO

BNAME

BAUTHOR

BPRESS

BPRICE

B002

数据结构

唐发根

北航出版社

24

B003

数据库原理

王珊

高等教育出版社

40

B004

数据库原理

张飞

清华大学出版社

30

B005

数据库原理

王珊

清华大学出版社

 

B001

数据结构

严蔚敏

清华大学出版社

 

 

RB表中数据

RNO

BNO

RBDATE(实验时间)

R001

B001

插入数据时的系统时间

R001

B002

 

R001

B004

 

R002

B001

 

R003

B001

 

R004

B001

 

R004

B002

 

R005

B001

 

R006

B001

 

R006

B003

 

R006

B005

 

R006

B002

 

R006

B004

 

 

单表查询

  1. 查询全体员工的姓名和出生年份;

SELECT RNAME,'Year of Birth: ' ,2019-RAGE FROM reader;

  1. 查询工作在416房间的员工的所有信息;

SELECT RNO,RNAME,RSEX,RAGE,RBOSS FROM reader where RADDRESS='416';

  1. 查询年龄在3050岁之间的员工姓名、年龄;

select rname,rage from reader where rage BETWEEN 30 and 50;

  1. 查询借了书的员工的编号,排除相同的元素;

select DISTINCT rno  from rb

  1. 查询名字中包含字“小”的员工姓名、办公地点;

select rname ,raddress from reader where rname like '%小%';

  1. 查询名字中第二个字为“小”的员工姓名、办公地点;

select rname,raddress from reader where  rname like '_小%' ;

注:ORACLE只需一个下划线符号代表一个汉字

  1. 查询所有不姓“李”的员工姓名、性别;

select rname,rsex from reader where  rname not like '李%';

  1. 查询Book表中价格不为空值的书名、出版社;

select bname,bpress,bprice from book;

select bname,bpress,bprice from book where  bprice  is not null;

  1. 查询清华大学出版社和高等教育出版社出版的所有书籍,按照出版社降序、书名升序排列;

select * from book;

 

上面的语句用来查看后面的语句结果对不对。

 

select * from book  where bpress='清华大学出版社'or bpress='高等教育出版社' ORDER by bpress desc,BNAME asc;

  1. 查询员工的总人数

SELECT  COUNT(*)  FROM READER

  1. 查询借了书的员工的人数

SELECT COUNT(*) FROM READER WHERE READER.RNO IN (SELECT RNO FROM rb);

或:

SELECT COUNT(DISTINCT rno) FROM RB

  1. 查询“张三”所借图书的数量;

select COUNT(*) from rb where rno in (SELECT RNO FROM reader where rname='张三')

  1. 查询最贵的书籍的作者姓名;

select bname,bauthor,bprice from book where bprice=(SELECT MAX(bprice)FROM BOOK);

  1. 查询Book表中书籍的平均价格,查询结果说明了什么;

select AVG(bprice) from book

去掉了空值

  1. 查询book中包含的各个出版社及其出版书籍的数量;

SELECT bpress,'nount of bpress: ' ,COUNT(bpress)FROM book GROUP BY bpress, 'nount of bpress: ';

复合查询

  1. 查询每个员工及其借书情况,列出员工编号、姓名和借书日期

select reader.rno,rname,rbdate from reader,rb where reader.rno in rb.rno;

  1. 查询每个员工及其借书所有字段(没有借书的员工也列出来);(用左外连接)

select reader.rno,rname,rsex,rb.bno,rbdate from reader left outer JOIN rb on reader.rno=rb.rno ;

  1. 查询与“李小龙”工作在同一个办公室的员工信息(用两种方法:自身连接、子查询);

自身连接:select b.rname from reader a, reader b where  b.raddress = a.raddress and  a.rname = '李小龙' and b.rname != '李小龙';

子查询:select RNAME from READER WHERE RADDRESS= (select RADDRESS from READER where rname='李小龙');

  1. 查询借阅了“数据库原理”的员工所有信息(两种方法:连接查询、子查询)

Select rbdate,rage,rboss,reader.rno,rname,rsex,raddress from reader,rb,book where book.bname='数据库原理'and book.bno=rb.bno and rb.rno=reader.rno;

select RNO,RNAME,RSEX,RADDRESS from READER where RNO in  (SELECT rno from rb where bno in(select bno from book where bname='数据库原理'));

问:为什么最后的子句不能是bno=(            )?

因为表READER里没有bno这个属性列。

  1. 查询小于或等于同一办公室中成员的平均年龄的员工编号、姓名、年龄。

select RNO,RNAME,RAGE,RADDRESS from READER order by raddress;

 

select raddress,avg(rage) from reader group by raddress ;

 

上面的两句用来查看后面的语句结果对不对。

 

select a.rno,a.rname,a.rage,a.raddress from reader a where  a.rage<=(SELECT avg(rage)from reader b where a.raddress=b.raddress);

  1. 查询比所有数据库原理价格都低、并且不是清华大学出版社出版的书籍的信息;

select * from BOOK where BNAME='数据库原理';

select min(BPRICE) from BOOK where BNAME='数据库原理';

select * from BOOK;

 

上面的语句用来查看后面的语句结果对不对。

 

select * from book where bprice<any(SELECT bprice from book where bname='数据库原理')and bpress!='清华大学出版社';

  1. 查询借阅了B001的员工的编号、姓名、办公室;

select READER.RNO,RNAME,RADDRESS from READER;

select * from rb where bno='B001';

 

上面的语句用来查看后面的语句结果对不对。

 

select reader.rno,rname,raddress from reader,rb where  reader.rno=rb.rno and rb.bno='B001';

 

  1. 查询没有借阅B001的员工的编号、姓名、办公室;

select rno,rname,raddress from reader where rno NOT IN (select reader.rno from reader,rb where reader.rno=rb.rno and rb.bno='B001');

  1. 查询借阅了所有书籍的员工的姓名;

select bno from book;

select reader.rno,rname,rb.bno from rb left outer join reader  on (reader.rno=rb.rno);

 

上面的语句用来查看后面的语句结果对不对。

 

select RNAME from READER

where not exists (select * from book where not exists(select *from rb where bno=book.bno and rno=reader.rno));; //参考课本P111【例46】

 

注:前两句SELECT是为了显示原数据表的数据,以检查查询结果是否正确。

  1. 查询至少借阅了编号为R004的员工借阅的全部书籍的员工姓名、性别、办公室

Select * From Rb Where Rno='R004';

select reader.rno,rname,rb.bno from rb left outer join reader  on (reader.rno=rb.rno);

 

上面的语句用来查看后面的语句结果对不对。

 

Select Rname,Rsex,raddress From Reader

  Where  not exists (select * from rb a where a.rno='R004'AND not exists (select * from rb b where b.rno=reader.rno and a.bno=b.bno)); //参考上一题

注:前两句SELECT是为了显示原数据表的数据,以检查查询结果是否正确。

  1. 查询年龄大于30岁或者工作在416的员工信息(用集合查询完成)

Select * from reader where rage>30  union Select * from reader where raddress='416';

  1. 查询年龄大于30岁并且工作不在416的员工信息(用集合查询完成)

Select * from reader where rage>30 minus Select * from reader where raddress='416' ;

注意:ORACLE的集合减,不是’except’,而是’ minus’

实验报告要求

写出实验步骤及相关的SQL语句即可。

 

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

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

相关文章

CAF(C++ actor framework)(序列化之结构体,任意嵌套STL)(一)

User-Defined Data Types in Messages&#xff08;用户自定义类型&#xff09;All user-defined types must be explicitly “announced” so that CAF can (de)serialize them correctly. 之前干活&#xff0c;一开始不知道CAF自带序列化&#xff0c;都用boost库来做序列化&am…

数据结构实验二 树和二叉树的实现

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼418A&#xff09; 2019年5月13日 学院 计算机科学与教育软件学院 年级、专业、班 计算机科学与技术172班 姓名 学号 17061 实验课程名称 数据结构实验 成绩 实验项目名…

前端学习(1800):前端调试之清除浮动练习1

<!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title><link r…

ArcGIS生成根据点图层生成等值面并减小栅格锯齿的操作步骤

ArcGIS生成根据点图层生成等值面并减小栅格锯齿的操作步骤 原文:ArcGIS生成根据点图层生成等值面并减小栅格锯齿的操作步骤一、打开ArcMAP并加载上相应的点图层和边界面图层 二、ArcToolbox--Spatial Analyst工具--差值分析--克里金法(根据不同的情况选择不同的算法&#xff0c…

数据结构实验三 树的遍历生成树

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼418A&#xff09; 2019年4月19日 学院 计算机科学与教育软件学院 年级、专业、班 计算机科学与技术 姓名 学号 实验课程名称 数据结构实验 成绩 实验项目名称 实验三…

前端学习(1800):前端调试之清除浮动练习2

<!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title><!-- 不…

java參数传递机制浅析

欢迎转载&#xff0c;转载请声明出处&#xff01;-----------------------------------------前言&#xff1a;java语言中&#xff0c;參数的传递仅仅有一种机制。那就是值传递。 举例&#xff1a;以下将通过几个样例来说明java中的參数传递机制&#xff0c;这些样例基本涵盖了…

数据库实验四 用户权限管理

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼418B&#xff09; 2019年5月22日 学院 计算机科学与网络工程学院 年级、专业、班 计科172 姓名 学号 实验课程名称 数据库原理实验 成绩 实验项目名称 用户权限管理…

前端学习(1801):前端调试之清除浮动练习3

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title&g…

Java编程思想学习(一) 一切都是对象

前言 Java是基于C的&#xff0c;但Java是一种更加纯粹的面向对象程序设计语言。 C和Java都是混合&#xff0f;杂合型语言。杂合型语言允许多种编程风格。 用引用操纵对象 每种编程语言都有自己操纵内存中元素的方式。 直接操纵元素用某种基于特殊语法的间接表示&#xff08;C和…

C++学习笔记之对文件的操作1

转载自** https://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126545.html ** 前言 我们在编写程序的时候&#xff0c;最密不可分的就是对文件进行相应的操作&#xff0c;我们可以从文件中读取数据&#xff0c;可以将数据保存到文件&#xff0c;可以…… 总而言之&…

C++学习笔记之对文件的操作2

转载自** https://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126680.html ** 什么都不说了&#xff0c;继续《C学习笔记之对文件的操作<1>》的内容… 功能展示 打开文件的方式 当我们想要打开的文件不存在的时候&#xff0c;一般地&#xff0c;ofstream类的对象…

前端学习(1802):前端调试之事件伪类练习

index.html <!DOCTYPE html> <html lang"en"><head> <!--系统内置 start--> <script type"text/javascript"></script> <!--系统内置 end--><meta charset"UTF-8"><title>练习</titl…

前端学习(1809):前端调试之微博头部开发

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>微博实战--head&l…

数据结构实验四 排序算法的实现

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼416&#xff09; 2019年6月4日 学院 计算机科学与教育软件学院 年级、专业、班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项目名称 实验四 排序算法 指导老…

数据结构实验五 查找算法的实现

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼416B&#xff09; 2019年6月11日 学院 计算机科学与教育软件学院 年级、专业、班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项目名称 实验五 查找算法 指导…

前端学习(1811):前端调试之css装饰cursor练习

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title&g…