MySQL - BETWEEN 运算符
MySQL - BETWEEN 运算符
Section titled “MySQL - BETWEEN 运算符”用于范围过滤的 BETWEEN 运算符
Section titled “用于范围过滤的 BETWEEN 运算符”MySQL 中的 BETWEEN 运算符是一个逻辑运算符,用于 WHERE 子句中,以选择指定范围内的值。它是包含性的,这意味着它包括范围的起始值和结束值。
使用 BETWEEN 是一种更具可读性和简洁性的方式来编写“大于或等于”与“小于或等于”条件的组合。表达式 column_name BETWEEN value1 AND value2 等同于 column_name >= value1 AND column_name <= value2。
SELECT column_name(s)FROM table_nameWHERE column_name BETWEEN value1 AND value2;这里,value1 是范围的下限,value2 是上限。两者都包含在搜索中。
BETWEEN 的实际示例
Section titled “BETWEEN 的实际示例”让我们使用 customers 表进行演示。首先,回顾一下数据:
SELECT * FROM customers;
-- Result:-- +----+----------+-----+-----------+----------+-- | id | name | age | address | salary |-- +----+----------+-----+-----------+----------+-- | 1 | Ramesh | 32 | Ahmedabad | 2000.00 |-- | 2 | Khilan | 25 | Delhi | 1500.00 |-- | 3 | Kaushik | 23 | Kota | 2000.00 |-- | 4 | Chaitali | 25 | Mumbai | 6500.00 |-- | 5 | Hardik | 27 | Bhopal | 8500.00 |-- | 6 | Komal | 22 | Hyderabad | 4500.00 |-- | 7 | Muffy | 24 | Indore | 10000.00 |-- +----+----------+-----+-----------+----------+示例:按数字范围过滤
Section titled “示例:按数字范围过滤”让我们找出年龄在 25 到 30 之间(含 25 和 30)的客户。
SELECT * FROM customersWHERE age BETWEEN 25 AND 30;| id | name | age | address | salary |
|---|---|---|---|---|
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
否定范围:NOT BETWEEN
Section titled “否定范围:NOT BETWEEN”要选择超出指定范围的值,您可以使用 NOT BETWEEN 运算符。
示例:过滤数字范围之外的数据
Section titled “示例:过滤数字范围之外的数据”让我们找出薪水不在 2000.00 到 8000.00 之间的客户。
SELECT * FROM customersWHERE salary NOT BETWEEN 2000.00 AND 8000.00;| id | name | age | address | salary |
|---|---|---|---|---|
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
BETWEEN 与其他运算符的组合使用
Section titled “BETWEEN 与其他运算符的组合使用”您可以将 BETWEEN 与 AND、OR 和 IN 等其他逻辑运算符结合使用,以创建更复杂的过滤器。
示例:BETWEEN 与 IN 的结合使用
Section titled “示例:BETWEEN 与 IN 的结合使用”查找薪水在 4000 到 10000 之间,并且居住在 ‘Hyderabad’ 或 ‘Bhopal’ 的客户。
SELECT * FROM customersWHERE (salary BETWEEN 4000 AND 10000) AND address IN ('Hyderabad', 'Bhopal');| id | name | age | address | salary |
|---|---|---|---|---|
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | Hyderabad | 4500.00 |
在 UPDATE 和 DELETE 语句中使用 BETWEEN
Section titled “在 UPDATE 和 DELETE 语句中使用 BETWEEN”BETWEEN 运算符对于修改或删除特定范围内的记录也非常有用。
示例:UPDATE 与 BETWEEN 的结合使用
Section titled “示例:UPDATE 与 BETWEEN 的结合使用”让我们给所有年龄在 22 到 24 岁之间的客户增加薪水。
UPDATE customersSET salary = salary * 1.10 -- 涨薪 10%WHERE age BETWEEN 22 AND 24;要验证更改,您可以运行 SELECT 查询。您会看到 Komal (22)、Kaushik (23) 和 Muffy (24) 的薪水已增加。
日期和时间的常见陷阱
Section titled “日期和时间的常见陷阱”使用 BETWEEN 处理 DATETIME 或 TIMESTAMP 列时,一个常见的陷阱是:BETWEEN '2023-10-01' AND '2023-10-31' 这样的查询会被解释为 BETWEEN '2023-10-01 00:00:00' AND '2023-10-31 00:00:00'。这将排除 10 月 31 日午夜之后发生的任何记录。
对于日期范围,更安全、推荐的方法是结合使用 >= 和 <:
-- 日期范围的安全方法SELECT * FROM eventsWHERE event_timestamp >= '2023-10-01' AND event_timestamp < '2023-11-01';从应用程序代码中使用 BETWEEN 运算符
Section titled “从应用程序代码中使用 BETWEEN 运算符”在应用程序中使用 BETWEEN 时,关键是使用预处理语句来传递范围值。这可以防止 SQL 注入。
示例:在 Python 中安全地查询范围
Section titled “示例:在 Python 中安全地查询范围”import mysql.connectorfrom mysql.connector import Error
def find_customers_in_age_range(min_age, max_age): try: connection = mysql.connector.connect( host='localhost', database='TUTORIALS', user='root', password='password' ) cursor = connection.cursor(dictionary=True)
sql_query = "SELECT id, name, age FROM customers WHERE age BETWEEN %s AND %s"
# 将值作为元组传递给 execute 方法进行参数化 cursor.execute(sql_query, (min_age, max_age)) records = cursor.fetchall()
print(f"Found {cursor.rowcount} customers between ages {min_age} and {max_age}:") for row in records: print(row)
except Error as e: print(f"Error: {e}") finally: if connection and connection.is_connected(): cursor.close() connection.close()
# Call the function with a specific age rangefind_customers_in_age_range(25, 30)