数据库基本概念:
数据(data):描述事物的符号记录
数据库(DataBase,DB):数据的集合
数据库管理系统(DataBase Management System,DBMS):数据管理软件
数据库系统(DataBase System,DBS):由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护的系统。
数据管理技术的产生和发展:
人工管理阶段:批处理、无共享、冗余度极大、数据不独立
文件系统阶段:批处理、联机实时处理、共享性差、冗余度大、数据独立性差
数据库系统阶段:联机实时处理、分布处理、批处理、共享性高、冗余度小、具有高度的物理独立性和一定的逻辑独立性
数据库系统的三级模式结构:
模式:也称逻辑模式、所有用户的公共数据视图、与高级程序设计语言无关
外模式:逻辑结构、模式的子集、与高级程序设计语言有关
内模式:物理结构
数据库的二级映像:
外模式/模式映像:逻辑独立性
模式/内模式映像:物理独立性
关系代数运算:
基本运算:并、差、笛卡尔积×、选择σ、投影∏
其它运算:交、连接、除
笛卡尔积:R与S的笛卡尔积:R的每一个元组与S的每一个元组相连(列数相加,不合并),作为笛卡尔积中的元组。
连接:
等值连接:如A=B,笛卡尔积中选取A、B属性值相等的元组
非等值连接:如A<B,笛卡尔积中选取A属性值<B属性值的元组
自然连接:R、S中有同名属性组A,笛卡尔积中选取R.A、S.A属性值相等的元组,并把重复属性列去掉,即,将R.A、S.A合并为一列,写为A。
外连接:类似自然连接,但保留属性值不相等的元组。如R存在元组1的A属性值=3,但S中不存在A属性值=3的元组时,将元组1写入外连接结果,元组中,S对应的列填入NULL。
左外连接:R左外连接S:仅保留R中未匹配的元组
右外连接:R右外连接S:仅保留S中未匹配的元组
除:R÷S=T:T包含所有在R但不在S中的属性及其值,且T与S的所有组合都在R中。步骤:找出R与S的同名属性列,若R中存在元组集满足:除RS同名属性列的其它列属性值均相等,S中的同名属性列的元组在该元组集中都能找到,则其它列属性组成的元组在T中。
SQL的动词:
SQL功能 | 动词 |
数据查询 | SELECT |
数据定义 | CREATE、DROP、ALTER |
数据操纵 | INSERT、UPDATE、DELETE |
数据控制 | GRANT、REVOKE |
SQL对关系数据库模式的支持:
外模式:视图
模式:基本表
内模式:存储文件
数据定义:
模式:
创建模式:
CREATE SCHEMA 模式名 AUTHORIZATION 用户名 [表定义子句|视图定义子句|授权定义子句];
删除模式:
DROP SCHEMA 模式名 CASCADE(级联)|RESTRICT(限制)
在已存在的模式中添加表:
CREATE TABLE "模式名".表名(...);
表:
创建表:
CREATE TABLE 表名
(
列名1 类型1 列级完整性约束,
列名2 类型2 列级完整性约束,
...
表级完整性约束
);
修改表:
ALTER TABLE 表名
ADD COLUMN 新列名 数据类型 列级完整性约束;
|DROP COLUMN 列名 CASCADE|RESTRICT;
|ALTER COLUMN 列名 新数据类型;
|RENAME COLUMN 列名 TO 新列名;
|ADD 表级完整性约束;
|DROP CONSTRAINT 完整性约束名 CASCADE|RESTRICT;
删除表:
DROP TABLE 表名 CASCADE|RESTRICT;
视图:
创建视图:
CREATE VIEW 视图名(列名1, 列名2, ...)
AS
查询子句
[WITH CHECK OPTION];
删除视图:
DROP VIEW 视图名;
索引:
创建索引:
CREATE [UNIQUE] [CLUSTER] INDEX 索引名
ON 表名(列名1, ASC(升序)|DESC(降序), 列名2, ASC|DESC, ...);
修改索引:
ALTER INDEX 旧索引名 RENAME TO 新索引名;
删除索引:
DROP INDEX 索引名;
数据查询:
基本查询:
SELECT ALL|DISTINCT(删除重复元组) 目标列名1 [显示列名1], 目标列名2 [显示列名2], ...
FROM 表名1|视图名1, 表名2|视图名2 ...
WHERE 条件表达式
GROUP BY 分组依据列名1, 分组依据列名2, ...
HAVING 组条件表达式
ORDER BY 排序依据列名1 ASC(升序)|DESC(降序), 列名2 ASC|DESC, ...;
连接查询:
...
FROM 表名1|视图名1, 表名2|视图名2 ...
WHERE 表名1.属性名1 = 表名2.属性名2
...
自身连接:
...
FROM 表名 新表名1, 表名 新表名2
WHERE 新表名1.属性名1 = 新表名2.属性名2
...
嵌套查询:
...
WHERE 属性名 IN (查询子句)
...
带有存在量词EXISTS的子查询
...
WHERE [NOT] EXISTS (查询子句) --查询子句结果非空时,外层WHERE子句返回真,有NOT则返回假
...
集合查询:
查询子句1
UNION(并)|INTERSECT(交)|EXCEPT(差)
查询子句2
基于派生表查询
...
FROM (查询子句) AS 派生表名1(列名1, 列名2, ...)
...
数据操纵:
插入数据:
INSERT INTO 表名(列名1, 列名2, ...)
VALUES(值1, 值2, ...);
修改数据:
UPDATE 表名
SET 属性名 = 表达式
WHERE 条件;
删除数据:
DELETE FROM 表名
WHERE 条件;
数据控制:
授权:
GRANT 权限1(列名1), 权限2(列名2), ...
ON 对象类型1 对象名1, 对象类型2 对象名2, ... --如:ON TABLE 表名1
TO 用户1, 用户2, ...
[WITH GRANT|ADMIN OPTION];
回收权限:
REVOKE 权限1, 权限2, ...
ON 对象类型1 对象名1, 对象类型2 对象名2, ...
FROM 用户1, 用户2, ... [CASCADE|RESTRICT];
角色创建:
CREATE ROLE 角色名
给角色授权:
...
TO 角色1, 角色2, ...
...
将角色授予其它角色或用户
GRANT 角色1, 角色2, ...
...
角色权限收回
...
FROM 角色1, 角色2, ...
数据类型:
数据类型 | 含义 |
CHAR(n),CHARACTER(n) | 长度为n的定长字符串 |
VARCHAR(n),CHARACTERVARCHAR(n) | 最大长度为n的变长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT,INTEGER | 长整数(4字节) |
SMALLINT | 短整数(2字节) |
BIGINT | 大整数(8字节) |
NUMERIC(p,d) | 定点数共p位数字,小数点后有d位 |
DECIMAL(p,d),DEC(p,d) | 同上 |
REAL | 取决于机器精度的单精度浮点数 |
DOUBLE PRECISION | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 可选精度的浮点数,精度至少为n位数字 |
BOOLEAN | 逻辑布尔量 |
DATE | 日期,含年月日,格式为YYYY-MM-DD |
TIME | 时间,含时分秒,格式为HH:MM:SS |
TIMESTAMP | 时间戳类型 |
INTERVAL | 时间间隔类型 |
聚集函数:
函数名 | 功能 |
COUNT | 计数 |
TOTAL | 求和 |
MAX | 求最大值 |
MIN | 求最小值 |
AVG | 求平均值 |
字符串匹配:
%代表任意长度(长度可以是0)的字符串
_代表任意单个字符
定义转码字符:ESCAPE‘\'
例:LIKE 'A%B_'可以匹配:‘AB1’,‘A11B1’,LIKE '\_%'可以匹配:'_1','_123'
ANY或ALL谓词语义:
>ANY | 大于子查询结果中的最小值 |
>ALL | 大于子查询结果中的最大值 |
<ANY | 小于子查询结果中的最大值 |
<ALL | 小于子查询结果中的最小值 |
>=ANY | 大于等于子查询结果中的最小值 |
>=ALL | 大于等于子查询结果中的最大值 |
<=ANY | 小于等于子查询结果中的最大值 |
<=ALL | 小于等于子查询结果中的最小值 |
=ANY | 等于子查询结果中的某个值 |
=ALL | 等于子查询结果中的所有值(通常没有实际意义) |
!=(或<>)ANY | 不等于子查询结果中的某个值(通常没有实际意义) |
!=(或<>)ALL | 不等于子查询结果中的所有值 |
三值逻辑真值表:
x y | x AND y | x OR y | NOT x |
T T | T | T | F |
T U | U | T | F |
T F | F | T | F |
U T | U | T | U |
U U | U | U | U |
U F | F | U | U |
F T | F | T | T |
F U | F | U | T |
F F | F | F | T |
约束
约束条件:
NOT NULL 非空
UNIQUE 唯一
PRINMARY KEY 主键
FOREIGN KEY(属性名) REFERENCES 外表名(属性名) 外键
CHECK 自定义约束条件
创建约束条件:
ALTER TABLE 表名
ADD CONSTRAINT 约束名 CHECK(条件)
删除约束条怀:
ALTER TABLE 表名
DROP CONSTRAINT 约束名
断言
创建断言:
CREATE ASSERTION 断言名 CHECK子句
删除断言
DROP ASSERTION 断言名
触发器
创建触发器
CREATE TRIGGER 触发器名
BEFORE|AFTER 触发事件 ON 表名
REFERENCING
OLDROW AS 旧行名
NEWROW AS 新行名
FOR EACH ROW(行级触发)|STATEMENT(语句级触发)
[WHEN 触发条件] 触发动作体
删除触发器
DROP TRIGGER 触发器名