Lompati ke konten utama
Modul 4 · Pelajaran 1 dari 413/57 dalam kursus~8 min
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:

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 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:

SQL
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:

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

Ada juga NOT IN (...), yang melakukan kebalikannya:

SQL
-- 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:

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 inklusif di kedua titik akhir. Ini bekerja dengan sangat baik tanggal juga:

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

Cobalah

Latihan#sql.m4.l1.e1
Upaya: 0Memuat…

Tampilkan nama depan (first_name), nama belakang (last_name) dan gaji (gaji) karyawan dengan gaji antara 30000 dan 50000 inklusif. Tiga kolom.

Memuat editor…
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

Latihan#sql.m4.l1.e2
Upaya: 0Memuat…

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.

Memuat editor…
Tunjukkan petunjuk

WHERE department_id IN (1, 2, 4) adalah versi ringkas dari tiga OR.

Solusi tersedia setelah 3 upaya