Chuyển đến nội dung chính
Mô-đun 4 · Bài học 1 trong tổng số 413/57 trong khóa học~8 min
Bài học theo mô-đun (1/4)

Danh sách và phạm vi: IN và BETWEEN

Trong các mô-đun trước bạn đã lọc bằng WHERE bằng cách sử dụng các đẳng thức và so sánh: salary > 30000, department_id = 1, hired_on >= '2020-01-01'. Nhưng khi điều kiện trở thành "giá trị phải là một trong năm giá trị này", OR bị xích chồng chất lên nhau:

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 cung cấp hai phím tắt để làm cho phần này có thể đọc được.

TRONG - "một trong số này"

Toán tử IN (...) lấy danh sách các giá trị và trả về true nếu cột bằng any trong số chúng:

SQL
SELECT first_name, last_name, department_id
FROM   employees
WHERE  department_id IN (1, 2, 3);

Nó giống hệt về mặt ngữ nghĩa với OR ở trên, nhưng dễ đọc hơn nhiều: nó đọc tự nhiên là "nơi department_id nằm trong (1, 2, 3)". Nó cũng hoạt động với chuỗi và ngày tháng:

SQL
SELECT name
FROM   departments
WHERE  city IN ('Milano', 'Roma');

Ngoài ra còn có NOT IN (...), điều ngược lại:

SQL
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM   employees
WHERE  department_id NOT IN (1, 2);

GIỮA - "giữa A và B, bao gồm cả hai"

Khi điều kiện là một phạm vi liên tục (số, ngày), thay vì đang viết column >= A AND column <= B bạn có 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 bao gồm trên cả hai điểm cuối. Nó hoạt động rất độc đáo với ngày quá:

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';

Hãy thử nó

tập thể dục#sql.m4.l1.e1
Nỗ lực: 0Đang tải…

Hiển thị họ (tên), họ (last_name) và mức lương (mức lương) của nhân viên có mức lương từ 30000 đến 50000. Ba cột.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng BETWEEN 30000 AND 50000 — nhỏ gọn và dễ đọc hơn hai phép so sánh được nối bằng AND.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#sql.m4.l1.e2
Nỗ lực: 0Đang tải…

Liệt kê tên (first_name) và họ (last_name) của nhân viên làm việc tại phòng ban 1, 2 hoặc 4 (dùng IN). Sắp xếp theo thứ tự abc theo họ.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

WHERE Department_id IN (1, 2, 4) là phiên bản rút gọn của ba OR.

Giải pháp khả dụng sau 3 lần thử