モジュールのレッスン (1/4)
リストと範囲: IN と BETWEEN
前のモジュールでは、等式を使用して WHERE でフィルタリングしました。
比較: salary > 30000、department_id = 1、hired_on >= '2020-01-01'。
しかし、条件が 「値はこれら 5 つのうちの 1 つである必要があります」 になると、
連鎖した OR が積み重なる:
-- 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 には、これを読みやすくするための 2 つのショートカットが用意されています。
IN — 「これらの 1 つ」
IN (...) 演算子は値のリストを受け取り、次の場合は true を返します。
列はそれらのいずれかに等しい:
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);これは上記の OR と意味的には同じですが、はるかに読みやすくなっています。
これは自然に 「department_id が (1, 2, 3) にある」 と解釈されます。それも機能します
文字列と日付の場合:
SELECT name
FROM departments
WHERE city IN ('Milano', 'Roma');その逆を行う NOT IN (...) もあります。
-- 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 になります:
-- 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 は両方のエンドポイントで包括的です。非常にうまく機能します
日付も:
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM employees
WHERE hired_on BETWEEN '2020-01-01' AND '2020-12-31';試してみてください
給与が 30000 ~ 50000 の従業員の名 (first_name)、姓 (last_name)、および給与 (salal) を表示します。 3 つの列。
ヒントを表示
BETWEEN 30000 AND 50000 を使用します。AND で結合された 2 つの比較よりもコンパクトで読みやすくなります。
3 回の試行後に解決策が利用可能になります
復習演習
部門 1、2、または 4 で働く従業員の名 (first_name) と姓 (last_name) をリストします (IN を使用)。姓のアルファベット順に並べます。
ヒントを表示
WHERE 部門 ID IN (1, 2, 4) は、3 つの OR のコンパクト バージョンです。
3 回の試行後に解決策が利用可能になります