实验一 Oracle数据库安装与配置
一、实验目的
(1)掌握 Oracle数据库服务器的安装与配置
(2)了解如何检查安装后的数据库服务器产品,验证安装是否成功。
(3)掌握 Oracle数据库服务器安装过程中出现的问题的解决方法。
二、实验要求
(1)完成 Oracle11G数据库服务器的安装
(2)完成 Oracle11G数据库客户端网络服务名的配置。
(3)检查安装后的数据库服务器产品可用性
(4)解决 Oracle数据库服务器安装过程中出现的问题
三、实验内容
(1)从 Oracle官方网站下载与操作系统匹配的 Oracle11G数据库服务器和客户端安装程序。
(2)解压 Oracle11G数据库服务器安装程序,进行数据库服务器软件的安装。
(3)在安装数据库服务器的同时,创建一个名为 BOOKSALES的数据库。
(4)安装完数据库服务器程序后,解压客户端程序,并进行客户端的安装。
(5)启动 EM Database Express管理工具,登录、查看、操作 BOOKSALES数据库。
(6)启动 SOL Plus工具,分别以SYS用户和 SYSTEM用户登录 BOOKSALES数据库。
四、问题解答及实验结果
(3)在安装数据库服务器的同时,创建一个名为 BOOKSALES的数据库。
(5)启动 EM Database Express管理工具,登录、查看、操作 BOOKSALES数据库。
没有这个管理工具
(6)启动 SOL Plus工具,分别以SYS用户和 SYSTEM用户登录 BOOKSALES数据库。
五、实验体会与收获
知道怎么创建其他的数据库了,而且知道怎么进入其他的数据库,刚开始创建了其他的数据库,我以为之前那个默认的orcl数据库被覆盖了,其实没有。找了EM Database Express 工具,没找到。navicat工具也可以进行对数据库的操作。
实验二 Oracle数据库物理存储结构管理
一、实验目的
(1)掌握 Oracle数据库数据文件的管理
(2)掌握 Oracle数据库控制文件的管理
(3)掌握 Oracle数据库重做日志文件的管理
(4)掌握 Oracle数据库归档管理,
二、实验要求
(1)完成数据文件的管理操作,包括数据文件的创建、修改、重命名、移植及查询等操作。
(2)完成控制文件的管理操作,包括控制文件的添加、备份、删除及查询操作。
(3)完成重做日志文件的管理操作,包括重做日志文件组及其成员文件的添加、删除、查询等操作,以及重做日志文件的重命名、移植、日志切换等操作
(4)完成数据库归档模式设置、归档路径设置
三、实验内容
(1)向 BOOKSALES数据库的 USERS表空间添加一个大小为10MB的数据文件users02.dbf。
(2)向 BOOKSALES数据库的TEMP表空间添加一个大小为10MB的临时数据文件
Temp02.dbf.
(3)向 BOOKSALES数据库的 USERS表空间中添加一个可以自动扩展的数据文件
user03.dbf,大小为5MB,每次扩展1MB,最大容量为100MB。
(4)取消 BOOKSALES数据库数据文件user03.dbf的自动扩展 .
(5)将 BOOKSALES数据库数据文件 users02.dbf更名为 users002dbf
(6)查询 BOOKSALES数据库当前所有的数据文件的详细信息
(7)为 BOOKSALES数据库添加一个多路复用的控制文件 control03.ctl
(8)以二进制文件的形式备份 BOOKSALES数据库的控制文件。
(9)将 BOOKSALES数据库的控制文件以文本方式备份到跟踪文件中,并查看备份的内容。
(10)删除 BOOKSALES数据库的控制文件 control03.ctl
(11)查询 BOOKSALES数据库当前所有控制文件信息。
(12)向 BOOKSALES数据库添加一个重做日志文件组(组号为4),包含一个成员文件undo04alog,大小为4MB
(13)向 BOOKSALES数据库的重做日志文件组4中添加一个成员文件,名称为
undo(4b.log
(14)将 BOOKSALES数据库的重做日志文件组4中所有成员文件移植到一个新的目录下。
(15)查询 BOOKSALES数据库中所有重做日志文件组的状态。
(16)查询 BOOKSALES数据库中所有重做日志文件成员的状态。
(17)删除 BOOKSALES数据库的重做日志文件组4中的成员文件undo(4b.log
(18)删除 BOOKSALES数据库的重做日志文件组4。
(19)查看 BOOKSALES数据库是否处于归档模式。
(20)将 BOOKSALES数据库设置为归档模式。
(21)为 BOOKSALES数据库设置3个归档目标,其中一个为强制归档目标。
(22)对 BOOKSALES数据库进行5次日志切换,查看归档日志信息
四、问题解答及实验结果
(1)向 BOOKSALES数据库的 USERS表空间添加一个大小为10MB的数据文件users02.dbf。
SQL> ALTER TABLESPACE USERS ADD DATAFILE 'E:\oracle\BOOKSALES\BOOKSALES\user02.dbf' size 10M;
(2)向 BOOKSALES数据库的TEMP表空间添加一个大小为10MB的临时数据文件Temp02.dbf.
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\oracle\BOOKSALES\BOOKSALES\Temp02.dbf' size 10M;
(3)向 BOOKSALES数据库的 USERS表空间中添加一个可以自动扩展的数据文件user03.dbf,大小为5MB,每次扩展1MB,最大容量为100MB。
SQL> ALTER TABLESPACE USERS ADD DATAFILE 'E:\oracle\BOOKSALES\BOOKSALES\user03.dbf' size 5M AUTOEXTEND ON NEXT 1M MAXSIZE 100M;
(4)取消 BOOKSALES数据库数据文件user03.dbf的自动扩展 .
SQL> ALTER DATABASE DATAFILE 'E:\oracle\BOOKSALES\BOOKSALES\user03.dbf' AUTOEXTEND OFF;
(5)将 BOOKSALES数据库数据文件 users02.dbf更名为 users002dbf
先脱机 SQL>ALTER TABLESPACE USERS OFFLINE;
然后物理修改
SQL> ALTER TABLESPACE USERS RENAME DATAFILE 'E:\oracle\BOOKSALES\BOOKSALES\users02.dbf' TO 'C:\ORACLESQL\ORADATA\ORAL\users002dbf.dbf';
联机 SQL>ALTER TABLESPACE USERS ONLINE;
(6)查询 BOOKSALES数据库当前所有的数据文件的详细信息
SQL> SELECT * FROM DBA_DATA_FILES;
(7)为 BOOKSALES数据库添加一个多路复用的控制文件 control03.ct
SQL> ALTER SYSTEM SET CONTROL_FILES=
2 'E:\oracle\BOOKSALES\BOOKSALES\CONTROL01.CTL',
3 'E:\oracle\BOOKSALES\BOOKSALES\CONTROL03.CTL' SCOPE=SPFILE;
SQL> CONN sys/***@BOOKSALES AS SYSDBA
SQL> SHUTDOWN IMMEDIATE
SQL> HOST COPY E:\oracle\BOOKSALES\BOOKSALES\CONTROL01.CTL E:\oracle\BOOKSALES\BOOKSALES\CONTROL03.CTL
SQL> STARTUP
(搞错了数据库,放在了orcl里面,没放在BOOKSALES里面)
(8)以二进制文件的形式备份 BOOKSALES数据库的控制文件。
SQL> alter database backup controlfile to 'E:\oracle\BOOKSALES\BOOKSALES\CONTROL01.BKP';
(9)将 BOOKSALES数据库的控制文件以文本方式备份到跟踪文件中,并查看备份的内容。
SQL> alter database backup controlfile to trace;
SQL> show parameter user_dump;
(10)删除 BOOKSALES数据库的控制文件 control03.ctl
SQL> ALTER SYSTEM SET CONTROL_FILES='C:\ORACLESQL\ORADATA\ORAL\CONTROL01.CTL' SCOPE=SPFILE;
SQL> SHUTDOWN IMMEDIATE
SQL> HOST DEL E:\oracle\BOOKSALES\BOOKSALES\CONTROL03.CTL
SQL> STARTUP
(11)查询 BOOKSALES数据库当前所有控制文件信息。
SQL> SELECT * FROM V$controlfile;
(12)向 BOOKSALES数据库添加一个重做日志文件组(组号为4),包含一个成员文件undo04alog,大小为4MB
SQL> alter database add logfile group 4('E:\oracle\BOOKSALES\BOOKSALES\UNDO04A.LOG') size 4M;
(13)向 BOOKSALES数据库的重做日志文件组4中添加一个成员文件,名称为undo(4b.log
SQL> alter database add logfile member 'E:\oracle\BOOKSALES\BOOKSALES\UNDO(4B.LOG' TO GROUP 4;
SQL> select * from v$logfile;
(14)将 BOOKSALES数据库的重做日志文件组4中所有成员文件移植到一个新的目录下。
SQL> host move E:\oracle\BOOKSALES\BOOKSALES\UNDO04A.LOG D:\Orcl\UNDO04A.LOG
SQL> host move E:\oracle\BOOKSALES\BOOKSALES\UNDO(4B.LOG D:\Orcl\UNDO(4B.LOG
(15)查询 BOOKSALES数据库中所有重做日志文件组的状态。
SQL> select group#,sequence#,members,archived,status from v$log;
(16)查询 BOOKSALES数据库中所有重做日志文件成员的状态。
SQL> select group#, status, member from v$logfile;
(17)删除 BOOKSALES数据库的重做日志文件组4中的成员文件undo(4b.log
SQL> ALTER DATABASE DROP LOGFILE MEMBER 'E:\oracle\BOOKSALES\BOOKSALES\UNDO(4B.LOG';
SQL> SELECT * FROM v$logfile;
(18)删除 BOOKSALES数据库的重做日志文件组4。
SQL> alter database drop logfile group 4;
SQL> SELECT * FROM v$logfile;
(19)查看 BOOKSALES数据库是否处于归档模式。
(20)将 BOOKSALES数据库设置为归档模式。
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> archive log list
(21)为 BOOKSALES数据库设置3个归档目标,其中一个为强制归档目标。
SQL> alter system set log_archive_dest_1='location=d:\Orcl\a\archive mandatory';
SQL> alter system set log_archive_dest_2='location=d:\Orcl\b\archive mandatory';
SQL> alter system set log_archive_dest_3='service=standby1';
(22)对 BOOKSALES数据库进行5次日志切换,查看归档日志信息
SQL> alter system switch logfile;
SQL> select sequence#,first_change#,next_change# from V$archived_log;
五、实验体会与收获
控制文件control03创建的时候,创建到了另外一个数据库,在启动数据库的时候发生了错误205
实验三 Oracle数据库物理存储结构管理
一、实验目的
(1)掌握 Oracle数据库表空间的管理
(2)掌握数据库表空间不同状态时对数据操作的影响。
二、实验要求
(1)分别创建永久性表空间、临时性表空间、撤销表空间
(2)完成表空间的管理操作,包括修改表空间大小、修改表空间的可用性、修改表空间的读写、表空间的备份、表空间信息查询、删除表空间
三、实验内容
(1) 为 BOOKSALES 数据库创建一个名为 BOOKTBS1 的永久性表空间, 区采用自动扩展方式, 段采用自动管理方式。
(2) 为 BOOKSALES 数据库创建一个名为 BOOKTBS2 的永久性表空间, 区采用定制分配,每次分配大小为 1M, 段采用手动管理方式。
(3) 为 BOOKSALES 数据库创建一个临时表空间 TEMP02。
( 4) 将 BOOKSALES 数据库临时表空间 TEMP 和 TEMP02 都放入临时表空间 组TEMPGROUP 中。
(5) 为 BOOKSALES 数据库创建一个名为 UNDO02 的撤销表空间, 并设置为当前数据库的在线撤销表空间。
(6) 为 BOOKSALES 数据库的表空间 BOOKTBS1 添加一个大小为 50M 的数据文件, 以改变该表空间的大小。
(7) 将 BOOKSALES 数据库的表空间 BOOKTBS2 的数据文件修改为可以自动扩展, 每次扩展 5M, 最大容量为 100M。
(8) 创建一个名为 test 的表, 存储于 BOOKTBS1 表空间中, 向表中插入一条记录。
SQL>CREATE TABLE test(ID NUMBER PRIMARY KEY,name CHAR(20)) TABLESPACE booktbs1;
SQL> INSERT INTO test VALUES(1,'FIRST ROW');
(9) 将 BOOKSALES 数据库的 BOOKTBS1 表空间设置为脱机状态, 测试该表空间是否可以使用。
(10) 将 BOOKSALES 数据库的 BOOKTBS1 表空间设置为联机状态, 测试该表空间是否可以使用。
(11) 将 BOOKSALES 数据库的 BOOKTBS1 表空间设置为只读状态, 测试该表空间是否可以进行数据写入操作。
(12) 将 BOOKSALES 数据库的 BOOKTBS1 表空间设置为读写状态, 测试该表空间是否可以进行数据读写操作。
(13) 将 BOOKSALES 数据库的 BOOKTBS1 设置为数据库默认表空间, 将临时表空间组TEMPGROUP 设置为数据库的默认临时表空间。
(14) 分别备份 BOOKSALES 数据库的 USERS 和 BOOKTBS1、 BOOKTBS3 三个表空间。
(15) 查询 BOOKSALES 数据库所有表空间及其状态信息。
(16) 查询 BOOKSALES 数据库所有表空间及其数据文件信息。
(17) 删除 BOOKSALES 数据库 BOOKTBS2 表空间及其所有内容, 同时删除操作系统上的数据文件。
四.问题解答及实验结果
(1) 为 BOOKSALES 数据库创建一个名为 BOOKTBS1 的永久性表空间, 区采用自动扩展方式, 段采用自动管理方式。
SQL> create tablespace booktbs1 datafile 'E:\oracle\product\11.2.0\dbhome_1\oradata\booksales\booktbs1.dbf' size 50M;
(2) 为 BOOKSALES 数据库创建一个名为 BOOKTBS2 的永久性表空间, 区采用定制分配,每次分配大小为 1M, 段采用手动管理方式。
SQL> create tablespace booktbs2 datafile 'E:\oracle\product\11.2.0\dbhome_1\oradata\booksales\booktbs2_1.dbf' size 50M extent management local uniform size 1M segment space management manual;
(3) 为 BOOKSALES 数据库创建一个临时表空间 TEMP02。
SQL> create temporary tablespace temp02 tempfile 'E:\oracle\product\11.2.0\dbhome_1\oradata\booksales\TEMP02_1.dbf' size 20M extent management local uniform size 15M;
(4) 将 BOOKSALES 数据库临时表空间 TEMP 和 TEMP02 都放入临时表空间 组TEMPGROUP 中。
SQL> alter tablespace temp tablespace group tempgroup;
SQL> alter tablespace temp02 tablespace group tempgroup;
(5) 为 BOOKSALES 数据库创建一个名为 UNDO02 的撤销表空间, 并设置为当前数据库的在线撤销表空间。
SQL> create undo tablespace undo02 datafile 'E:\oracle\product\11.2.0\dbhome_1\oradata\booksales\undo02_1.dbf' size 20M;
(6) 为 BOOKSALES 数据库的表空间 BOOKTBS1 添加一个大小为 50M 的数据文件, 以改变该表空间的大小。
SQL> alter tablespace booktbs1 add datafile 'E:\oracle\product\11.2.0\dbhome_1\oradata\booksales\booktbs1_2.dbf' size 50M;
(7) 将 BOOKSALES 数据库的表空间 BOOKTBS2 的数据文件修改为可以自动扩展, 每次扩展 5M, 最大容量为 100M。
SQL> alter database datafile 'E:\oracle\product\11.2.0\dbhome_1\oradata\booksales\booktbs1_2.dbf' autoextend on next 5M maxsize 100M;
(8) 创建一个名为 test 的表, 存储于 BOOKTBS1 表空间中, 向表中插入一条记录。
SQL> create table test(test_id number(8,0) primary key,test_name varchar2(15))tablespace booktbs1;
表已创建。
SQL> insert into test values(20177661,'xiehezhou');
已创建 1 行。
SQL> select * from test;
(9) 将 BOOKSALES 数据库的 BOOKTBS1 表空间设置为脱机状态, 测试该表空间是否可以使用。
SQL> alter tablespace booktbs1 offline;
表空间已更改。
SQL> select * from test;
select * from test
*
第 1 行出现错误:
ORA-00376: 此时无法读取文件 8
ORA-01110: 数据文件 8:
'E:\ORACLE\PRODUCT\11.2.0\DBHOME_1\ORADATA\BOOKSALES\BOOKTBS1.DBF'
(10) 将 BOOKSALES 数据库的 BOOKTBS1 表空间设置为联机状态, 测试该表空间是否可以使用。
SQL> alter tablespace booktbs1 online;
表空间已更改。
SQL> select * from test;
(11) 将 BOOKSALES 数据库的 BOOKTBS1 表空间设置为只读状态, 测试该表空间是否可以进行数据写入操作。
SQL> alter tablespace booktbs1 read only;
表空间已更改。
SQL> insert into test values(20177661,'xiehezhou1');
insert into test values(20177661,'xiehezhou1')
*
第 1 行出现错误:
ORA-00372: 此时无法修改文件 8
ORA-01110: 数据文件 8:
'E:\ORACLE\PRODUCT\11.2.0\DBHOME_1\ORADATA\BOOKSALES\BOOKTBS1.DBF'
(12) 将 BOOKSALES 数据库的 BOOKTBS1 表空间设置为读写状态, 测试该表空间是否可以进行数据读写操作。
SQL> alter tablespace booktbs1 read write;
表空间已更改。
SQL> insert into test values(20177661,'xiehezhou1');
insert into test values(20177661,'xiehezhou1')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SYS.SYS_C0011164)
SQL> insert into test values(20200614,'xiehezhou1');
已创建 1 行。
(13) 将 BOOKSALES 数据库的 BOOKTBS1 设置为数据库默认表空间, 将临时表空间组TEMPGROUP 设置为数据库的默认临时表空间。
SQL> alter database default tablespace booktbs1;
数据库已更改。
SQL> alter database default temporary tablespace tempgroup;
数据库已更改。
(14) 分别备份 BOOKSALES 数据库的 USERS 和 BOOKTBS1、 BOOKTBS3 三个表空间。
SQL> alter tablespace users begin backup;
表空间已更改。
SQL> host copy E:\oracle\BOOKSALES\BOOKSALES\USERS03.dbf D:\Orcl\backup\booksales
已复制 1 个文件。
SQL> alter tablespace users end backup;
表空间已更改。
SQL> alter tablespace booktbs1 begin backup;
表空间已更改。
SQL> host copy E:\oracle\product\11.2.0\dbhome_1\oradata\booksales\booktbs1.dbf D:\Orcl\backup\booksales
已复制 1 个文件。
SQL> alter tablespace booktbs1 end backup;
表空间已更改。
(15) 查询 BOOKSALES 数据库所有表空间及其状态信息。
SQL> select tablespace_name,extent_management,allocation_type,contents from dba_tablespaces;
(16) 查询 BOOKSALES 数据库所有表空间及其数据文件信息。
SQL> select tablespace_name,file_name from dba_data_files;
(17) 删除 BOOKSALES 数据库 BOOKTBS2 表空间及其所有内容, 同时删除操作系统上的数据文件。
SQL> drop tablespace booktbs2 including contents and datafiles;
表空间已删除。
SQL> select tablespace_name,extent_management,allocation_type,contents from dba_tablespaces;
五.实验体会与收获
实验四 视图、 索引和完整性等
一、 实验目的
1、 了解视图的基本概念、 种类及各自的特点与作用。
2、 理解索引的基本概念及其优缺点。
3、 理解修改数据时索引的开销。
4、 理解数据完整性的概念及分类。
5、 理解同义词和序列的基本概念。
6、 掌握在 OEM 中创建视图、 索引、 实体完整性、 域完整性和参照完整性以及同义词、 序列的方法。
7、掌握用 PL/SQL 语言创建视图、 索引、 各种约束、 同义词和序列的方法。
二、实验要求
(1)为图书销售系统创建表。
(2)在图书销售系统适当表的适当列上创建适当类型的索引。
(3)为图书销售系统创建视图
(4)为图书销售系统创建序列。
三、 实验内容
(1) 打开 SQL Plus, 以 system 用户登录 BOOKSALES 数据库。
(2) 按下列方式创建一个用户 bs, 并给该用户授权。
SQL>CREATE USER bs IDENTIFIED BY bs DEFAULT TABLESPACE USERS ;
SQL>GRANT RESOURCE,CONNECT,CREATE VIEW TO bs;
(3) 使用 bs 用户登录数据库, 并进行下面的相关操作。
(4) 根据图书销售系统关系模式设计, 创建下列各表。
(5) 在 CUSTOMERS 表的 name 列上创建一个 B-树索引, 要求索引值为大写字母。
(6) 在 BOOKS 表的 title 列上创建一个非唯一性索引。
(7) 在 ORDERS 表的 ISBN 列上创建一个唯一性索引。
(8) 创建一个视图 customers_book, 描述客户与订单的详细信息, 包括客户编号、 客户名单、 订购图书的 ISBN、 图书名称、 图书数量、 订货日期、 发货日期等。
(9) 创建一个视图 customers_gift, 描述客户获得礼品的信息, 包括客户名称、 订购图书名称、 图书总价、 礼品名称。
四、问题解答及实验结果
(1) 打开 SQL Plus, 以 system 用户登录 BOOKSALES 数据库。
SQL> conn system/2533174@BOOKSALES
已连接。
(2) 按下列方式创建一个用户 bs, 并给该用户授权。
SQL> create user bs identified by bs default tablespace users;
用户已创建。
SQL> grant resource,connect,create view to bs;
授权成功。
(3) 使用 bs 用户登录数据库, 并进行下面的相关操作。
(4) 根据图书销售系统关系模式设计, 创建下列各表。
SQL> create table customers(
2 customer_id number(4) primary key,
3 name char(20) not null,
4 phone varchar2(50) not null,
5 email varchar2(50),
6 address varchar2(200),
7 code varchar2(10));
表已创建。
SQL> create table publishers(
2 publisher_id number(2) primary key,
3 name varchar2(50),
4 contact char(10),
5 phone varchar2(50));
表已创建。
SQL> create table books(
2 ISBN varchar2(50) primary key,
3 title varchar2(50),
4 author varchar2(50),
5 pubdate date,
6 publisher_id number(2),
7 cost number(6,2),
8 retail number(6,2),
9 category varchar2(50),
10 foreign key(publisher_id)references publishers(publisher_id));
表已创建。
SQL> create table orders(
2 order_id number(4) primary key,
3 customer_id number(4),
4 orderdate date not null,
5 shipdate date,
6 shipaddress varchar2(200),
7 shipcode varchar2(10),
8 foreign key(customer_id)references customers(customer_id));
表已创建。
SQL> create table orderitem(
2 order_id number(4),
3 item_id number(4),
4 ISBN varchar2(50) not null,
5 quantity number(4),
6 primary key(order_id,item_id),
7 foreign key(order_id)references orders(order_id));
表已创建。
SQL> create table promotion(
2 gift_id number(2),
3 name char(20) primary key,
4 minretail varchar2(50),
5 maxretail char(10));
(5) 在 CUSTOMERS 表的 name 列上创建一个 B-树索引, 要求索引值为大写字母。
SQL> create index cus_name_index on customers(upper(name)) tablespace users;
索引已创建。
(6) 在 BOOKS 表的 title 列上创建一个非唯一性索引。
SQL> create index book_title_index on books(title) tablespace users;
索引已创建。
(7) 在 ORDERS 表的 ISBN 列上创建一个唯一性索引。
SQL> create unique index oitem_isbn_index on orderitem(ISBN) tablespace users;
索引已创建。
(8) 创建一个视图 customers_book, 描述客户与订单的详细信息, 包括客户编号、 客户名单、 订购图书的 ISBN、 图书名称、 图书数量、 订货日期、 发货日期等。
SQL> create view customers_book(customer_id,name,ISBN,title,quantity,orderdate,shipdate) as
2 select c.customer_id,c.name,o.ISBN,b.title,o.quantity,O.orderdate,O.shipdate from customers c,orderitem o,orders O,books b;
视图已创建。
(9) 创建一个视图 customers_gift, 描述客户获得礼品的信息, 包括客户名称、 订购图书名称、 图书总价、 礼品名称。
SQL> create view customers_gift(customer_name,book_price,promotion_name)
2 as
3 select c.name,
4 (case when oi.quantity<=10 then oi.quantityb.retail else oi.quantityb.cost end),p.name
5 from customers c,orderitem oi,books b,promotion p,orders o
6 where c.customer_id=o.customer_id and o.order_id=oi.order_id and b.ISBN=oi.ISBN and case when oi.quantity<=10 then oi.quantityb.retail else oi.quantityb.cost end between minretail and maxretail;
视图已创建。
五、实验体会与收获
实验 五 SQL 语句应用
一、 实验目的
(1) 掌握数据的插入(INSERT)、 修改(UPDATE) 和删除(DELETE) 操作。
(2) 掌握不同类型的数据查询(SELECT) 操作。
二、 实验要求
(1) 利用 INSERT 语句向图书销售系统表中插入数据。
(2) 利用 UPDATE 语句修改图书销售系统表中的数据。
(3) 利用 DELETE 语句删除图书销售系统表中的数据。
(4) 利用 SELECT 语句实现对图书销售系统数据的有条件查询、 分组查询、 连接查询、 子查询等。
三、 实验内容
(1) 以 bs 用户登录 BOOKSALES 数据库, 将下列表中的数据插入到数据库的相应表中。
(2) 将 ISBN 为 978-7-121-18619-8 的图书的零售价格(retail) 修改为 30。
(3) 将订单号为 1000 的订单的发货日期修改为“2013-2-2”。
(4) 查询 BOOKS 表中包含的所有图书列表。
(5) 列出 BOOKS 表中有图书类型非空的图书书名。
(6) 列出 BOOKS 表中每本书的书名和出版日期。 对 pubdate 字段使用 Publication Date 列标题。
(7) 列出 CUSTOMERS 表中每一个客户的客户号以及他们所在的地址。
(8) 创建一个包含各个出版社的名称、 联系人以及出版社电话号码的列表。 其中, 联系人的列在显示的结果中重命名为 Contact Person。
(9) 查询下达了订单的每一个客户的客户号。
(10) 查询 2013 年 3 月 1 日之后发货的订单。
(11) 查询居住在北京或大连的客户, 将结果按姓名的升序排列。
(12) 列出姓“王” 的作者编写的所有图书信息, 并将结果按姓名降序排序。
(13) 查询“儿童” 类和“烹饪” 类的所有图书。
(14) 查询书名的第二个字母是“A”、 第四个字母是“N” 的图书信息。
(15) 查询电子工业出版社在 2012 年出版的所有“计算机” 类图书的名称。
(16) 查询图书名称、 出版社名称、 出版社联系人的名称、 EMAIL 和电话号码。
(17)查询当前还没有发货的订单信息及下达订单的用户名, 查询结果按下达订单日期排序。
(18) 查询已经购买了“计算机” 类图书的所有人的客户号和姓名。
(19) 查询“王牧” 购买的图书的 ISBN 以及书名。
(20) 查询订购图书“Oracle 数据库基础” 的客户将收到什么样的礼品。
(21) 确定客户“张扬” 订购的图书的作者。
(22) 查询 CUSTOMERS 表中的每一个客户所下达的订单数量。
(23) 查询价格低于同一种类中其它图书的平均价格的图书的信息。
(24) 查询每个出版社出版图书的平均价格、 最高价格、 最低价格。
(25) 统计每个客户购买图书的数量及总价钱。
(26) 查询比 1 号订单中图书数量多的其它订单信息。
(27) 查询所以客户及其订购图书的信息。
(28) 查询没有订购任何图书的客户信息。
(29) 查询订购金额最高的客户信息。
(30) 查询名为“赵敏” 的客户订购图书的订单信息、 订单明细。
四、问题解答及实验结果
(1) 以 bs 用户登录 BOOKSALES 数据库, 将下列表中的数据插入到数据库的相应表中。
创建自增序列
SQL> create sequence customers_customer_id
2 minvalue 1 //最小值
3 nomaxvalue //最大值
4 increment by 1 //每次自增1
5 start with 1 //从1开始
6 nocache;
序列已创建。
第一个表的插入
SQL> insert into customers values(customers_customer_id.nextval,'王牧','83823422','[email protected]','北京','110010');
已创建 1 行。
SQL> insert into customers values(customers_customer_id.nextval,'李青','83824566','[email protected]','大连','116023');
已创建 1 行。
第二个表的插入
SQL> insert into publishers values(1,'电子工业出版社','张芳','56231234');
已创建 1 行。
SQL> insert into publishers values(2,'机械工业出版社','孙翔','89673456');
已创建 1 行。
第三个表的插入
SQL> insert into books values('978-7-121-18619-8','文化基础','王澜',to_date('2010-1-1','yyyy-mm-dd'),2,35,28,'管理');
已创建 1 行。
SQL> insert into books values('978-7-122-18619-8','Oracle','孙风栋',to_date('2011-2-1','yyyy-mm-dd'),1,40,32,'计算机');
已创建 1 行。
第四个表的插入
SQL> insert into orders values(orders_order_id.nextval,3,to_date('2013-2-1','yyyy-mm-dd'),to_date('2013-2-5','yyyy-mm-dd'),'大连','116023');
已创建 1 行。
SQL> insert into orders values(orders_order_id.nextval,2,to_date('2013-3-1','yyyy-mm-dd'),to_date('2013-3-1','yyyy-mm-dd'),'大连','116023');
已创建 1 行。
第五个表的插入
insert into orderitem values(1000,1,'978-7-121-18619-8',5);
insert into orderitem values(1000,2,'978-7-122-18619-8',20);
Insert Into orderitem values(1001,1,'978-7-121-18619-8',15);
第六个表的插入
SQL> insert into promotion values(1,'签字笔',100,150);
SQL> insert into promotion values(2,'笔记本',150,300);
SQL> insert into promotion values(3,'保温杯',300,500);
(2)将 ISBN 为 978-7-121-18619-8 的图书的零售价格(retail) 修改为 30。
SQL> update books set retail=30 where isbn='978-7-121-18619-8';
(3)将订单号为 1000 的订单的发货日期修改为“2013-2-2”。
SQL> update orders set shipdate=to_date('2013-2-2','yyyy-mm-dd') where order_id=1000;
(4)查询 BOOKS 表中包含的所有图书列表。
select * from books;
(5) 列出 BOOKS 表中有图书类型非空的图书书名。
SQL> select title from books where category is not null;
TITLE
文化基础
Oracle
(6) 列出 BOOKS 表中每本书的书名和出版日期。 对 pubdate 字段使用 Publication Date 列标题。
SQL> select title,pubdate "Publication Date" from books;
TITLE Publication Da
文化基础 01-1月 -10
Oracle 01-2月 -11
(7) 列出 CUSTOMERS 表中每一个客户的客户号以及他们所在的地址。
SQL> select customer_id,address from customers;
CUSTOMER_ID
ADDRESS
2
北京
3
大连
(8) 创建一个包含各个出版社的名称、 联系人以及出版社电话号码的列表。 其中, 联系人的列在显示的结果中重命名为 Contact Person。
SQL> select name,contact "Contact Person",phone from publishers;
NAME Contact Pe
PHONE
电子工业出版社 张芳
56231234
机械工业出版社 孙翔
89673456
(9) 查询下达了订单的每一个客户的客户号。
SQL> select customer_id from orders where order_id is not null;
CUSTOMER_ID
2
3
(10) 查询 2013 年 3 月 1 日之后发货的订单。
SQL> select * from orders where shipdate > to_date('2013-3-1','yyyy-mm-dd');
(11) 查询居住在北京或大连的客户, 将结果按姓名的升序排列。
SQL> select * from customers where address='大连' or address='北京' order by name;
(12) 列出姓“王” 的作者编写的所有图书信息, 并将结果按姓名降序排序。
SQL> select * from books where author like '王%' order by author;
(13) 查询“儿童” 类和“烹饪” 类的所有图书。
SQL> select * from books where category='儿童' or category='烹饪';
(14) 查询书名的第二个字母是“A”、 第四个字母是“N” 的图书信息。
SQL> select * from books where title like '_A_N%';
(15) 查询电子工业出版社在 2012 年出版的所有“计算机” 类图书的名称。
SQL> select title from books,publishers where books.publisher_ id=publishers.publisher_ id and name='电子工业出版社' and pubdate>=to_date('2012-1-1','YYYY -mm-dd') and pubdate<=to_date('2013-1-1','YYYY-mm-dd');
(16) 查询图书名称、 出版社名称、 出版社联系人的名称、 EMAIL 和电话号码。
SQL> select title,name,contact,phone from books,publishers where books.publisher_id=publishers.publisher_id;
(17)查询当前还没有发货的订单信息及下达订单的用户名, 查询结果按下达订单日期排序。
SQL> select order_id,customers.name,orderdate,shipdate,shipaddress,shipaddress,shipcode from customers,orders where customers.customer_id=orders.customer_id and shipdate<=to_date('2013-3-1','yyyy-mm-dd') order by orderdate;
(18) 查询已经购买了“计算机” 类图书的所有人的客户号和姓名。
(19) 查询“王牧” 购买的图书的 ISBN 以及书名。
(20) 查询订购图书“Oracle 数据库基础” 的客户将收到什么样的礼品。
(21) 确定客户“张扬” 订购的图书的作者。
SQL> select order_id,customers.name,orderdate,shipdate,shipaddress,shipcode from customers,orders where customers.customer_id=orders.customer_id and shipdate<=to_date('2013-3-1','yyyy-mm-dd') order by orderdate;
(22) 查询 CUSTOMERS 表中的每一个客户所下达的订单数量。
SQL> select * from customers where customer_id not in(select customer_id from orders);
(23) 查询价格低于同一种类中其它图书的平均价格的图书的信息。
SQL> select category,min(retail),max(retail),avg(retail) from books group by category;
(24) 查询每个出版社出版图书的平均价格、 最高价格、 最低价格。
SQL> select category,min(retail),max(retail),avg(retail) from books group by category;
(25) 统计每个客户购买图书的数量及总价钱。
(26) 查询比 1 号订单中图书数量多的其它订单信息。
(27) 查询所以客户及其订购图书的信息。
SQL> select * from customers where customer_id not in(select customer_id from orders);
(28) 查询没有订购任何图书的客户信息。
SQL> select * from customers where customer_id not in(select customer_id from orders);
(29) 查询订购金额最高的客户信息。
(30) 查询名为“赵敏” 的客户订购图书的订单信息、 订单明细。
SQL> select * from orders,orderitem,customers where orders.customer_id=customers.customer_id and customers.name='赵敏';