首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第4章 数据更新
4-1 数据的插入(INSERT语句的使用方法)
什么是INSERT
INSERT语句的基本语法
列清单的省略
插入NULL
插入默认值
从其他表中复制数据
4-2 数据的删除(DELETE语句的使用方法)
DROP TABLE语句和DELETE语句
DELETE语句的基本语法
指定删除对象的DELETE语句(搜索型DELETE)
4-3 数据的更新(UPDATE语句的使用方法)
UPDATE语句的基本语法
指定条件的UPDATE语句(搜索型UPDATE)
使用NULL进行更新
多列更新
4-4 事务
什么是事务
创建事务
ACID特性
第5章 复杂查询
5-1 视图
视图和表
创建视图的方法
视图的限制① ——定义视图时不能使用ORDER BY子句
视图的限制② ——对视图进行更新
删除视图
5-2 子查询
子查询和视图
子查询的名称
标量子查询
标量子查询的书写位置
使用标量子查询时的注意事项
5-3 关联子查询
普通的子查询和关联子查询的区别
关联子查询也是用来对集合进行切分的
结合条件一定要写在子查询中
第6章 函数、谓词、CASE表达式
6-1 各种各样的函数
函数的种类
算术函数
字符串函数
日期函数
转换函数
6-2 谓词
什么是谓词
LIKE谓词——字符串的部分一致查询
BETWEEN谓词——范围查询
IS NULL、IS NOT NULL——判断是否为NULL
IN谓词——OR的简便用法
使用子查询作为IN谓词的参数
EXIST谓词
6-3 CASE表达式
什么是CASE表达式
CASE表达式的语法
CASE表达式的使用方法
第7章 集合运算
7-1 表的加减法
什么是集合运算
表的加法——UNION
集合运算的注意事项
包含重复行的集合运算——ALL选项
选取表中公共部分——INTERSECT
记录的减法——EXCEPT
7-2 联结(以列为单位对表进行联结)
什么是联结
内联结——INNER JOIN
外联结——OUTER JOIN
3张以上的表的联结
交叉联结——CROSS JOIN
联结的特定语法和过时语法
当前位置:
首页>>
技术小册>>
SQL基础教程(中)
小册名称:SQL基础教程(中)
### 7-1 表的加减法:深入探索SQL中的数据操作艺术 在数据库的世界里,表(Table)是最基本的数据存储单元,它如同一张二维的表格,行代表记录(Record),列代表字段(Field)。而当我们谈论“表的加减法”时,实际上是在比喻SQL(Structured Query Language)中用于操作表内数据的几种基本而强大的命令:`UNION`、`UNION ALL`(可视为“加法”的某种形式,因为它们用于合并结果集)、`EXCEPT`/`MINUS`(取决于数据库系统,可视为“减法”)、以及`INTERSECT`(虽然不直接对应加减,但属于集合操作的重要一环,常用于找出两个查询结果的交集)。本章节将详细探讨这些操作,帮助读者理解如何在SQL中灵活运用这些工具来处理数据。 #### 7.1.1 表的“加法”:UNION 与 UNION ALL 在SQL中,`UNION`和`UNION ALL`操作符用于合并两个或多个`SELECT`语句的结果集,并去除重复的行(`UNION`)或保留所有重复行(`UNION ALL`)。这种操作类似于数学中的加法,将多个数据集合并为一个更大的数据集。 ##### UNION `UNION`要求每个`SELECT`语句必须拥有相同数量的列,且对应列的数据类型必须兼容。使用`UNION`时,SQL会自动对结果进行去重处理,这意味着如果两个结果集中有完全相同的行(所有列的值都相同),则这些行在最终结果中只会出现一次。 **示例**: 假设我们有两个表,`employees_east`和`employees_west`,分别存储了东部和西部地区的员工信息,每个表都有`employee_id`、`name`和`department`字段。 ```sql SELECT employee_id, name, department FROM employees_east UNION SELECT employee_id, name, department FROM employees_west; ``` 这条查询将返回东部和西部所有员工的列表,但不包含任何重复的员工记录。 ##### UNION ALL 与`UNION`不同,`UNION ALL`不会去除重复的行。这意味着如果两个结果集中有相同的行,这些行在最终结果中都会被保留。`UNION ALL`在性能上通常优于`UNION`,因为它不需要进行去重操作,但在某些情况下(如需要确保结果集中没有重复行时)则不适合使用。 **示例**: ```sql SELECT employee_id, name, department FROM employees_east UNION ALL SELECT employee_id, name, department FROM employees_west; ``` 这条查询将返回东部和西部所有员工的列表,包括任何可能的重复员工记录。 #### 7.1.2 表的“减法”:EXCEPT/MINUS 在SQL中,实现表的“减法”操作通常依赖于`EXCEPT`(在SQL标准中)或`MINUS`(在某些数据库如Oracle中)。这些操作符用于从一个查询结果中减去另一个查询结果中的行,前提是这些行在两个结果集中完全相同。 ##### EXCEPT `EXCEPT`操作符返回在第一个查询结果中出现但不在第二个查询结果中出现的所有唯一行。与`UNION`类似,`EXCEPT`也要求两个`SELECT`语句具有相同数量的列,且对应列的数据类型必须兼容。 **示例**: 假设我们想要找出仅属于东部地区而不属于西部地区的员工。 ```sql SELECT employee_id, name, department FROM employees_east EXCEPT SELECT employee_id, name, department FROM employees_west; ``` 这条查询将返回所有在`employees_east`表中但不在`employees_west`表中的员工记录。 ##### MINUS(Oracle特有) `MINUS`操作符在功能上类似于`EXCEPT`,但它仅在一些特定的数据库系统(如Oracle)中可用。使用`MINUS`时,也需要注意两个查询结果集的列数和数据类型一致性。 **Oracle示例**: ```sql SELECT employee_id, name, department FROM employees_east MINUS SELECT employee_id, name, department FROM employees_west; ``` 此查询的效果与上面的`EXCEPT`示例相同。 #### 7.1.3 表的交集:INTERSECT 虽然`INTERSECT`不直接对应“加减法”的概念,但它是SQL集合操作中不可或缺的一部分,用于找出两个或多个`SELECT`语句结果的交集。即,返回同时在所有查询结果中出现的行。 **示例**: 假设我们想要找出同时在东部和西部地区工作的员工。 ```sql SELECT employee_id, name, department FROM employees_east INTERSECT SELECT employee_id, name, department FROM employees_west; ``` 这条查询将返回所有同时在`employees_east`和`employees_west`表中出现的员工记录。 #### 注意事项与最佳实践 - **性能考虑**:`UNION`、`UNION ALL`、`EXCEPT`/`MINUS`和`INTERSECT`操作可能会影响查询性能,特别是在处理大数据集时。尽量优化查询逻辑,减少不必要的数据处理。 - **数据类型匹配**:确保参与集合操作的`SELECT`语句中的列数据类型一致,否则可能会导致查询失败。 - **列顺序与数量**:每个`SELECT`语句中列的顺序和数量必须相同,以便SQL能够正确匹配和比较行。 - **空值处理**:在涉及`NULL`值的集合操作中,不同的数据库系统可能有不同的行为。了解并测试你的数据库系统如何处理`NULL`值是很重要的。 通过掌握这些基本的集合操作,你可以更灵活地处理数据库中的数据,执行复杂的数据分析任务,以及构建更强大的SQL查询。希望本章节的内容能帮助你更好地理解和应用这些强大的SQL功能。
上一篇:
第7章 集合运算
下一篇:
什么是集合运算
该分类下的相关小册推荐:
PostgreSQL入门教程
SQL基础教程(下)
SQL基础教程(上)
高性能的Postgres SQL