Professional Documents
Culture Documents
05 SQL:数据操作
05 SQL:数据操作
5.1 SQL 简介
1. SQL语言是面向转换语言的例子,它将输入关系转换为所需的输出关系。
2. 作为语言,SQL包括两个主要部分:
数据定义语言(DDL):用于定义数据库结构和数据的访问控制。
数据操作语言(DML):用于检索和更新数据。
3. SQL 语言的特点:
非过程化语言:SQL 不需要指定数据的访问方法,用户只需描述所需的信息,不需给出获取
该信息的具体过程。
SQL 语言是无格式的,语句的每一部分不必固定在屏幕上的特定位置。
SQL 命令由标准英语单词组成, 如 CREAT TABLE、INSERT、SELECT等。例如:
5.2 SQL 命令
SQL 语句包括保留字和用户自定义字:
保留字是SQL语言的固定部分,有固定的含义,必须准确拼写且不能跨行拼写。
用户自定义字由用户自己定义(根据一定的语法规则),用于表示表、列、视图和索引等数据库对
象的名称。
用 “ ;” 来标识 SQL 语句的结束。
扩展的巴克斯范式(BNF)定义SQL语句:
大写字母用于表示保留字,必须准确拼写。
小写字母用于表示用户自定义字。
竖线(|)表示从选项中进行选择,例如a|b|c。
大括号表示所需元素,例如 { a }。
中括号表示可选择元素,例如[ a ]。
省略号(…)表示某一项可选择重复零到多次。
5.3 数据操作
SQL DML 语句有以下几种:
SELECT:用于查询数据库中的数据。
INSERT:用于将数据插入表中。
UPDATE:用于更新表中数据。
DELETE:用于删除表中数据。
5.3.1 简单查询
1. SELECT 语句用于检索并显示一个或多个数据库表中的数据。
2. SELECT 的形式
5.3.2 查询结果排序(ORDER BY 子句)
可以使用ORDER BY子句让查询结果按一定顺序显示。
ORDER BY子句包括所需排序的列标识符的列表,用逗号分开。列标识符可能是列名字或是列序号,列
序号是指列在SELECT列表中的位置,“1”标识列表中第一个(最左边)元素,“2”标识列表中第二个元素,以
此类推。
当被排序的列是表达式并且没有使用过AS子句赋予列将来可能引用的名字时,可以用列序号。ORDER
BY子句允许导出的行在任一列或多个列上按升序(ASC)或降序(DESC)排列,而不管列是否出现在查询结
果中。ORDER BY子句只能是SELECT语句的最后一个子句。
ISO 标准定义了五个聚集函数:
这些函数只对表中的单个列进行操作,返回一个值。
除了 COUNT(*) 外,每一个函数首先要去掉空值,然后计算其非空值。
例如,下面的查询是非法的:
应用 GROUP BY 子句时,两个空值被认为是相等的,即如果两行在同一分组列上的值都为空值,并且
在不含空值的分组列上值相等,则这两行将被合并到同一组中。
分组约束(HAVING 子句)
标量子查询:返回单个列和单个行,即单个值,可用于任何需要单个值的地方。
行子查询:返回多个列,但只有单个行,可用于任何需要行值构造器的时候,如谓词中。
表子查询:返回多个行,每行有一个或多个列,用于需要一个表的情况,例如作为谓词 IN 的操作
数。
5. 子查询应遵循如下规则:
若子查询前缀关键字 ALL,那么仅当子查询产生的所有值都满足条件时,条件才为真。
若子查询前缀关键字 ANY,那么子查询产生的任何一个或多个值满足条件时,条件就为真。
如果子查询是空值,ALL 条件返回真值,ANY 条件返回假值。
5.3.7 多表查询
1. 要从多个表中得出查询结果,可用子查询,也可用连接操作。如果最终结果表包括了多个表中的
列,则必须用连接操作。
2. 连接操作中,FROM 子句列出多个表名,可以用别名代替表名,表名之间用逗号分开。通常还要用
WHERE 子句来指明连接列。
如果两个表的查询不使用 WHERE 子句,那么 SQL 产生的查询结果就是两个表的笛卡尔乘积。事实上,
ISO 标准为笛卡尔乘积提供了特殊的 SELECT 语句格式:
ISO 标准提供的另一类连接操作是外连接,保留不满足连接条件的行:
5.3.8 EXISTS 和 NOT EXISTS
当且仅当子查询返回的结果表至少存在一行时,EXISTS 为真。当子查询返回的结果表为假时
EXISTS为假。 NOT EXISTS 相反。
由于 EXISTS 和 NOT EXISTS 仅检查子查询结果表中是否存在行,所以子查询可查询任意数目
的列。
子查询通常用下列形式表示:
5.3.9 合并结果表(UNION、INTERSECT、EXCEPT)
5.3.10 数据库更新
INSERT:向表中添加新的行。
UPDATE:修改表中现有的行。
DELETE:修改表中已有的行。
(一)向数据库中添加数据 INSERT
(二)修改数据库中的数据 UPDATE
(三)删除数据库中的数据 DELETE