首页
技术小册
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基础教程(中)
### BETWEEN谓词——范围查询 在SQL(Structured Query Language,结构化查询语言)中,`BETWEEN`谓词是一种非常实用的工具,它允许我们轻松地进行范围查询。无论是筛选特定日期范围内的记录、查找价格区间内的商品,还是分析学生成绩分布,`BETWEEN`谓词都能以简洁高效的方式满足需求。本章将深入解析`BETWEEN`谓词的工作原理、使用场景、注意事项以及高级应用技巧,帮助读者掌握这一强大的SQL查询工具。 #### 一、BETWEEN谓词基础 `BETWEEN`谓词用于选取介于两个值之间的数据行(包括这两个值本身)。其基本语法如下: ```sql SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2; ``` 这里,`column_name`是你想要查询的列名,`table_name`是表名,`value1`和`value2`定义了查询范围的下限和上限。需要注意的是,`value1`应该小于或等于`value2`,否则查询可能不会返回预期结果或返回错误。 #### 二、使用场景示例 ##### 2.1 日期范围查询 假设我们有一个名为`orders`的表,记录了订单的详细信息,包括订单日期`order_date`。如果我们想找出2023年1月1日至2023年1月31日之间下的所有订单,可以使用以下SQL语句: ```sql SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31'; ``` ##### 2.2 价格区间筛选 在电商数据库中,`products`表可能包含产品的价格信息。若要查找价格在100元至500元之间的所有产品,可以这样做: ```sql SELECT * FROM products WHERE price BETWEEN 100 AND 500; ``` ##### 2.3 成绩分析 在教育管理系统中,`student_scores`表可能记录了每位学生的成绩。若要找出分数在80分到90分之间的所有学生记录,SQL查询如下: ```sql SELECT * FROM student_scores WHERE score BETWEEN 80 AND 90; ``` #### 三、注意事项 1. **包含性**:`BETWEEN`谓词是包含边界值的,即`value1`和`value2`都会被包含在查询结果中。 2. **数据类型匹配**:确保比较的值与列的数据类型相匹配。例如,如果列是日期类型,那么比较的值也应该是日期类型,或者使用可以隐式转换为日期类型的字符串。 3. **空值处理**:如果列中包含`NULL`值,这些行将不会被`BETWEEN`查询返回,因为`NULL`与任何值的比较结果都是未知的(`UNKNOWN`),而不是`TRUE`或`FALSE`。 4. **性能考虑**:对于大型数据库,确保查询的列上有适当的索引,以提高`BETWEEN`查询的效率。 5. **时间范围查询的精度**:当处理时间或日期时间类型的数据时,注意时间部分的精度。如果列包含时间信息,而查询只指定了日期,可能需要使用函数(如`DATE()`)来确保比较的一致性。 #### 四、高级应用技巧 ##### 4.1 结合其他条件 `BETWEEN`谓词可以与其他WHERE子句条件结合使用,以实现更复杂的查询逻辑。例如,查找2023年1月内销售额超过1000元的所有订单: ```sql SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31' AND total_sales > 1000; ``` ##### 4.2 使用NOT BETWEEN 通过添加`NOT`关键字,可以选取不在指定范围内的数据。例如,查找价格不在100元至500元之间的产品: ```sql SELECT * FROM products WHERE price NOT BETWEEN 100 AND 500; ``` ##### 4.3 动态范围查询 在某些情况下,查询的范围可能需要根据外部输入动态确定。虽然SQL本身不支持直接的变量赋值,但可以通过应用程序代码(如Python、Java等)构建带有参数的SQL语句,或者使用数据库支持的参数化查询功能来实现。 ##### 4.4 跨表范围查询 当需要基于另一个表中的数据来确定查询范围时,可以使用子查询或JOIN操作。例如,假设我们有一个`price_tiers`表定义了不同的价格区间和对应的优惠策略,我们可以根据这个表来动态查询符合特定价格区间的产品: ```sql SELECT p.* FROM products p JOIN price_tiers pt ON p.price BETWEEN pt.min_price AND pt.max_price; ``` #### 五、总结 `BETWEEN`谓词是SQL中用于范围查询的强大工具,它简化了在指定区间内检索数据的操作。通过掌握其基础语法、使用场景、注意事项以及高级应用技巧,我们可以更加灵活高效地构建SQL查询,满足各种复杂的数据分析需求。无论是处理日常的业务查询,还是进行深入的数据分析,`BETWEEN`谓词都是不可或缺的一部分。希望本章内容能帮助读者更好地理解和应用`BETWEEN`谓词,提升SQL查询的效率和准确性。
上一篇:
LIKE谓词——字符串的部分一致查询
下一篇:
IS NULL、IS NOT NULL——判断是否为NULL
该分类下的相关小册推荐:
SQL基础教程(上)
高性能的Postgres SQL
SQL基础教程(下)
PostgreSQL入门教程