SQL查询数据

一、实验目的
熟练掌握使用SQL查询语言。完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询)。
二、实验原理
基于数据库系统概论,熟悉实验环境,熟悉SQL查询数据等本次实验的基本概念,了解SQL查询数据及其相关操作的语法。根据要求,编写相应的SQL代码,并运行、记录和分析结果,测试所编写代码是否满足步骤要求,完成实验。
三、使用仪器、材料
Oracle 11g,windows10;
四、实验步骤
现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且可以借给任何单位成员,每个单位成员可以借多本书,单位成员与图书的关系是多对多的关系。假设系统中仅有三个关系模式。

数据表结构
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、   创建新的用户并授权:
2、  以用户CC的身份建立连接,并在此连接下执行后面的操作;
3、  拷贝代码运行,删去旧的同名数据表:
4、  拷贝代码运行,建立表格及输入数据:单表查询
1、  查询全体员工的姓名和出生年份;
2、  查询工作在416房间的员工的所有信息;
3、  查询年龄在30到50岁之间的员工姓名、年龄;
4、  查询借了书的员工的编号,排除相同的元素;
5、  查询名字中包含字“小”的员工姓名、办公地点;
6、  查询名字中第二个字查询所有不姓“李”的员工姓名、性别;
7、  为“小”的员工姓名、办公地点;
8、  查询Book表中价格不为空值的书名、出版社;
9、  查询清华大学出版社和高等教育出版社出版的所有书籍,按照出版社降序、书名升序排列;
10、 查询员工的总人数
11、 查询借了书的员工的人数;
12、 查询“张三”所借图书的数量;
13、 查询最贵的书籍的作者姓名;
14、 查询Book表中书籍的平均价格,查询结果说明了什么;
15、 查询book中包含的各个出版社及其出版书籍的数量;复合查询
1、  查询每个员工及其借书情况,列出员工编号、姓名和借书日期
2、  查询每个员工及其借书所有字段(没有借书的员工也列出来);(用左外连接)
3、  查询与“李小龙”工作在同一个办公室的员工信息(用两种方法:自身连接、子查询);
4、  查询借阅了“数据库原理”的员工所有信息(两种方法:连接查询、子查询)
5、  查询小于或等于同一办公室中成员的平均年龄的员工编号、姓名、年龄。
6、  查询比所有数据库原理价格都低、并且不是清华大学出版社出版的书籍的信息;
7、  查询借阅了B001的员工的编号、姓名、办公室;
8、  查询没有借阅B001的员工的编号、姓名、办公室;
9、  查询借阅了所有书籍的员工的姓名;
10、 查询至少借阅了编号为R004的员工借阅的全部书籍的员工姓名、性别、办公室
11、 查询年龄大于30岁或者工作在416的员工信息(用集合查询完成)
12、 查询年龄大于30岁并且工作不在416的员工信息(用集合查询完成)

五、实验过程原始记录(实验过程、数据、图表、计算等)
1、

create user cc identified by ccpassword ;
grant resource, connect, DBA  to cc;

2、建立连接即可
3、

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;
问:为何要先删去RB?能不能先删去READER?
答:RB中选择了READER的数据作为外码,所以要先删除READER,才允许删除RB。

4、

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');

单表查询
1、

select Rname,2020-Rage as birthyear
from Reader;

2、

select *
from READER
WHERE raddress='416';

3、

SELECT Rname,Rage
from Reader
where Rage>30 AND Rage<50

4、

select distinct Rno
from rb;

5、

select Rname,Raddress
from Reader
where Rname like '%小%';

6、

select Rname,Raddress
from Reader
where Rname like '_小_';

7、

select Rname ,Rsex
from Reader
where Rname not like '李%';

8、

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

9、

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

10、

select count(*)
from Reader;

11、

select count(distinct RNO)
from Rb;

12、

select count(*)
from rb
where rno in(select rnofrom readerwhere Rname='张三'
);

13、

select bname,bauthor,bprice
from book
where(bprice=(select max(bprice)from book)
);

14、

select AVG(bprice)
from book;

15、

select bpress,count(bpress)
from book
group by bpress;

复合查询
1、

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

2、

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

3、
自身连接:

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='李小龙') and rname<>'李小龙';

4、

问:为什么最后的子句不能是bno=(            )?
答:reader表中没有bno这个属性

连接查询:

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

子查询:

select RNO,RNAME,RSEX,RADDRESS, rage ,rboss
from READER
where RNO in (select RNO from rb,bookwhere bname='数据库原理' and book.bno=rb.bno
);

5、

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
);

6、

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

7、

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

8、

select rno,rname,raddress
from reader
where rno not in(select rnofrom rbwhere bno='B001'
);

9、

