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里的每个子项可以是单个关系或是包含自然连接的表达式。