SQL包括以下部分:DDL、DML、完整性命令、视图定义、事务控制、嵌入式/动态SQL、权限控制。
SQL支持的基本数据类型:
- char(n)(定长字符串数组,长度n)
- varchar(n)(变长字符串数组,最大长度n)
- int(整数类型)
- smallint(小整数)
- numeric(p, d)(共p位数的定点数,d表示小数点右侧有多少位)
- real、double precision(浮点数、双精度浮点数)
- float(n)(精度至少为n的浮点数)
每种类型都可能包含一个称为”null”的特殊值。
char类型,如果字符串长度不够其声明的长度时,它会在其后自动补空格。
char和varchar类型比较,结果随DBS不同而不同。
建议始终使用varchar。
primary key打错一次,不需要有连字符_ 。
CREATE里,主码的声明是可选的,不过每个关系里指定一个主码是一个更好的选择。
一个关系里的主码列不允许存在空值,或是两个元组的主码取值相同。
INSERT里,给出的元组里值出现的顺序应与表列的顺序对应。
DELETE可从关系删除元组。DELETE FROM [table_name]; 从表中删除所有元组(注意没用到*)。
DROP TABLE [table_name]命令删除这个关系本身。
ALTER TABLE命令为表增加属性。所有已存在的元组对新增加的属性取值都是null。
多表查询里,如果有一个字段在多个表里都出现了,那么在SELECT里,对这个字段用[table_name].[col_name]来限定一下。
一个SQL的基本查询语句,可以理解如下:
- 为FROM中列出的关系先产生笛卡尔积。
- 对上一步结果使用WHERE中的谓词。
- 对上一步筛选出的元组,输出SELECT中指定的属性。
这个过程描述的是怎么理解一个SQL查询的结果,而不是SQL语句的具体执行过程。实际执行时,会尽量只产生满足WHERE谓词的笛卡尔积元素。
多表查询时,务必在WHERE中加入外键的修饰,否则产生的结果数量会很大。
自然连接只考虑多表共有的属性取值相同的元组。NATURAL JOIN是对应的SQL命令。
FROM里的每个子项可以是单个关系或是包含自然连接的表达式。