DDL语句引导词:CREATE(建立), ALTER(修改), DROP(撤销)
DML语句引导词:INSERT, DELETE, UPDATE, SELECT
DCL语句引导词:GRANT, REVOKE
CREATE TABLE语法形式:
CREATE TABLE 表名(列名 数据类型 [PRIMARY KEY | UNIQUE] [NOT NULL] [, 列名 数据类型 [NOT NULL], ...])
[]表示其括起的内容可以省略,|表示其隔开的两项可取其一。
数据类型:
INSERT INTO简单语法形式:
INSERT INTO 表名[(列名 [, 列名] ...]) VALUES (值 [, 值], ...);
SELECT 列名 [[, 列名] ...]
FROM 表明
[ WHERE 检索条件];
检索条件:and,or, not
通过DISTINCT使得没有重复的元组
结果排序:ORDER BY 列名 [asc | desc]
模糊查询:
SELECT 列名 [[, 列名] ...]
FROM 表名1,表名2,...
WHERE 检索条件
SELECT 列名 as 列别名 [[, 列名 as 列别名] ...]
FROM 表名1 as 表别名1,表名2 as 表别名2,...
WHERE 检索条件;
INSERT INTO 表名 [(列名[, 列名] ...)]
VALUES (值[, 值] ...);/子查询
DELETE FROM 表名 [WHERE 条件表达式]
UPDATE 表名
SET 列名 = 表达式 | (子查询)
[[, 列名 = 表达式 | (子查询)] ...]
[WHERE 条件表达式]
ALTER TABLE tablename
[add {colname datatype, ...}] //增加新列
[drop {完整约束名}] //删除完整性约束
[modify {colname datatype, ..}] //修改列定义
DROP table 表名
DROP database 数据库名
表达式 [NOT] IN (子查询)
表达式 θ some (子查询)
表达式 θ all (子查询)
//θ是比较运算符: <, >, >=, <=, =, <>
[NOT] EXISTS 子查询
//不加NOT形式的EXIST谓词可以不用
//结果计算
SELECT 列名 | expr | agfunc(列名) [[, 列名 | expr | agfunc(列名)] ...]
FROM 表名1 [, 表名2 ...]
[WHERE 检索条件]
//expr可以是常量、列名、或有常量列名特殊函数及算数运算符构成的算数运式
//agfunc()是一些聚集函数
//聚集函数
COUNT() //个数
SUM() //求和
AVG() //求平均
MAX() //求最大
MIN() //求最小
//分组查询
SELECT 列名| expr | agfunc(列名) [[, 列名 | expr | agfunc(列名)] ...]
FROM 表名1 [, 表名2 ...]
[WHERE 检索条件]
[GROUP BY 分组条件]
//聚集函数不允许用于WHERE子句
//分组过滤
SELECT 列名| expr | agfunc(列名) [[, 列名 | expr | agfunc(列名)] ...]
FROM 表名1 [, 表名2 ...]
[WHERE 检索条件]
[GROUP BY 分组条件[HAVING 分组过滤条件]]
//交-并-差
子查询 {UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL] 子查询}
//带ALL保留重复元组
//空值
is [not] null //空值不能运算
//内连接、外连接
SELECT 列名 [[, 列名] ...]
FROM 表名1 [NATURAL]
[INNER | {LEFT | RIGHT | FULL} [OUTER]] JOIN 表名2
{ON 连接条件 | USING (COLNAME{, COLNAME ...})}
[WHERE 检索条件] ...;
SELECT [ALL | DISTINCT] {* | expr [[AS] c_alias]{, ...}}
FROM tableref {, ...}
[WHERE search condition]
[GROUP BY column {, ...} [HAVING search_condition]]
| subquery [UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL]]
[CORRRESAPONDING [BY](colname {, ...})]subquery;
tableref ::== tablename [corr_name]
select statement ::== subquery [ORDER BY result_colunm [ASC | DESC]{, ...}]
//定义视图
CREATE VIEW view_name [(列名[, 列名]...)]
as 子查询 [with check option]
//撤销
DROP VIEW view_name
数据库完整性是指DBMS应保证的DB的一种特性,再任何情况下的正确性、有效性和一致性。
完整性约束条件的一般形式:
SQL语言实现约束的方法:CREATE TABLE、断言
CREATE TABLE table_name
((colname datatype [DEFAULT{default_constant | NULL}]
[col_constr {col_constr...}]
|, table_constr)
{,{colname datatype [DEFAULT{default_constant | NULL}]
[col_constr {col_constr...}]
|, table_constr
}}
);
//域约束 col_constr
{NOT NULL |
[CONSTRAINT constraintname]
{UNIQUE
| PRIMARY KEY
| CHECK(search_cond)
| REFERENCES tablename [(colname)]
[ON DELETE {CASCADE | SET NULL}]}}
//表约束 table_constr
[CONSTRAINT constraintname]
{UNIQUE (colname {, colname...})
| PRIMARY KEY (colname {, colname...})
| CHECK(search_cond)
| FOREIGN KEY (colname {, colname...})
REFERENCES tablename [(colname {, colname...})]
[ON DELETE CASCADE]}
//断言
create assertion check
CREATE TRIGGER trigger_name BEFORE | AFTER
{INSERT | DELETE | UPDATE[OF colname{, colname...}]}
ON table_name [REFERENCING corr_name_def{, corr_name_def...}]
[FOR EACH ROW | FOR EACH STATEMENT] //对更新操作的每一条结果(前者),或者整个更新操作完成(后者)
[WHEN (search_condition)]
{statement
| BEGIN ATOMIC statement;{statement; ...}END}
DBMS的安全机制:
自主安全性是通过授权机制来实现的。
AccessRule :== (S, O, t, P)
通过视图可以限制用户对关系中某些数据项的存取。
CREATE EMPV1 AS SELECT * FROM EMPLOYEE
CREATE EMPV2 AS SELECT PNAME, D# FROM EMPLOYEE
通过视图课将数据访问对象与谓词结合起来,限制用户对关系中某些元组的存取。
CREATE EMPV3 AS SELECT * FROM EMPLOYEE WHERE P# =: USERID
CREATE EMPV4 AS SELECT * FROM EMPLOYEE WHERE HEAD =: USERID
GRANT {all PRIVILEGES | priviledge{, priviledge...}}
ON [TABLE] tablename | viewname
TO {public | user-id{, user-id...}}
[WITH GRANT OPTION]
//user-id,某一个用户账户
//public,允许所有有效用户使用授予的权利
//priviledge,SELECT | INSERT | UPDATE | DELETE | ALL PRIVILEDGES
//WITH GRANT OPTION选项是允许被授权者传播这些权利
强制安全性通过数据对象进行安全性分级绝密(Top Secret)、机密(Secret)、可信(Confidential)和无分类(Unclassfied)