数据库基础
数据库系统原理-期末速成
应对期末考试,快速过一遍数据库系统原理
1. 数据库概览
1.1数据库管理技术的发展
1.数据的含义称为数据的语义。例:93是一个数字,语义1:学生某课成绩。语义2:某人的体重。
2.数据管理时数据处理的核心。
1.2理解数据库系统
3.数据库(DB)是长期储存在计算机内、有组织的、可共享的大量数据集合。
4.数据库管理系统(DBMS) 是位于用户与操作系统之间的一层数据管理软件。例如Mysql,Mssql,Oracle等。
5.数据库系统(DBS) 是指带有数据库并利用数据库技术进行数据管理的计算机系统。
1.3数据库系统体系结构
1.三级模式: 外模式、模式、内模式
a.模式:
1.数据库中全体数据的逻辑结构和特征的描述。
2.一个数据库只有一个模式。
b.外模式:
1.是模式子集。外模式面向具体应用,是数据库用户所能使用的局部数据的逻辑结构和特征的描述。
2.一个数据库可以有多个外模式
c.内模式(存储模式)
1.是数据库的物理结构。
2.一个数据库只有一个内模式。
2.数据库系统的二级映像:
外模式/模式映像:
1.定义了外模式与模式的对应关系。
2.外模式/模式映像保证了数据的逻辑独立性。
模式/内模式映像:
1.定义了数据库全局逻辑结构与存储结构之间的对应关系。
2.模式/内模式映像保证了数据库的物理独立性。
1.4数据模型
1.模型是现实世界特征的模拟与抽象。
2.数据模型的层次: 概念数据模型->逻辑数据模型->物理数据模型
3.两步抽象: 1.现实世界中的客观对象抽象为概念模型 2.把概念模型转换为某一DBMS支持的数据模型。
概念模型的表示方法(重点!)
实体-联系方法(E-R方法)
1.E-R三要素: 实体、属性、联系
2.E-R图
几种联系的画法参考书或课件!
E-R图例题:
逻辑数据模型三要素: 1.数据结构 2.数据操作 3.数据的约束条件
逻辑数据模型的类别: 1.格式化模型 2.关系模型 3.面向对象模型 4.对象关系模型
2.关系数据模型
2.1关系数据结构
1.一个关系就是一个规范化的二维表。规范化是指表中每列都是原子项,即没有表中表。
一个关系由关系名(表名)、关系模式(表头)和关系实例(数据)组成。
2.二维表基本术语:
- 关系: 二维表
- 元祖: 二维表中的一行即为一个元祖
- 属性: 二维表中的一列即为一个属性
- 码: 表中可唯一确定元祖的单个属性或属性组
- 域: 属性的取值范围
- 分量: 元组中的一个属性值
- 关系模式: 对关系”型”描述 。通常表示为: 关系名(属性1,属性2,…,属性n)
3.笛卡尔积
例如:
元祖: 笛卡尔积中每一个元素交n元祖或元祖
分量: 笛卡尔积元祖(d1,d2,…,dn) 中的每一个值di 叫做一个分量
基数: 每个域中元素的数量的乘积。如上例中,即为2x2x3
笛卡尔积表示方法:
4.关系:
D1xD2x…xDn的子集成为在域D1,D2,…,Dn上的关系,表示为 R (D1,D2,…,Dn)。R为关系名, n:关系的目或度。
关系中的每个元素是关系中的元祖,通常用t表示。
5.关系模式- 定义通常简记为R(U) 或R(A1,A2,…,An)
- 关系模式是型, 关系式值
6.关系数据库:
1. 在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。
1. 关系数据库的型称为关系数据库模式。关系数据库的值称为关系数据库。
1. 关系元祖中允许出现空值。空置代表未知的值或不存在的值。一般用关键词NULL表示。
7.码
具体内容参照教材或课程ppt!
2.2关系操作
1.关系代数: 将关系看成元祖的集合,运算从关系的”水平”方向即行的角度来进行
2.表示记号
3.关系操作实例:
并, 提取出R和S各自的元祖,去重后组合在一起
差 R-S=R减去R和S共有的部分
交 R和S共有的部分
笛卡尔积
4.专门的运算符!
1.选择: 从行的角度进行运算:
2.投影: 从列的角度进行运算:
3.连接: 从R和S的广义笛卡尔积RXS中选取满足给定关系的元祖
1.一般连接
2.等值连接:
3.自然连接: 和前两者相比,需要取消重复列
4.外连接: 左外连接,又外连接,外连接
左外连接以左边R为主,结果中包含左表中全部的行,以及右表中所有匹配的行。右外连接相反。
全外连接:自然连接中把舍弃的元祖都保存在结果中,而在其他属性上填空值(NULL)
5.除
像极:
除法:
3.关系数据库语言SQL
3.1 SQL概述
1.SQL结构化查询语言是关系数据库的标准语言。
2.SQL特点: 综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构提供两种使用方法、语言简洁易学易用。
3.基本表:独立存在于数据库中的表,是“实表”
4.视图是从一个或几个基本表导出的表,是“虚表”。它本身不存在与数据库中,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中数据变化时,视图中查询出来的数据也随之改变。
5.数据库是逻辑的,存储文件时物理的。数据库的所有信息都保存在存储文件中。
6.索引:索引是根据索引表达式的值进行逻辑排序的一组指针,可以实现对数据的快速访问。是关系数据库的内部实现技术,属于内模式,被存放在存储文件中。
3.2 SQL语言的数据类型
1.数值型:包括整形(bigint、int、smallint、tinyint、bit)、定点实数(numeric、decimal)、浮点数(float、real)。
2.字符型: 包括定长字符串char和变长字符串varchar。
3.Unicode字符型: 包括nchar[(n)]和nvarchar[(n)]两类。
4.文本型: 包括text和ntext两类。
5.日期时间类型: 包括datetime和smalldatetime两类。用户以字符串形式输入日期时间类型数据,系统也以字符串形式输出日期时间类型数据。
例如: 2009-10-10 7:18:18 PM /*12小时格式*/
2009-10-10 19:18:18 /*24小时格式*/
6.二进制数据类型表示为位数据流。
3.3 数据定义
在学习前,先把环境搭一下。
参考文章https://blog.csdn.net/weixin_46081857/article/details/128127425
3.3.1 模式定义
1.定义数据库
CREATE DATABASE <数据库名> |
2.使用数据库
USE <数据库名> |
3.修改数据库
该语句可以对指定的数据库的数据文件和日志文件等进行修改
ALTER DATABASE <数据库名> |
4.删除数据库
DROP DATABASE <数据库名> |
3.3.2基本表定义
1.定义基本表
CREATE TABLE <基本表名> |
列级完整性约束,作用范围仅限于该列
NOT NULL 非约束控制:限制列取值不能为空 |
表级约束条件,表级完整性约束的作用范围是整个表
UNIQUE、CHECK、PRIMARY KEY、FOREIGN KEY可以用于定义表级完整性约束 |
例:
2.修改基本表
ALTER TABLE <基本表名> |
例:
3.删除基本表
DROP TABLE<基本表名> |
删除一个表时,表的定义、表中的所有数据以及表的索引、触发器、约束等均被删除
不能删除系统表和有外码约束所参照的表!
3.4数据查询
3.4.1SELECT 语句结构
1.SELECT语句的基本格式如下
SELECT [ALL|DISTINCT] <目标列表达式> |
例:
SELECT 客户编号,客户姓名,联系电话 |
3.4.2 单表查询
查询仅涉及一个表,是一种最简单的查询操作
1.选择列
(1)选择指定列
查询全体学生的学号与姓名
SELECT Sno,Sname FROM Student |
(2) 选择表中全部列
查询全体学生的详细记录
SELECT * FROM Student |
(3)查询经过计算的值
查询全体学生的姓名及出身年份, Sage为年龄
SELECT Sname,2022-Sage FROM Student |
(4)更改结果列标题
查询全体学生的姓名及出生年份,出生年份标题为Sbirth
SELECT Sname,2022-Sage AS Sbirth FROM Student |
(5)替换查询结果中的数据
需要使用查询中的CASE表达式
CASE |
替换查询结果中的数据
SELECT 商品编号,商品名称,价格等级= |
(6) 去除重复行
在OrderList表中查询订购了商品的客户编号
SELECT DISTINCT 客户编号 FROM OrderList |
查询选修课程的各种成绩
SELECT DISTINCT Cno,Grade FROM SC |
2.选择表中的若干元祖
(1)比较大小
常用比较运算符: =,<,>,>=,<=,!= 或 <> , !>, !<, 逻辑运算符 NOT + 比较运算符
查询所有年龄在20岁以下的学生姓名及其年龄
SELECT Sname,Sage FROM Student WHERE Sage<20 |
(2) 指定范围
使用谓词 BETWEEN … AND … , NOT BETWEEN … AND …
查询年龄在20~23岁之间(包括20岁和23岁)的学生姓名、系别和年龄。
SELECT Sname,Sdept,Sage WHERE Sage BETWEEN 20 AND 23 |
(3)确定集合
使用谓词 IN<值表> 或 NOT IN <值表>
<值表> : 用, 分隔的一组取值
查询信息系,数学系和计算机学生的姓名和性别
SELECT Sname,Ssex FROM Student WHERE Sdept IN ('IS','MA','CS') |
(4)字符串匹配
a.[NOT] LIKE ‘<匹配串>’ [ESCAPE ‘<换码字符>’]
= 可以用来取代LIKE。!=或<>运算符取代NOT LIKE 谓词
b.通配符
%代表任意长度(长度可以为0)字符串
例: a%b, 如ab,asjdlab,acb 都满足该匹配串
_(下划线)代表任意单个字符
例: a_b,如acb,afb都满足该匹配串
1)精确匹配
匹配学号为95001的学生的详细情况
SELECT * FROM Student WHERE Sno LIKE '95001' |
2)模糊匹配
查询所有姓刘学生的姓名、学号和性别
SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE '刘%' |
查询姓’欧阳’且全名为三个汉字的学生姓名
SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE '欧阳_' |
查询所有不姓刘的学生姓名
SELECT Sname FROM Student WHERE Sname NOT LIKE '刘%' |
3)ESCAPE 短语:
当用户要查询的字符串本身就含有%或_时,要使用ESCAPE ‘<换码字符>’ 短语对通配符进行转义
查询DB_Design课程的课程号和学分
SELECT Cno,Ccredit FROM Course WHERE Cname LIKE 'DB\_Design' ESCAPE '\' |
查询以”DB_”开头,且倒数第三个字符为i的课程的详细情况
SELECT * FROM Course WHERE Cname LIKE 'DB\_%i__' ESCAPE '\' |
(5) 涉及空值的查询
使用IS NULL 或IS NOT NULL
某些学生选修课程后没有参加,所以有选课记录,单没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。
SELECT Sno, Cno FROM SC WHERE Grade IS NULL |
(6)多重条件查询
用逻辑运算符AND和OR来联结多个查询条件
AND的优先级高于OR,可以用括号改变优先级
SELECT Sname FROM Student WHERE Sdept='CS' AND Sage<20 |
查询信息系、数学系和计算机系学生的姓名和性别
SELECT Sname,Ssex FROM Student WHERE Sdept='IS' OR Sdept='MA' OR Sdept='CS' |
(7)对查询结果排序
升序:ASC 降序:DESC 默认值为升序(ASC)
ORDER BY <列名1>[ASC|DESC]
SELECT * FROM SC order by Sno desc, Cno//Cno为升序asc |
(8)聚合函数
聚合函数是指对集合操作但只返回单个值的函数
查询GoddsInfo表中所有商品的平均单价
SELECT AVG(单价) AS '平均单价' FROM GoodsInfo |
查询GoodsInfo表中最高和最低单价
SELECT MAX(单价) AS '最高单价', MIN(单价) AS '最低单价' FROM GoodsInfo |
COUNT用于统计组中满足条件的行数或总行数
查询客户总数
SELECT COUNT(*) AS '客户总数' FROM CustomerInfo |
(9)对查询结果分组
SELECT语句的GROUP BY子句作用于查询的中间结果表,按某一列或多列值进行分组,值相等的为一组
分组,聚集函数作用于每个分组
不分组,聚集函数作用于整个查询结果
查询各课程的课程的课程号与相应的选修人数
SELECT Cno,count(Sno) from SC group by Cno |
(10)使用HAVING子句进行筛选
HAVING子句必须与GROUP BY 子句结合使用
查询平均成绩为90分及以上的各课程的课程号与相应的平均成绩
SELECT Cno,AVG(Grade) FROM SC GROUP BY Cno HAVING AVG(Grade) >= 90 |
注!
Where子句中不能用聚合函数作为条件表达式, WHERE AVG(Grade) >=90的写法是错误的!
WHERE子句作用于基本表或视图,HAVING短语作用于组
3.4.3 连接查询
同时涉及多个表的查询称为连接查询
连接查询有两种形式: 1. 连接谓词。2.以JOIN关键字指定的连接。
1.连接谓词
用来连接两个表的条件称为连接条件或连接谓词,可用逻辑运算符AND和OR 来连接多个连接谓词
连接字段:连接谓词中的列名称为联结字段
一般格式: <表名1>.列名 <比较运算符> <表名2>.<列名2>
等值连接实例:
查询每个学生及其选课情况
SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno=Sc.Sno |
查询选修了三号课程且成绩在90分以上所有学生的学号、姓名-复合条件连接
SELECT Student.Sno,Sname from Student,SC where Student.Sno=Sc.Sno and Sc.Cno=3 and SC.Grade>90 |
在Customer表中查询具有相同姓名的客户信息
SELECT KH1.* FROM CustomerInfo KH1, CustomerInfo KH2 WHERE KH1.客户姓名=KH2.客户姓名 AND KH1.客户编号<>KH2.客户编号 |
2.以JOIN关键字指定的连接
INNER JOIN-内连接, OUTER JOIN-外连接
a.内连接
内连接按照ON所指定的连接条件合并两个表,返回满足条件的行,一般格式
FROM <表名1> JOIN <表名2> ON <表名1.列名>=<表名2.列名>
例: 查找商品订购数据库每个订购了商品的客户及订单情况
SELECT a.*,b.商品编号,b.订购时间,b.数量,b.需要日期,b.付款方式,b.送货方式 FROM CustomerInfo a INNER JOIN OrderList b ON CustomerInfo.客户编号=OrderList.客户编号 |
用FROM的JOIN关键字表达下列查询:在商品数据库中查询订购了类别为”体育用品”的客户的客户编号,客户姓名,联系方式以及商品的需要日期
SELECT DISTINCT CustomerInfo.客户编号,客户姓名,联系电话,需要日期 FROM CustomerInfo JOIN GoodsInfo JOIN OrderList ON GoodsInfo.商品编号=OrderList.商品编号 ON CustomerInfo.客户编号 = OrderList.客户编号 WHERE 商品类别 = '体育用品' |
b.外连接
外连接的结果表不但包含满足连接条件的行,还包括相应表中的所有行.
外连接包括三种: 左外连接,右外连接,完全外连接
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student left (outer) join SC on Student.Sno=SC.Sno |
SELECT Stuent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from SC right join Student ON Student.Sno=SC.Sno |
3.4.4 嵌套查询
一个SELECT-FROM-WHERE 语句称为一个查询块
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
子查询不能用ORDER BY 子句!
SELECT Sname //外层查询/父查询 |
引出子查询的谓词:
- 带有IN谓词的子查询
- 带有比较运算符的子查询
- 带有ALL(SOME) 或ANY谓词的子查询
- 带有EXISTS谓词的子查询
1.带有IN谓词的子查询
IN和NOT IN 子查询只能返回一列数据
SELECT * FROM CustomerInfo WHERE 所在省市 IN (SELECT 所在省市 FROM Customer WHERE 客户姓名='张小林') |
2.带有比较运算符的子查询
SELECT * FROM OrderList WHERE 商品编号='10010001' AND 数量 > (SELECT AVG(数量) FROM OrderList WHERE 商品编号='10010001') |
3.带有ALL(SOME) 或ANY谓词的子查询
ALL指定表达式要与子查询结果集中地每个值都进行比较,当表达式每个值都满足比较关系时,才返回TRUE,否则返回FALSE
ANY与SOME的限制含义相同,通常采用ANY,表示表达式只要与子查询结果集中的某个值满足比较关系式就返回TRUE,否则返回FLASE
查询比某个食品类的商品单价低的商品信息
SELECT * FROM GoodsInfo WHERE 商品类别<>'食品' AND 单价<ANY |
ANY在子查询返回结果为NULL时,表达式为FALSE
ALL在子查询返回结果为NULL时,表达式为TRUE
4.带有EXISTS谓词的子查询
EXISTS谓词用于测试子查询的结果是否为空表,若子查询结果集不为空,EXISTS返回TURE,否则返回FALSE
查找订购了编号为”10010001”商品的客户姓名
SELECT 客户姓名 FROM CustomerInfo a WHERE EXISTS ( |
查询选修了全部课程的学生姓名
SELECT Sname FROM Student WHERE NOT EXISTS |
3.4.5集合查询
集合操作主要包括: 并,交,差
1.并
使用UNION或OR
查询计算机科学系的学生及年龄不大于19岁的学生
SELECT * FROM Student WHERE Sdept='CS' |
SELECT DISTINCT * FROM Student WHERE Sdept='CS' OR Sage<=19 |
2.交
使用INTERSECT
查询单价小于50的商品与库存量大于20的商品的交集
SELECT * FROM GoodsInfo WHERE 单价<50 |
3.差
使用EXCEPT
查询单价小于50的商品与库存量大于20的商品的差集
SELECT * FROM GoodsInfo WHERE 单价<50 |
4.集合查询排序
ORDER BY 子句只能用于对最终查询结果排序
SELECT * FROM Student WHERE Sdep='CS' |
3.5数据更新
插入语句:INSERT
两种插入方式:1.插入单个元祖2.插入子查询结果
1.数据插入
1.插入元祖
插入一条选课记录(‘95020’,’1’)
INSERT INTO SC(Sno,Cno) VALUES('95020','1') |
2.插入子查询结果
对每一个系,求学生的平均年龄,并把结果存入数据库
/*第一步建表*/ |
2.数据修改
将所有学生的年龄增加1岁
UPDATE Student SET Sage=Sage+1 |
将计算机系全体学生的成绩置零
UPDATE SC SET Grade=0 WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept='CS') |
3.数据删除
DELETE删除的是表中的数据,不是表的结构.
DROP删除的不仅是标的内容还有表的定义
删除商品订购数据库的CustomerInfo表中编号为100007的客户信息
DELETE FROM CustomerInfo WHERE 客户编号='100007' |
4.索引定义
删除索引: DROP INDEX <基本表名>.<索引名>
DROP INDEX CustomerInfo.CustomerID_ind |
3.6视图
1.视图定义
从一个或多个基本表(或视图)导出的表。视图是一个虚表,数据库中值存储视图的定义。
1.创建视图Customer_NJview,其内容为江苏南京的客户信息
CREATE VIEW Customer_NJview |
创建视图OrderList_NJview 其内容为江苏南京的客户编号及其订购的商品编号
CREATE VIEW OrderList_NJview |
创建”江苏南京”订购了编号为10010001商品的所有客户的客户编号、客户姓名视图Order_NJView_2
CREATE VIEW Order_NJView_2(客户编号,客户姓名) |
2.修改视图Order_NJView_2,使其内容是选购了编号为30010001的所有江苏南京客户的客户编号,客户姓名
ALTER VIEW Order_NJView_2 |
3.删除视图OrderList_NJView
DROP VIEW OrderList_NJView |
2.视图查询
查询视图与查询表相同
CREATE VIEW IS_Student |
在信息系学生视图中找出年龄小于20岁的学生
SELECT Sno,Sage, |
3.视图更新
1.插入数据:INSERT
INSERT INTO CInfo_JS(客户编号,客户姓名,性别,出生日期,所在省市) VALUES('100008','赵平','女','1993-5-19','江苏南京') |
2.修改数据:INSERT
UPDATE IS_Student SET Sname='刘晨' WHERE Sno='95002' |
3.删除数据:DELETE
DELETE FROM CInfo_JS WHERE 客户编号='100008' |
4.为了防止用户通过对视图数据进行更新时,对不属于试图范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION
CREATE VIEW IS_Student_1 |
视图更新
4.数据库设计
1.信息系统是提供信息、辅助人们对环境进行控制和进行决策的系统
数据库是信息系统的核心和基础。
2.数据库的设计的目标:为用户和各种应用系统提供一个信息基础设施和高效率的运行环境,包括:
数据的存储效率,存储空间利用率,系统运行管理效率
3.数据库设计的基本步骤
4.E-R图像关系模式的转换
a. 1:1 联系
例:
b. 1:N联系
c.M:N联系
5.关系规范化理论
实在来不及了,看的这个速成
https://www.bilibili.com/video/BV1Bq4y1Y7GC?p=2&vd_source=3a0549a10a00b9b6b6653658bbdb92b2