SQL Between & In
1. 定义
慕课解释:
Between
和In
操作符一般与 Where 搭配,用于操作某个范围
内的数据。
2. 前言
本小节中,我们将一起学习 SQL Between
和 SQL In
的基本使用。
前面的小节中,我们学习了诸多运算符的使用,如 = 和 Like ,这些运算符都只能作用于单个条件值。有时候,数据筛选的条件是一个范围
,如找出年龄在18~24之间的用户
,为了更加方便地解决这些问题,SQL 提供了 Between 和 In 两个关键字。
提示: Between 和 In 不仅可以用在 int 等数值类型上,还可以用于字符和日期类型。
本小节测试数据如下,请先在数据库中执行:
DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
username varchar(20),
age int
);
INSERT INTO imooc_user(username,age) VALUES('pedro', 23), ('peter', 18), ('faker', 20), ('lucy', 29);
3. SQL Between
Between 必须与 And 一起使用,表示在某某与某某之间,常与 Where 搭配,用于查找某个范围内的数据。
SQL Between 的使用语法如下:
SELECT [col] FROM [table_name] WHERE [col] BETWEEN [val1] AND [val2];
其中table_name
代表数据表名称,col
代表字段名称,val
表示条件值,数字 1、2 表示多字条件值。
3.1 例1、单独使用 Between
Between 常用于查找某个范围
内的数据记录。
请书写 SQL 语句,找出imooc_user
表中年龄在 18~24 之间的用户。
分析:
分析题干可知年龄
是条件字段,而条件值是一个范围,即18~24
,符合 Between 和 And 的使用。
语句:
整理可得语句如下:
SELECT username, age FROM imooc_user WHERE age BETWEEN 18 AND 24;
查询结果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| peter | 18 |
| faker | 20 |
+----------+-----+
3.2 例2、Between 与 Not 搭配使用
Between 可以很好的处理范围操作,还可以与 Not 搭配表示不在某个范围内的记录。
请书写 SQL 语句,找出imooc_user
表中年龄不在 18~24 之间的用户。
分析:
与例1刚好相反,在符合 Between 和 And 的前提下,增加NOT
修饰即可。
语句:
整理可得语句如下:
SELECT username, age FROM imooc_user WHERE age NOT BETWEEN 18 AND 24;
查询结果如下:
+----------+-----+
| username | age |
+----------+-----+
| lucy | 29 |
+----------+-----+
提示: Between 不仅可以和 Select 搭配使用,还可以搭配 Update 与 Delete。
3.3 例3、Between 与 Delete 搭配使用
Between 也可与 Delete 搭配用于删除某个范围内的记录。
请书写 SQL 语句,删除imooc_user
表中年龄在18~24之间的用户。
分析:
几乎与例1一致,只需将 Select 改为 Delete 即可。
语句:
DELETE FROM imooc_user WHERE age BETWEEN 18 AND 24;
删除成功后,imooc_user 表中的数据如下:
+----------+-----+
| username | age |
+----------+-----+
| lucy | 29 |
+----------+-----+
4. SQL In
In 与 Between 都可以用于范围操作,与 Between 不同的是,In 表示某某之中
,且必须显示的罗列出所有的值。
SQL In 的语法如下:
SELECT [col] FROM [table_name] WHERE [col] IN (val...);
4.1 例4、连续范围内使用 In
In 常用于查找某个范围内的数据记录,但这个范围中的值都必须在()
中罗列出来。
请书写 SQL 语句,找出imooc_user
表中年龄在 18~24 之间的用户。
分析:
分析题干可知年龄是条件字段,而条件值是一个范围,即 18~24,可以用 In 表示该范围。
语句:
整理可得语句如下:
SELECT username, age FROM imooc_user WHERE age IN (18,19,20,21,22,23,24);
查询结果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| peter | 18 |
| faker | 20 |
+----------+-----+
4.2 例5、非连续范围内使用 In
In 不仅可以查找连续范围内的记录,也可查找非连续范围内的记录。
请书写 SQL 语句,找出imooc_user
表中年龄是 18 或 23 的用户。
分析:
与例4几乎一致,不过括号内的范围值从连续范围变成了(18,23)
。
语句:
整理可得语句如下:
SELECT username, age FROM imooc_user WHERE age IN (18,23);
查询结果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| peter | 18 |
+----------+-----+
4.3 例6、In 搭配 Not 使用
In 还可以搭配 Not 使用,查找不在范围内的数据记录。
请书写 SQL语句,找出imooc_user
表中年龄不是 18 或 23 的用户。
分析:
与例5恰好相反,只需在 In 前加上 Not 即可。
语句:
整理可得语句如下:
SELECT username, age FROM imooc_user WHERE age NOT IN (18,23);
查询结果如下:
+----------+-----+
| username | age |
+----------+-----+
| faker | 20 |
| lucy | 29 |
+----------+-----+
提示: In 也可与 Update、Delete 一起搭配使用,与 Between 相比,In 更加灵活,使用也更为广泛。
5. 个人经验
- 如果范围条件是连续的,优先考虑使用 Between,不仅语句更为简洁,而且性能更加优异。
- Between 只可用于连续范围的操作,而 In 还支持非连续范围的操作。
- 当 Delete 和 Update 使用范围操作是较
危险
的,容易引起批量数据更新和删除,在使用前,请仔细斟酌。