ORACLES數據庫管理實驗


實驗一 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數據庫是否處於歸檔模式。

SQL> archive log list

(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 用戶登錄數據庫, 並進行下面的相關操作。

SQL> conn bs/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','Wangmu@sina.com','北京','110010');
已創建 1 行。
SQL> insert into customers values(customers_customer_id.nextval,'李青','83824566','Liqing@sina.com','大連','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='趙敏';

五、實驗體會與收獲

轉載說明出處https://www.cnblogs.com/xiehezhou/p/13035576.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM