2.3.2 关系模型
每个关系是一个表格,由多个元组(行)构成,而每个元组又包含多个属性(列)。关系名、属性名以及属性类型称作该关系的模式(schema)。例如,Movie关系的模式为Movie(title,year,length),其中,title、year、length是属性,假设它们的类型分别为字符串、整数、整数。
数据库语言SQL用于描述查询以及修改操作。数据库修改包含三条命令:INSERT、DELETE以及UPDATE,查询通常通过select-from-where语句来表达,它具有图2-9所示的一般形式。Select查询语句计算过程大致如下(不考虑查询优化):
图 2-9 SQL查询
1)取FROM子句中列出的各个关系的元组的所有可能的组合。
2)将不符合WHERE子句中给出的条件的元组去掉。
3)如果有GROUP BY子句,则将剩下的元组按GROUP BY子句中给出的属性的值分组。
4)如果有HAVING子句,则按照HAVING子句中给出的条件检查每一个组,去掉不符合条件的组。
5)按照SELECT子句的说明,对于指定的属性和属性上的聚集(例如求和)计算出结果元组。
6)按照ORDER BY子句中的属性列的值对结果元组进行排序。
SQL查询还有一个强大的特性是允许在WHERE、FROM和HAVING子句中使用子查询,子查询又是一个完整的select-from-where语句。
另外,SQL还包括两个重要的特性:索引以及事务。其中,数据库索引用于减少SQL执行时扫描的数据量,提高读取性能;数据库事务则规定了各个数据库操作的语义,保证了多个操作并发执行时的ACID特性(原子性、一致性、隔离性、持久性),后续会专门介绍。