赞
踩
✅ SQL 语言的思想是通用的,MySQL、Oracle 其实语义本质是相同的,只是语法略有不同。
(1) 通过上机实践,熟悉 Oracle 的 SQL * Plus 环境及使用方法。
(2) 掌握 SQL 语言,能熟练运用 SQL 语言进行数据定义和数据操纵。
(3) 加深对关系数据模型的数据结构和约束的理解。
硬件:微型计算机。
软件:Windows 操作系统、ORACLE 11G。
(1) 以管理员身份登录到 Oracle SQL * Plus。
(2) 以学号为用户名创建一个用户,并授予其权限。
(3) 管理员退出 Oracle,重新用新创建的用户登录 Oracle。
create user B1903xxxx identified by 123;
Grant DBA to B1903xxxx;
Connect B1903xxxx/123;
◆ 说明:账户名为 B1903xxxx
,密码为 123
的用户,并得到授权。
图书管理系统有三个基表,基表模式如下 (下划线处为主键,两个斜体处为两个外键):
(1) 图书(图书编号、分类号、书名、作者、出版单位、单价)
CREATE TABLE 图书
(图书编号 CHAR(10) NOT NULL,
分类号 CHAR(8) NOT NULL,
书名 VARCHAR(15) NOT NULL,
作者 VARCHAR(6),
出版单位 VARCHAR(10),
单价 DEC(5,2),
primary key(图书编号));
(2) 读者(借书证号、姓名、单位、职称)
CREATE TABLE 读者
(借书证号 CHAR(10) NOT NULL,
姓名 CHAR(10) NOT NULL,
单位 VARCHAR(10),
职称 VARCHAR(10),
primary key(借书证号));
(3) 借阅(借书证号、图书编号、借阅日期、备注)
CREATE TABLE 借阅
(借书证号 CHAR(10) NOT NULL,
图书编号 CHAR(10) NOT NULL,
借阅日期 DATE NOT NULL,
备注 VARCHAR(30),
primary key(借书证号,图书编号),
foreign key(借书证号) references 读者(借书证号),
foreign key(图书编号) references 图书(图书编号));
ALTER TABLE 读者 ADD CHECK (职称 IN ('初级','中级','高级'));
(1) 向三个基表中插入数据
● 插入所有 图书
数据:
INSERT INTO 图书 VALUES('0001','TP31','计算机基础','WANG','高等教育',17.00);
INSERT INTO 图书 VALUES('0002','TP32','数据库原理',NULL,NULL,16.50);
INSERT INTO 图书 VALUES('0003','TN31','并行计算机','YANG','清华大学',12.80);
INSERT INTO 图书 VALUES('0004','AA04','数据结构','CAO','南京大学',11.30);
INSERT INTO 图书 VALUES('0005','BB06','算法设计','ZHOU','清华大学',9.20);
INSERT INTO 图书 VALUES('0006','CC07','计算机原理','XIAN','北京大学',15.80);
INSERT INTO 图书 VALUES('0009','NJ09','数据库实验书','WU','人民教育',23.50);
● 插入所有 读者
数据:
INSERT INTO 读者 VALUES('T201','LIXIN','计算机系','中级');
INSERT INTO 读者 VALUES('S981','WANG','通信系','高级');
INSERT INTO 读者 VALUES('Z003','CHEN','工厂','初级');
INSERT INTO 读者 VALUES('B123','LI','工厂','中级');
● 插入所有 借阅
数据:
INSERT INTO 借阅 VALUES('T201','0001',To_Date('2001-03-10','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('T201','0003',To_Date('2001-04-01','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('S981','0002',To_Date('2001-02-20','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('Z003','0001',To_Date('2001-03-03','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('Z003','0002',To_Date('2001-03-20','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('Z003','0003',To_Date('2001-03-23','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('Z003','0004',To_Date('2001-04-01','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('Z003','0005',To_Date('2001-04-06','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('T201','0002',To_Date('2001-04-04','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('T201','0004',To_Date('2001-04-05','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('T201','0005',To_Date('2001-04-06','yyyy-mm-dd'),NULL);
INSERT INTO 借阅 VALUES('S981','0001',To_Date('2001-05-06','yyyy-mm-dd'),NULL);
(2) 数据的修改和删除
① 为编号为 0002 的图书填上作者和出版单位。
UPDATE 图书
SET 作者='SA',出版单位='高等教育'
WHERE 图书编号='0002';
② 将所有图书单价上调 5% (即:原值×1.05)。
UPDATE 图书
SET 单价=单价*1.05;
③ 将书名包含 ‘计算机’ 的书的分类号改为 ‘TP38’ 。
UPDATE 图书
SET 分类号='TP38'
WHERE 书名 LIKE '%计算机%';
④ 删除借书证号以 S 开头的所有读者信息和借阅信息。
DELETE FROM 借阅 WHERE 借书证号 LIKE 'S%';
DELETE FROM 读者 WHERE 借书证号 LIKE 'S%';
(1) 列出图书馆中所有藏书的书名及出版单位。
SELECT 书名,出版单位 FROM 图书;
(2) 查询工厂所有借阅了图书的读者姓名和职称。
SELECT 姓名,职称
FROM 读者
WHERE 借书证号 IN (SELECT 借书证号 FROM 借阅) AND 单位='工厂';
(3) 查询藏书中比高等教育出版社所有图书单价更高的书籍。
SELECT * FROM 图书
WHERE 单价 > ALL
(SELECT 单价
FROM 图书
WHERE 出版单位='高等教育');
(4) 查询各出版社图书的最高价、最低价和平均价格。
SELECT 出版单位,MAX(单价),MIN(单价),AVG(单价)
FROM 图书
GROUP BY 出版单位;
(5) 列出当前至少借阅了 5 本图书的读者及所在单位。
SELECT 姓名,单位 FROM 读者
WHERE 借书证号 IN
(SELECT 借书证号FROM 借阅
GROUP BY 借书证号
HAVING COUNT(*)>=5);
(1) 建立各单位当前借阅图书情况的简单统计视图,视图中包括单位名称,借书人数和借阅人次。
CREATE VIEW 统计(单位,借书人数,借阅人次)
AS
SELECT 单位,COUNT(DISTINCT 读者.借书证号),COUNT(借阅.借书证号)
FROM 读者,借阅
WHERE 读者.借书证号=借阅.借书证号
GROUP BY 单位;
(2) 对该视图进行查询。
SELECT * FROM 统计;
(3) 按出版社为图书表建立一个降序索引。
CREATE INDEX 图书表
ON 图书(出版单位 DESC);
● 学一门语言,最快的熟悉方式就是上手敲代码。一开始不管是用 Oracle 还是 MySQL,其语法与传统的编程语言有较大的差别。另外一开始我们对其 “查询思想” 理解的不够,故在做题时常常不知道用什么关键字或者什么样的方法。后来再次翻阅教材,并在做题后总结反思,隐约感觉到了其 “查询思想” 的套路。比如说怎么对付含有 “至少、最多、所有” 等等的查询语句。
⭐️ ⭐️
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。