数据库笔记#3:SQL
数据定义
定义模式
1 | CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<CREATE TABLE...>|<CREATE VIEW...>|<GRANT...>]; |
删除模式
1 | DROP SCHEMA <模式名> <CASCADE|RESTRICT>; |
- CASCADE模式:把该模式中的所有数据库对象全部删除
- RESTRICT模式:如果该模式中定义了下属的数据库对象,就拒绝执行该语句
定义表
1 | CREATE TABLE <表名>(<列名> <数据类型> [<列级完整性约束>] +); |
1 | -- EXAMPLE |
- 常用的不常规数据类型
数据类型 | 含义 |
---|---|
CHAR(n) | 长度为n的定长字符串 |
VARCHAR(n) | 最大长度为n的变长字符串 |
NUMERIC(p,d) | p位数字的定点数,小数点后有d位 |
- 每个基本表都属于某个模式,一个模式包含多个基本表
1 | CREATE TABLE "<模式名>".<表名>; /*显式定义表所属模式*/ |
修改表
1 | ALTER TABLE <表名> |
1 | -- EXAMPLE |
删除表
1 | DROP TABLE <表名> [CASCADE|RESTRICT]; |
- CASCADE模式:将相关的依赖对象(被其他表的约束引用)一起删除。Oracle中为 CASCADE CONSTRAINTS
- RESTRICT模式:如果存在相关依赖对象,则不能删除
创建索引
1 | CREATE [UNIQUE] [CLUSTER] INDEX <索引名> |
1 | -- EXAMPLE |
修改索引
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:
- 用EXISTS实现蕴含:
集合查询
1 | UNION |
数据更新
插入数据
1 | INSERT INTO <表名> [(<属性> + )] VALUES(<常量> +); |
修改数据
1 | UPDATE <表名> SET <列名>=<表达式> + [WHERE ...]; |
删除数据
1 | DELETE FROM <表名> [WHERE ...]; |
建立视图
1 | CREATE VIEW <视图名> [<列名> + ] |
- WITH CHECK OPTION:对视图进行UPDATE,INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则决定具体系统的实现。
- 对视图进行查询时,是按照视图的定义从基本表中将数据查出
- 若一个视图时从单个基本表导出,并只是去掉了基本表的某些行和某些列,但保留了主码。则称为 行列子集视图
删除视图
1 | DROP VIEW <视图名> [CASCADE]; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 二零拾肆!