目录
一、数据库基础
1、数据模型:用数学的方法(或计算机可实现的方法)对现实世界中的事物及其联系的描述。
2、数据模型的作用:①用来抽象、表示和处理现实世界中数据和信息的工具 ②是对现实世界的模拟和抽象。
3、数据模型三要素:数据结构、数据操作、完整性约束
- 数据结构:是指数据在数据库中的存在方式。
- 数据操作:是指对数据库中的数据进行增、删、改、查操作的方式。
- 完整性约束:是指保证数据在操作过程中的正确性和一致性规则。
4、关系数据库
关系模型:以二维表来描述数据
eg:ORACLE、SQL Sever、MySQL
5、NOSQL数据库
NOSQL(not only sql)是非关系型数据存储的广义定义
eg:mongoDB、redis、HBASE
6、数据库DB:是指长期存储在计算机内,有组织地、可共享的大量数据的集合。
7、数据库管理系统DBMS:是位于用户和操作系统之间的一层对数据进行管理的软件系统。
8、DBMS的基本功能:①数据库定义和建立 ②数据存取功能 ③数据库运行控制功能 ④组织、存储、管理和维护等。
9、数据库语言(SQL):是用户和DBMS之间的媒介,完成对数据库操作的工具。
数据定义语言DDL | create、drop、alter | 是对数据库内部的对象(表)进行创建,删除,修改等的操作语言 |
数据操纵语言DML | select、insert、update、delete | 对表内部数据(记录)的操作,增删改查 |
数据控制语言DCL | grant、revoke | 操作的是数据库对象的权限 |
10、数据库系统(DBS):是一个实际可运行的,按照数据库方式存储、维护和向应用系统提供数据或信息支持的系统。
它包括数据库、数据库管理系统、应用系统、数据库管理员(DBA)。
二、关系数据库理论
1、关系代数的基本术语
- 域(Domain)
- 笛卡儿积
- 关系:是一张二维表
- 关系的码(候选码/键):每个关系都有且只有一个主码
- 外码:如果某一个关系中的属性(或属性集合)在另一个关系中是主码,则称其为外码。
2、关系模式与关系
关系的内涵是关系模式,关系的外延是关系的值。
概念模型 | 记录表 |
元组 | 记录 |
属性 | 字段名 |
属性值 | 字段值 |
域 | 数据类型及长度 |
码,候选码 | 主键 |
3、关系的完整性约束
(1)实体完整性(PRIMARY KEY):针对基本关系的;不能空值,不能取重复值。
(2)参照/引用完整性(FOREIGN KEY):不同关系之间或同一关系的不同不同元祖间的约束。
constraint EMP_DNO foreign key(DNO) references DEPT(DNO);
(3)域完整性(用户自定义完整性):要求属性必须取自其对应的值域。
constraint sex check (性别 in (‘男’,‘女’));
4、传统的集合运算:并、差、交
5、专门的关系运算
(1)选择:在行上做选择
(2)投影:在列上做选择
select distinct dept from student;//求一共多少个系
//distinct 把dept 里面的重复值去掉
(3)连接
在sql中l外连接包括左连接(left join )和右连接(right join),全外连接(full join),等值连接(inner join)又叫内连接。
- 等值连接:在笛卡儿积的基础上选择满足两个关系中给定属性值相等的元组的集合。
select * from xs,cj where xs.sno=cj.sno;
select * from xs inner join cj on xs.sno=cj.sno; //inner可省略
- 自然连接:是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并在结果中把重复的属性组去掉。
select * from xs Natural join cj;
等值连接和自然连接的区别和联属系如下:
①自然连接一定是等值连接,但等值连接不一定是自然连接。
②等值连接要求相等的分量,不一定是公共dao性;而自然连接要求相等的分量必须是公共属性。
③等值连接不把重复的属性除去;而自然连接要把重复的属性除去。
- (全)外连接:返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则补NULL。
select * from a_table a full join b_table b on a.a_id = b.b_id;
- 左(外)连接:左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
select * from a_table a left join b_table b on a.a_id = b.b_id;
- 右(外)连接:右表的记录将会全部表示出来,而左表只会显示符合搜索条件的记录,左表记录不足的地方均为NULL。
select * from a_table a right join b_table b on a.a_id = b.b_id;
(4)除
6、建立关系表
(1)建立表结构 ①定义字段类型和长度 ②定义完整性约束
(2)输入数据
三、创建、修改表
DDL
列级完整性约束有六种:主键Primary key、外键foreign key 、唯一 unique、检查 checck 、默认default 、非空/空值 not null/ null
表级约束有四种:主键、外键、唯一、检查
DML
- 单行插入
- 多行插入:也叫做表间拷贝
- 表复制:先创建一个新表,再复制指定表里面的所有数据。
- 表拷贝:只复制表结构
- update
修改表结构 | add |
alter | |
drop | |
修改表数据 | insert |
update | |
delete |
四、单表查询
1、一般格式
2、 extract() 函数
返回特定的日期形式
3、distinct关键字
消除重复行
4、in关键字
用来查找属性值属于指定集合的元组。
not in关键字
5、<条件表达式>中的运算符
查询条件 | 谓词 |
比较 | =,>,<,>=,<=,!=,```` |
确定范围 | between and, not between and |
确定集合 | in, not in |
字符匹配 | like, not like |
空值 | is null, is not null |
多重条件 | and, or, not |
6、模糊查询
like关键字
通配符:%表示任意0个或多个字符;_表示任意单个字符。
7、空值运算符
NVL()函数是一个空值转换函数,该函数的目的是把一个空值(null)转换成一个实际的值。
格式:NVL(表达式1,表达式2)
功能:如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。
8、多条件查询
9、组函数(聚合函数)
对一组值进行计算并返回单一的值,通常聚合函数会与SELECT语句的GROUP BY子句一同使用,在与GROUP BY子句使用时,聚合函数会为每一个组产生一个单一值,而不会为整个表产生一个单一值。
10、分组查询
- group by子句
(1)当查询中存在group by子句的时候,select列表中只能存Group By子句中的字段,或者分组函数。
(2)Group By子句不允许出现在where条件中,但允许出现在其后,也就是可以和where条件并列使用。
- having子句
分组后再按一定条件进行筛选,只输出满足条件的组。
- where和having的区别
where作用于基本表或视图,从中选择满足条件的元组;
having短语作用于组,从中选择满足条件的组。
- order by
asc升序排序(默认值),desc(降序排序)
五、多表查询
1、Θ连接(包括等值连接和非等值连接)
连接条件中的各连接字段类型必须是可比较的。
2、表的别名
作用:①简化输入 ②表与自身连接 ③在嵌套查询语句中使用
3、自连接
同一个表之间可以进行自身连接:①要起别名进行区分 ②属性名必须加别名前缀
<>是不等值连接
4、外连接
左外连接
右外连接
完全外连接
5、自然连接
①隐藏了连接条件 ②自动去除同名字段
6、内连接(等值连接)
inner join,也称为等值连接,返回两张表都满足条件的部分,inner join 就等于 join 。
7、using关键字
①查询必须是等值连接;
②等值连接中的列必须具有相同的名称和数据类型。
8、子查询
- 子查询逻辑清晰,但是速度慢。
- 多值比较运算符
运算符 | 含义 |
[not] in | 字段的值是否在所选的集合中 |
[not] any | 满足一个条件即为真 |
[not] all | 是否将所选的值与集合中所有的值进行比较 |
[not] exists | exists用于检查子查询是否至少会返回一行数据 |
- 子查询的位置
①在where子句中使用子查询
②子查询放在select中
③子查询放在from中
9、相关子查询
- 查询选修了所有课程的学生姓名:
10、传统集合运算的实现
①并运算--union
通常自动删除重复元组,若要保留重复元组,union all
②交运算--intersect
③差运算--except
六、数据库对象
1、索引
- 概念:索引是根据表中一列或若干列按照一定顺序建立的列值与记录之间的对应关系表。
默认情况下,系统创建的是B树索引。
- 创建索引的目的:使用索引加速数据查询的速度,减少磁盘I/O的次数,但同时也会增加系统维护索引的开销。
①表越大,索引越能提高查询效率
②对where子句中最常使用的列建立索引
③尽量将索引列定义为not null
④一个表上最多可创建16个索引,通常不要多于3个
- 创建索引的方式:
①隐式创建:DBMS一般会在创建PRIMARY KEY 和 UNIQUE约束列上自动建立索引
②显式创建:使用create index语句创建
- 创建索引
①索引可以建立在一列或多列上
②ASC(升序)或DESC(降序)指定索引值排列顺序,缺省情况下为ASC
- 删除索引
drop index<表名>.<索引名称>
2、视图
- 说明
①视图一经定义,用户就可以把它当作表一样查询数据
②视图是一个虚表,即视图存储的是查询语句,而不是查询结果
③视图可以定义在基本表上或视图上
- 创建视图
- 视图的更新
①对视图的更新,最终都转化为对基本表数据的更新
②对于由表达式得到的字段不可更新
- 视图的删除
drop view <视图名>
3、数据库的三级模式结构
外模式 | 外部级 | 单个用户视图 | 用户视图 |
模式 | 概念级 | 全局视图 | DBA视图 |
内模式 | 内部级 | 存储视图 | 内部视图 |
数据库系统的三级模式是对数据的三个抽象级别,它把数据的具体组织留给DBMS管理,使用户能逻辑抽象地处理数据,而不必关心数据在计算机中的表示和存储。
为了能够在内部实现这三个抽象层次的联系和转换,数据库系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性
4、同义词
- 概述
①通过同义词可以给表、索引、视图等数据库对象创建一个别名,来隐藏一些信息,提供一定的安全性
②当DBA改变数据库对象的名称时,通过同义词可以避免前台应用程序的改变。
③公有同义词:每个用户都能使用;私有同义词:必须具有访问权限的用户才能使用。
- 格式
create [or replace] [public] synonym<同义词名> for <对象名>
5、序列
- 概述
①序列是Oracle提供的用于生成一系列唯一数值的数据库对象,以实现自动提供唯一主键值。
②序列可以为多个用户并发环境中使用,为多个用户生成不重复的顺序数值。
- 格式
create sequence <对象名>
start wirh n
increment by n
目的:创建自增主键值
取值:<对象名>.nextval
<对象名>.currval --查询当前自增型变量的值
6、PL/SQL编程
- PL/SQL的特点
①PL(Procedure Language)/SQL是Oracle在数据库中引入的一种过程化的编程语言
②PL/SQL是对SQL的扩充:具有为程序开发而设计的特性
③在PL/SQL中可以使用变量,进行流程控制,来实现比较复杂的业务逻辑
④PL/SQL嵌入到Oracle服务器中,可以把它看作Oracle服务器内的一个引擎,所以具有很高的执行效率
- PL/SQL程序结构
Declare
[变量声明]
begin
[语句序列]
exception --可选项
[异常处理程序]
end;
- PL/SQL中特殊类型的变量
①[字段名]%TYPE类型
声明一个与指定表的指定列的相同类型的变量,用于存放一个字段的值。
②[表名]%ROWTYPE类型 //结构化的对象,可以放一行
声明一个与指定表的行结构相同的变量,用于存放一条记录。
③CURSOR变量 //游标类型,返回结果为条记录
声明一个表对象类型的变量,用于存放一个查询结果集。
- 注意:
①在PL/SQL程序中,select语句返回的数据是一行时,select语句总是和into相匹配,into后跟着用于接收查询结果的变量。
②当程序要接收返回的多行结果时,可以采用游标变量来存放。
7、游标
- cursor:用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行或多行的结果集,在每条结果集上操作。
cursor就是PL/SQL中的一种实现对表的对象化操作方法。
- 分类:
①显式游标:当查询结果超过一行时,用户不能使用select语句接收,就需要一个游标来处理结果块。
②隐式游标:当使用隐式游标的属性时,在属性名前加上隐式游标的默认名SQL。
- 游标的定义
cursor 游标名 is select语句; //定义一个游标,指向select语句所返回的结果
- 游标的使用
显式游标有两种使用方式:
①游标变量循环
open 游标
loop
fetch 游标 into 游标变量
--处理语句
exit when 游标%notfound;
end loop;
close 游标;
②游标for循环
for 游标变量 in 游标 loop
--处理语句
end loop;
- 游标变量
①%found:布尔型,如果SQL语句至少影响一行数,则%found等于true,否则等于false。
②%notfound:布尔型,与%found相反。
③%rowcount:整型,返回受SQL语句影响的行数。
④%isopen:布尔型,判断游标是否被打开,如果打开返回true,否则返回false。
----------查询所有学生的学号和姓名------------
- 利用游标变量循环
- 利用for循环
- 隐式游标
8、存储过程
- 概念
存储过程和函数一样,也是一种PL/SQL块,是存入数据库的PL/SQL块。
我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名方式存储与数据库中。
存储过程可以调用,不能由系统触发。
- 优点
①存储过程在服务器端运行,执行速度快
②确保数据库的安全性,只有被授权的用户或创建者本身才能执行存储过程
③简化输入
④可重复执行
9、触发器
- 概念
触发器是一种特殊类型的存储过程。
不同于存储过程通过存储过程名字被直接调用,触发器主要通过事件触发而被系统自动调用执行。
触发器定义在特定的表上,当有对该表的操作时,触发器自动触发执行。
七、数据建模
1、ER图
实体:数据模型中的数据对象,例如人、学生都可以作为一个数据对象,用长方形来表示
属性:数据对象所具有的属性,例如学生具有姓名、学号等属性,用椭圆形表示,属性分为唯一属性( unique attribute)和非唯一属性,唯一属性指的是唯一可用来标识该实体实例或者成员的属性,用下划线表示,一般来讲实体都至少有一个唯一属性。
联系:表现数据对象与数据对象之间的联系,例如学生的实体和成绩表的实体之间有一定的联系,每个学生都有自己的成绩表,这就是一种关系,关系用菱形来表示。
2、实体间的联系类型
一元联系:1对1(1:1),是指对于实体集A与实体集B,A中的每一个实体至多与B中一个实体有关系;反之,在实体集B中的每个实体至多与实体集A中一个实体有关系。
二元联系:1对多(1:N),是指实体集A与实体集B中至少有N(N>0)个实体有关系;并且实体集B中每一个实体至多与实体集A中一个实体有关系。
多元联系:多对多(M:N),是指实体集A中的每一个实体与实体集B中至少有M(M>0)个实体有关系,并且实体集B中的每一个实体与实体集A中的至少N(N>0)个实体有关系。