首页
技术小册
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基础教程(中)
### 章节:什么是集合运算 在数据库管理系统中,SQL(Structured Query Language)作为标准的数据操作语言,不仅支持数据的增删改查(CRUD),还内置了一套强大的集合操作功能,这些操作允许用户以集合的形式处理数据,极大地提升了数据分析和查询的灵活性与效率。本章将深入探讨SQL中的集合运算,包括其基本概念、主要类型(并集、交集、差集)以及在实际应用中的案例。 #### 一、集合运算的基本概念 集合,在数学上是一个基本概念,表示一组无序的、不重复的元素。在SQL中,表(Table)可以被视为数据的集合,表中的每一行代表集合中的一个元素。集合运算则是指对两个或多个表(或查询结果集)进行的操作,这些操作的结果仍然是一个集合。 SQL中的集合运算主要用于处理两个或多个SELECT语句返回的结果集,通过特定的逻辑将这些结果集组合成一个新的结果集。值得注意的是,集合运算要求参与运算的集合(即SELECT语句的结果)具有相同的列数和兼容的数据类型,并且这些列在逻辑上必须是可比较的(如,都是数值类型或都是字符串类型等)。 #### 二、集合运算的主要类型 SQL提供了三种基本的集合运算:并集(UNION)、交集(INTERSECT,注意并非所有数据库系统都支持)和差集(EXCEPT/MINUS,具体关键字取决于数据库系统)。 ##### 1. 并集(UNION) 并集运算用于合并两个或多个SELECT语句的结果集,去除重复的行。在SQL中,使用UNION关键字来实现。如果希望包含重复行,可以使用UNION ALL。 **语法示例**: ```sql SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; ``` 或者包含重复行: ```sql SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; ``` **应用场景**: 假设有两个表,一个是员工表(Employees),另一个是临时员工表(TempEmployees),两者都包含员工ID和姓名。如果你想获取所有员工(包括正式员工和临时员工,但不包括重复的员工)的列表,就可以使用UNION。 ##### 2. 交集(INTERSECT) 交集运算返回两个或多个SELECT语句结果集的共同部分,即同时出现在所有结果集中的行,且自动去除重复的行。需要注意的是,并非所有数据库系统都支持INTERSECT操作。 **语法示例(假设支持)**: ```sql SELECT column_name(s) FROM table1 INTERSECT SELECT column_name(s) FROM table2; ``` **应用场景**: 继续上面的例子,如果你想找出同时出现在正式员工表和临时员工表中的员工(即那些既是正式员工又是临时员工的员工),就可以使用INTERSECT(如果数据库支持)。 ##### 3. 差集(EXCEPT/MINUS) 差集运算返回存在于第一个SELECT语句结果集中但不在后续SELECT语句结果集中的行,也自动去除重复的行。不同的数据库系统可能使用不同的关键字,如EXCEPT(如SQL Server、PostgreSQL)或MINUS(如Oracle)。 **语法示例(以EXCEPT为例)**: ```sql SELECT column_name(s) FROM table1 EXCEPT SELECT column_name(s) FROM table2; ``` **应用场景**: 回到员工表的例子,如果你想找出所有正式员工但不在临时员工表中的员工,就可以使用EXCEPT(或相应的数据库关键字)。 #### 三、集合运算的注意事项 1. **列数和数据类型匹配**:参与集合运算的SELECT语句必须拥有相同数量的列,且每列的数据类型必须兼容或可隐式转换。 2. **排序和去重**:UNION和UNION ALL自动去除重复行(UNION ALL除外),但集合运算不保证结果的排序。如果需要排序,应使用ORDER BY子句对整个查询结果进行排序。 3. **性能考虑**:在处理大数据集时,集合运算可能会影响查询性能。优化查询,如使用索引、减少参与运算的数据量等,是提升性能的关键。 4. **空集和NULL值**:集合运算中,如果某个SELECT语句结果为空集,则整个集合运算的结果将受到影响(例如,UNION操作将返回另一个SELECT语句的结果)。同时,NULL值在集合运算中的处理方式也需要注意,因为NULL与任何值(包括NULL本身)的比较结果都是未知的。 #### 四、实际应用案例 假设你正在管理一个在线书店的数据库,有两个表:`books_in_stock`(库存书籍)和`books_on_order`(已订购书籍)。这两个表都包含书籍的ISBN和书名。 - **案例一:列出所有库存书籍和已订购书籍(去除重复)** 可以使用UNION来合并两个表的查询结果,去除重复书籍。 - **案例二:找出库存中但未被订购的书籍** 可以使用EXCEPT(或相应的数据库关键字)来找出存在于`books_in_stock`中但不在`books_on_order`中的书籍。 - **案例三:分析库存与订单书籍的交集** 如果数据库支持INTERSECT,可以找出同时存在于库存和订单中的书籍,这有助于了解哪些书籍是热销的。 #### 五、总结 集合运算是SQL中一项强大而灵活的功能,它允许我们以集合的视角处理数据,通过并集、交集和差集等操作,轻松实现复杂的数据分析和查询需求。在实际应用中,掌握集合运算不仅能够提升数据处理的效率,还能使查询语句更加简洁、直观。然而,也需要注意集合运算的注意事项,如列数和数据类型的匹配、性能考虑等,以确保查询的正确性和高效性。
上一篇:
7-1 表的加减法
下一篇:
表的加法——UNION
该分类下的相关小册推荐:
高性能的Postgres SQL
SQL基础教程(下)
PostgreSQL入门教程
SQL基础教程(上)