Pelajaran modul (1/4)
Daftar dan rentang: DALAM dan ANTARA
Pada modul sebelumnya Anda memfilter dengan WHERE menggunakan persamaan dan
perbandingan: salary > 30000, department_id = 1, hired_on >= '2020-01-01'.
Namun ketika kondisinya menjadi "nilainya harus salah satu dari lima ini",
tumpukan ORs yang dirantai:
-- 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 menawarkan dua cara pintas untuk membuat ini mudah dibaca.
DI — "salah satunya"
Operator IN (...) mengambil daftar nilai dan mengembalikan true jika
kolom sama dengan _salah satu darinya:
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);Ini secara semantik identik dengan ORs di atas, tetapi jauh lebih mudah dibaca: itu
dibaca secara alami sebagai "dimana department_id berada di (1, 2, 3)". Ini juga berhasil
dengan string dan tanggal:
SELECT name
FROM departments
WHERE city IN ('Milano', 'Roma');Ada juga NOT IN (...), yang melakukan kebalikannya:
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM employees
WHERE department_id NOT IN (1, 2);ANTARA — "antara A dan B, keduanya inklusif"
Jika kondisinya berupa rentang kontinu (angka, tanggal), sebagai ganti
menulis column >= A AND column <= B Anda memiliki 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 inklusif di kedua titik akhir. Ini bekerja dengan sangat baik
tanggal juga:
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM employees
WHERE hired_on BETWEEN '2020-01-01' AND '2020-12-31';Cobalah
Tampilkan nama depan (first_name), nama belakang (last_name) dan gaji (gaji) karyawan dengan gaji antara 30000 dan 50000 inklusif. Tiga kolom.
Tunjukkan petunjuk
Gunakan ANTARA 30000 DAN 50000 — lebih ringkas dan mudah dibaca dibandingkan dua perbandingan yang digabungkan dengan AND.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Cantumkan nama depan (first_name) dan nama belakang (last_name) karyawan yang bekerja di departemen 1, 2 atau 4 (gunakan IN). Urutkan berdasarkan abjad berdasarkan nama belakang.
Tunjukkan petunjuk
WHERE department_id IN (1, 2, 4) adalah versi ringkas dari tiga OR.
Solusi tersedia setelah 3 upaya