select RNAME from READER
where not exists (select * from book where not exists(select *from rb where bno=book.bno and rno=reader.rno)
);;

10、

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)
);

11、

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

12、

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

六、实验结果及分析
实验结果截图,对实验进行说明和分析。
本处由于实验中所需截图过多,不进行一一上传,有需要实验结果截图或者其他实验报告的同学可以点击https://download.csdn.net/download/weixin_43981315/12721378获取!

实验三 SQL查询数据相关推荐

  1. 数据库实验三 SQL查询数据

    实验三 SQL查询数据 实验目的 熟练掌握使用SQL查询语言.完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询). 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且 ...

  2. 03 SQL查询数据 实验报告

                                                  03 SQL查询数据 实验报告                                       ...

  3. mysql实验6语言结构_实验六 SQL语言数据查询语言DQL.pdf

    实验六 SQL语言数据查询语言DQL 实验六 SQL 语言数据查询语言DQL 一.实验目的 数据查询语言指对数据库中的数据查询.统计.分组.排序等操作.查询语 句可以分为简单查询.连接查询.嵌套查询和 ...

  4. 实验10 SQL Server 数据备份/恢复

    实验10 SQL Server 数据备份/恢复 一.实验目的 1.了解数据库备份的过程和属性设置: 2.掌握应用企业管理器备份和恢复数据库: 3.掌握应用T-SQL备份和恢复数据库: 4.掌握数据导入 ...

  5. 数据库原理及应用(MySQL版)——实验三 MySQL查询

    实验三 MySQL查询 1.实验目的 2.实验内容及要求 1.实验目的 熟悉SELECT语句的语法结构: 熟练掌握组合使用where.group by.having和order by等子句: 熟悉聚合 ...

  6. SQL查询数据并插入新表

    SQL查询数据并插入新表 --如果接受数据导入的表已经存在 insert into 表 select * from tablename--如果导入数据并生成表 select * into 表 from ...

  7. 数据库实验三 嵌套查询和视图操作

    实验三 嵌套查询和视图操作 实验目的: 1.  通过本实验能够熟练应用sql语言使用IN.比较符.ANY或ALL和EXISTS操作符进行嵌套查询操作. 2.  掌握视图的定义.查询.修改. 实验要求: ...

  8. 数据库 实验三 数据库查询和数据操纵

    实验目的 1. 掌握各种查询的使用方法. 2. 掌握数据操纵的使用方法. 1. 使用查询语句完成以下任务(每一个查询都要给出SQL语句,并且列出查询结果). ① 查询与"张志国"同 ...

  9. 数据库 实验二 SQL查询一

    SQL查询一 答案链接链接 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 通过本实验使学生掌握单表查询并初步掌握多表查询的技能. 二.实验内容 使用实验一建立的银行贷款数据库和表,完成以 ...

最新文章

  1. springboot 直接转发调用_springboot-过滤器的页面跳转【重定向与请求转发】-异常报错...
  2. activemq安全机制
  3. Ajax — 第六天
  4. gdb查看空指针 linux_5 个鲜为人知 GNU 调试器(GDB)技巧
  5. python+html语音人物交互_将HTML输入传递到python脚本
  6. http数据绑定spring mvc详解
  7. alertdialog android api 11,android – 设备api级别11的DialogFragments
  8. “由俭入奢易,由奢入俭难”,记我的编程语言学习
  9. 图解Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN
  10. html5 web报表工具,Web报表工具的填报功能
  11. active控件和java脚本_Active控件问题小结(附解决办法)
  12. SPSS modeler for mac安装教程
  13. python进销存系统代码_继续进销存系统
  14. java打包成jar对其进行加密处理防止反编译
  15. 圆锥曲线之用齐次法求解直线过定点问题
  16. Android应用中打开百度地图、高德地图、网页版百度地图
  17. python和c 情侣网名_qq情侣网名个性网
  18. SparkSQL ClickHouse RoaringBitmap使用实践
  19. 农民伯伯android,Android3.1r1API中文文档——ImageView(cnmahj+农民伯伯).doc.doc
  20. 锅炉软化水不合格是怎么回事?该如何解决?

热门文章

  1. 9个已开源的GPT4平替分享(附开源代码+论文)
  2. 多维度卷积、rpn、fpn网络相关知识点记录
  3. openwrt使用linux内核版本,openwrt更换原有Linux内核版本
  4. 7天入门Python 3 — Python对象属性及核心数据类型
  5. 大疆SDK-航线文件
  6. 点到点信道和广播信道的区别
  7. [APIO2013]道路费用
  8. 智能客流分析:构建智慧出行系统,提升交通效率!
  9. 对话 Fork 创始人:帮云服务厂商精准获客,我们是如何做到的?
  10. 从游戏设计阶段提升付费深度,看看《狐妖小红娘》是怎么做的?