首页
技术小册
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基础教程(中)
### 6-2 谓词:SQL查询的筛选利器 在SQL(Structured Query Language,结构化查询语言)中,谓词扮演着至关重要的角色,它们是构建查询语句时用于筛选数据行(记录)的条件表达式。通过谓词,我们可以精确地指定哪些数据应该被包含在查询结果中,哪些应该被排除在外。掌握谓词的使用,是深入学习SQL并高效利用数据库资源的基础。本章将详细探讨SQL中的各类谓词,包括比较谓词、逻辑谓词、范围谓词、空值谓词、集合谓词以及子查询作为谓词的应用,并通过实例展示其在实际查询中的应用。 #### 6.2.1 比较谓词 比较谓词是最基础也是使用最广泛的谓词类型,它们用于比较两个值或表达式是否相等、不等、大于、小于等。常见的比较谓词包括: - `=`(等于) - `<>` 或 `!=`(不等于) - `>`(大于) - `<`(小于) - `>=`(大于等于) - `<=`(小于等于) **示例**:查询员工表中薪资高于5000的所有员工。 ```sql SELECT * FROM 员工表 WHERE 薪资 > 5000; ``` #### 6.2.2 逻辑谓词 逻辑谓词用于组合多个条件表达式,实现更复杂的逻辑判断。主要的逻辑谓词有: - `AND`(与):所有条件必须同时满足。 - `OR`(或):至少一个条件满足即可。 - `NOT`(非):否定条件的结果。 **示例**:查询员工表中既在销售部门又在2023年加入的所有员工。 ```sql SELECT * FROM 员工表 WHERE 部门 = '销售' AND 入职年份 = 2023; ``` #### 6.2.3 范围谓词 范围谓词用于指定一个值的范围,虽然它们本质上可以通过比较谓词组合实现,但SQL提供了专门的语法来简化表达。常用的范围谓词是`BETWEEN ... AND ...`,它包含边界值。 **示例**:查询库存量在10到50之间的商品。 ```sql SELECT * FROM 商品表 WHERE 库存量 BETWEEN 10 AND 50; ``` #### 6.2.4 空值谓词 在数据库中,`NULL`代表未知或缺失的值。为了处理这些值,SQL引入了专门的空值谓词: - `IS NULL`:检查值是否为`NULL`。 - `IS NOT NULL`:检查值是否不为`NULL`。 **示例**:查询没有分配部门编号的员工。 ```sql SELECT * FROM 员工表 WHERE 部门编号 IS NULL; ``` #### 6.2.5 集合谓词 集合谓词用于测试某个值是否存在于一个集合中,或者一个集合是否满足某个条件。SQL中常用的集合谓词包括: - `IN`:检查某个值是否在一个列出的值集合中。 - `NOT IN`:检查某个值是否不在一个列出的值集合中。 - `EXISTS`:用于子查询,检查子查询是否返回至少一行数据。 - `NOT EXISTS`:检查子查询是否不返回任何数据。 **示例**:查询在部门ID为1或2的员工。 ```sql SELECT * FROM 员工表 WHERE 部门ID IN (1, 2); ``` **使用EXISTS的示例**:查询有订单的客户信息。 ```sql SELECT * FROM 客户表 c WHERE EXISTS ( SELECT 1 FROM 订单表 o WHERE o.客户ID = c.客户ID ); ``` #### 6.2.6 子查询作为谓词 子查询是一个嵌套在另一个查询中的SELECT语句,它可以作为谓词使用,在WHERE子句、HAVING子句或SELECT列表中执行复杂的条件判断。子查询作为谓词时,经常与`IN`、`EXISTS`、`ANY`、`ALL`等集合谓词结合使用。 **示例**:查询薪资高于公司平均薪资的员工。 ```sql SELECT * FROM 员工表 WHERE 薪资 > ( SELECT AVG(薪资) FROM 员工表 ); ``` #### 实战技巧与最佳实践 1. **优化查询性能**:尽量避免在WHERE子句中使用复杂的子查询,特别是在大数据集上,因为这会显著降低查询效率。考虑使用连接(JOINs)或临时表来重构查询。 2. **清晰表达逻辑**:使用逻辑谓词时,确保逻辑表达式的清晰性和准确性,避免产生逻辑错误导致查询结果不符合预期。 3. **利用索引**:对于频繁查询的列,考虑创建索引以加速查询速度。尤其是当使用范围谓词或子查询作为谓词时,索引的效果尤为明显。 4. **注意NULL值的处理**:在设计数据库和编写查询时,要特别注意NULL值的处理。使用`IS NULL`或`IS NOT NULL`来明确指定对NULL值的查询条件。 5. **理解数据分布**:在编写使用集合谓词的查询前,了解数据的分布情况可以帮助你选择合适的谓词类型(如`IN`与`EXISTS`的选择),从而优化查询性能。 通过本章的学习,您应该能够熟练掌握SQL中的各类谓词,并在实际查询中灵活运用它们来筛选和过滤数据。谓词是SQL查询语句的精髓之一,掌握它们将使您能够编写出更加高效、灵活的查询语句,从而更有效地利用数据库资源。
上一篇:
转换函数
下一篇:
什么是谓词
该分类下的相关小册推荐:
高性能的Postgres SQL
PostgreSQL入门教程
SQL基础教程(下)
SQL基础教程(上)