SQL编程思想:基于5种主流数据库代码实现
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


1.3.3 面向集合

对于SQL语句而言,它所操作的对象是一个集合(关系表),操作的结果也是一个集合(关系表)。也就是说,SQL是一种面向集合的编程语言。例如,以下是一个查询语句:

其中employee是一个数据表,它是该语句操作的对象。同时,查询的结果也是一个表(包含3个字段)。所以,我们可以继续操作查询的结果:

我们将括号中SELECT语句的查询结果(取名为dt)作为输入对象传递给外面的SELECT语句,最终整个语句的结果仍然是一个关系表。这种嵌套在其他语句中的查询被称为子查询,本书第7章将会介绍子查询的概念。

显然,我们可以继续嵌套该查询。同时,我们也可以执行其他数据操作,例如过滤数据(WHERE)、分组汇总(GROUP BY)、排序显示(ORDER BY)等,或者也可以通过连接查询(JOIN)从多个表中返回关联数据,甚至可以利用集合运算符(例如UNION)将多个查询结果进行合并。无论执行什么操作,SQL语句操作的对象都是集合,操作的结果也是集合。

不仅查询语句,SQL中的插入、更新和删除操作也都以集合(关系表)为操作对象,例如:

我们首先使用CREATE TABLE语句创建了一个表t,然后使用INSERT语句插入了3条记录。通常我们每次只插入一条数据,这也就很容易导致我们以为插入语句是以数据行或者记录为单位的操作。但实际上一行数据也是一个集合,只不过它只有一个元素而已。

INSERT语句的另一种用法可以帮助我们更好地理解这个概念,例如:

SELECT语句返回的是一个集合,因此INSERT语句插入的也是一个集合。数据库执行插入操作之前会在内存中创建一个临时集合(内存临时表),然后将该集合插入目标表t中。因此,以上语句的作用是将表t中的数据再复制一份。

同理,UPDATE和DELETE语句也是以集合(关系表)为单位的操作,只不过我们习惯了更新一行数据或者删除几条记录的说法。