数据定义

定义模式

1
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<CREATE TABLE...>|<CREATE VIEW...>|<GRANT...>];

删除模式

1
DROP SCHEMA <模式名> <CASCADE|RESTRICT>;
  • CASCADE模式:把该模式中的所有数据库对象全部删除
  • RESTRICT模式:如果该模式中定义了下属的数据库对象,就拒绝执行该语句

定义表

1
CREATE TABLE <表名>(<列名> <数据类型> [<列级完整性约束>] +);
1
2
3
4
5
6
7
-- EXAMPLE
CREATE TABLE STUDENT(
SNO CHAR(9) PRIMARY KEY /*主码*/
SNAME CHAR(20) UNIQUE /*唯一取值*/
SAGE SMALLINT
FOREIGN KEY(CPNO) REFERENCES COURSE(CNO)
);
  • 常用的不常规数据类型
数据类型 含义
CHAR(n) 长度为n的定长字符串
VARCHAR(n) 最大长度为n的变长字符串
NUMERIC(p,d) p位数字的定点数,小数点后有d位
  • 每个基本表都属于某个模式,一个模式包含多个基本表
1
CREATE TABLE "<模式名>".<表名>; /*显式定义表所属模式*/

修改表

1
2
3
4
5
6
ALTER TABLE <表名> 
[ADD [COLUMN] <列名> <数据类型> [<完整性约束>]] /*添加列*/
[ADD <表级完整性约束>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]] /*删除列*/
[DROP CONSTRAINT <完整性约束名> [CASCADE|RESTRICT]]
[ALTER COLUMN <列名> <数据类型>]; /*修改列*/
1
2
3
4
5
6
7
8
9
-- EXAMPLE
ALTER TABLE STUDENT
ADD S_ENTRANCE DATE; /*添加列,新添加的列一律为空值*/

ALTER TABLE STUDENT
ALTER COLUMN SAGE INT; /*修改列的类型为整数*/

ALTER TABLE STUDENT
ADD UNIQUE(SNAME); /*修改表的SNAME为唯一值*/

删除表

1
DROP TABLE <表名> [CASCADE|RESTRICT];
  • CASCADE模式:将相关的依赖对象(被其他表的约束引用)一起删除。Oracle中为 CASCADE CONSTRAINTS
  • RESTRICT模式:如果存在相关依赖对象,则不能删除

创建索引

1
2
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名> [<次序(DEFAULT:ASC)>] +);
1
2
3
-- EXAMPLE
CREATE UNIQUE INDEX SCNO
ON SC(SNO ASC,CNO DESC);

修改索引

1
ALTER INDEX <旧索引名> RENAME TO <新索引名>;

删除索引

1
DROP INDEX <索引名>;

数据查询

字符匹配

1
[NOT] LIKE '<匹配串>' [ESCAPE '<转义字符>']
  • 通配符为%和_ ,%为任意长度(可为0), _为单个字符

聚集函数

1
GROUP BY <> HAVING <>
  • HAVING与WHERE的区别:HAVING在GOURP BY之后执行,作用于组;WHERE作用于基表或视图

嵌套查询

  • 子查询不能使用ORDER BY
  • 不相关子查询/相关子查询:子查询的查询条件是否依赖于父查询
  • 用EXISTS实现FORALL: xP¬(x(¬P))\forall x P\equiv \neg(\exist x(\neg P))
  • 用EXISTS实现蕴含: pq¬pqp\rightarrow q\equiv \neg p\vee q

集合查询

1
2
3
UNION
INTERSECT
MINUS

数据更新

插入数据

1
INSERT INTO <表名> [(<属性> + )] VALUES(<常量> +);

修改数据

1
UPDATE <表名> SET <列名>=<表达式> + [WHERE ...];

删除数据

1
DELETE FROM <表名> [WHERE ...];

建立视图

1
2
3
CREATE VIEW <视图名> [<列名> + ]
AS <子查询>
[WITH CHECK OPTION];
  • WITH CHECK OPTION:对视图进行UPDATE,INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则决定具体系统的实现。
  • 对视图进行查询时,是按照视图的定义从基本表中将数据查出
  • 若一个视图时从单个基本表导出,并只是去掉了基本表的某些行和某些列,但保留了主码。则称为 行列子集视图

删除视图

1
DROP VIEW <视图名> [CASCADE];