一站式学习——SQL的基础语言(以Oracle为例)


✅ SQL 语言的思想是通用的,MySQL、Oracle 其实语义本质是相同的,只是语法略有不同



一、学习目的和要求

(1) 通过上机实践,熟悉 Oracle 的 SQL * Plus 环境及使用方法。
(2) 掌握 SQL 语言,能熟练运用 SQL 语言进行数据定义和数据操纵。
(3) 加深对关系数据模型的数据结构和约束的理解。



二、运行环境

硬件:微型计算机。
软件:Windows 操作系统、ORACLE 11G。



三、相关原理及学习内容

3.1 了解并掌握 SQL * Plus 环境的使用

(1) 以管理员身份登录到 Oracle SQL * Plus。
(2) 以学号为用户名创建一个用户,并授予其权限。
(3) 管理员退出 Oracle,重新用新创建的用户登录 Oracle。

create user B1903xxxx identified by 123;
Grant DBA to B1903xxxx;
Connect B1903xxxx/123;

说明:账户名为 B1903xxxx,密码为 123 的用户,并得到授权。

在这里插入图片描述


3.2 用 SQL 的 DDL 语句图书管理系统创建基表

图书管理系统有三个基表,基表模式如下 (下划线处为主键,两个斜体处为两个外键):

(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 图书(图书编号));

在这里插入图片描述


3.3 为基表“读者”补充定义:职称只能取初级、中级、高级之一。

ALTER TABLE 读者 ADD CHECK (职称 IN ('初级','中级','高级'));

在这里插入图片描述


3.4 用 SQL 的 DML 语句向上述基表中增加、修改和删除数据

(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%';

在这里插入图片描述


3.5 用 SQL 的 QL 语句完成查询

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

在这里插入图片描述


3.6 用 SQL 的 DDL 语句创建视图、索引

(1) 建立各单位当前借阅图书情况的简单统计视图,视图中包括单位名称,借书人数和借阅人次。

CREATE VIEW 统计(单位,借书人数,借阅人次)
AS
SELECT 单位,COUNT(DISTINCT 读者.借书证号),COUNT(借阅.借书证号)
FROM 读者,借阅
WHERE 读者.借书证号=借阅.借书证号 
GROUP BY 单位;

在这里插入图片描述


(2) 对该视图进行查询。

SELECT * FROM 统计;

在这里插入图片描述


(3) 按出版社为图书表建立一个降序索引。

CREATE INDEX 图书表 
ON 图书(出版单位 DESC);

在这里插入图片描述



四、学习心得

● 学一门语言,最快的熟悉方式就是上手敲代码。一开始不管是用 Oracle 还是 MySQL,其语法与传统的编程语言有较大的差别。另外一开始我们对其 “查询思想” 理解的不够,故在做题时常常不知道用什么关键字或者什么样的方法。后来再次翻阅教材,并在做题后总结反思,隐约感觉到了其 “查询思想” 的套路。比如说怎么对付含有 “至少、最多、所有” 等等的查询语句。



⭐️ ⭐️

猜你喜欢

转载自blog.csdn.net/Wang_Dou_Dou_/article/details/124146428
今日推荐