模块 4 · 第 1 课(共 4)课程中的13/57~8 min
模块课程(1/4)
列表和范围:IN 和 BETWEEN
在前面的模块中,您使用等式和 WHERE 进行过滤
比较:salary > 30000、department_id = 1、hired_on >= '2020-01-01'。
但是当条件变成*“该值必须是这五个之一”*时,
链式 OR 堆积起来:
SQL
-- Heavy and fragile: adding a department means touching the query
SELECT first_name, last_name
FROM employees
WHERE department_id = 1
OR department_id = 2
OR department_id = 3;SQL 提供了两个快捷方式来使其可读。
IN —“其中一个”
IN (...) 运算符采用值列表并返回 true,如果
列等于其中的任何一个:
SQL
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);它在语义上与上面的 OR 相同,但更具可读性:
自然地读作 "where department_id is in (1, 2, 3)"。它也有效
带有字符串和日期:
SQL
SELECT name
FROM departments
WHERE city IN ('Milano', 'Roma');还有 NOT IN (...),其作用相反:
SQL
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM employees
WHERE department_id NOT IN (1, 2);BETWEEN —“A 和 B 之间,包括两者”
当条件是连续范围(数字、日期)时,而不是
写 column >= A AND column <= B 你有 BETWEEN A AND B:
SQL
-- Employees with a salary between 30000 and 50000 (both inclusive):
SELECT first_name, last_name, salary
FROM employees
WHERE salary BETWEEN 30000 AND 50000;BETWEEN 在两个端点上都是包含的。它可以很好地与
日期也:
SQL
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM employees
WHERE hired_on BETWEEN '2020-01-01' AND '2020-12-31';尝试一下
锻炼#sql.m4.l1.e1
尝试:0加载中...
显示工资在 30000 到 50000 之间的员工的名字 (first_name)、姓氏 (last_name) 和工资 (salary)。三列。
正在加载编辑器...
显示提示
使用 BETWEEN 30000 AND 50000 — 比通过 AND 连接的两个比较更紧凑、更易读。
3 次尝试后可用的解决方案
复习练习
锻炼#sql.m4.l1.e2
尝试:0加载中...
列出在部门 1、2 或 4 工作的员工的名字 (first_name) 和姓氏 (last_name)(使用 IN)。按姓氏字母顺序排列。
正在加载编辑器...
显示提示
WHERE Department_id IN (1, 2, 4) 是三个 OR 的紧凑版本。
3 次尝试后可用的解决方案