Belajar dengan membaca secara berurutan

Fungsi ④ — IF / IIF untuk Percabangan Satu Kondisi

Artikel keempat dari fungsi SQL. Mencabangkan sebuah nilai berdasarkan satu kondisi benar/salah dengan IF / IIF, bedanya dengan WHERE, mengkombinasikannya dengan LIKE dan AND, serta menumpuk ORDER BY / LIMIT — pada data staff dari CSV.

Data yang Dipakai di Artikel Ini — Tabel staff

Kita sudah membahas fungsi dalam tiga artikel sejauh ini; artikel ini dan dua berikutnya membahas cara mengganti apa yang ditampilkan berdasarkan sebuah kondisi. Dari nilai kolom yang sama, kamu bisa menempelkan label klasifikasi seperti "High" atau "Normal" tergantung apakah kondisinya terpenuhi, atau melipat beberapa nilai menjadi satu kolom hasil.

Sebelum latihan, mari pastikan definisi kolom dan sampel data dari tabel staff.

① Pakai PRAGMA table_info(staff); untuk memeriksa nama kolom, tipe, dan primary key.

② Pakai SELECT * FROM staff LIMIT 5; untuk melihat pratinjau 5 baris pertama.

SQL Editor

Jalankan query untuk melihat hasil

IF / IIF — Mengganti Nilai Berdasarkan Satu Kondisi

Fungsi paling dasar untuk mengganti nilai yang ditampilkan berdasarkan sebuah kondisi adalah IF / IIF. Sintaksnya ada di bawah, dan keduanya persis sama maknanya.

- MySQL: IF(kondisi, nilai jika benar, nilai jika salah)

- Konsol kursus ini / SQL Server: IIF(kondisi, nilai jika benar, nilai jika salah)

Konsol kursus ini tidak punya fungsi IF, jadi latihannya memakai IIF. Tidak seperti WHERE, ia tidak menyaring baris — hanya mengubah nilai kolom hasil, jadi kamu memakainya saat ingin "mempertahankan setiap baris tetapi mengubah label tampilan per nilai kolom".

Struktur IF / IIF — Mengganti Nilai pada Benar vs Salah
PemanggilanHasilIIF(100 < 200, 'T', 'F')'T'(kondisi TRUE)IIF(500 > 1000, 'T', 'F')'F'(kondisi FALSE)IIF(salary >= 5000000, 'High', 'Normal')evaluasi salary per baris→ 'High' atau 'Normal'
Jika kondisi TRUE argumen ke-2 dikembalikan, jika FALSE yang ke-3. Daripada menghapus baris seperti WHERE, bayangkan ini menukar nilai kolom hasil.
-- 1) Cek cepat dengan literal
SELECT IIF(100 < 200, 'T', 'F');   -- 'T'
SELECT IIF(500 > 1000, 'T', 'F');  -- 'F'

-- 2) Memakai kolom — 'HQ' jika city Tokyo, selainnya 'Branch'
SELECT name, city,
       IIF(city = 'Tokyo', 'HQ', 'Branch') AS office
FROM staff;

-- Referensi: di MySQL, pakai IF()
--   SELECT IF(city = 'Tokyo', 'HQ', 'Branch') FROM staff;

Bayangkan daftar staff untuk rapat eksekutif yang ingin "memberi label High untuk salary 5,000,000 atau lebih dan Normal untuk sisanya". (Penjelasan muncul setelah kamu menjalankannya dengan benar.)

① Dari tabel staff, ambil name, salary, dan `IIF(salary >= 5000000, 'High', 'Normal')` dengan alias `rank` — total 3 kolom.

SQL Editor

Jalankan query untuk melihat hasil

Perbedaan antara WHERE dan IF — Menghapus Baris vs Mengubah Nilai

WHERE dan IF sama-sama mengambil sebuah kondisi, tetapi efeknya pada hasil sama sekali berbeda.

- `WHERE`: hanya mempertahankan baris yang kondisinya TRUE, dan menghapus baris FALSE / NULL

- `IF` / `IIF`: mempertahankan setiap baris dan hanya menukar nilai kolom berdasarkan kondisi

Keduanya bisa dikombinasikan. Pola umumnya adalah "tampilkan hanya staff yang berbasis di Tokyo, dan bagi pay rank tiap orang menjadi High / Normal": pertama persempit baris dengan WHERE, lalu transformasi tampilan dengan IIF di daftar kolom SELECT.

Perbedaan antara WHERE dan IIF
WHEREIIFsimpan hanya baris yangkondisinya TRUEsimpan semua baris, hanyaganti nilai kolom→ jumlah baris berubah(hapus vertikal)→ jumlah baris tetap(transform horizontal)
WHERE mempersempit baris (penghapusan vertikal); IIF menukar nilai kolom (transformasi horizontal). Perannya independen dan saling melengkapi.
-- Mengkombinasikan WHERE dan IIF
-- 1) Pakai WHERE untuk menyimpan hanya staff yang berbasis di Osaka
-- 2) Pakai IIF untuk mengklasifikasikan salary 6,000,000 atau lebih sebagai 'Senior'
SELECT name, salary,
       IIF(salary >= 6000000, 'Senior', 'General') AS grade
FROM staff
WHERE city = 'Osaka';

Bayangkan kebutuhan "buat daftar pay rank untuk anggota yang berbasis di Tokyo".

① Dari tabel staff, ambil name, salary, dan `IIF(salary >= 5000000, 'High', 'Normal')` dengan alias `rank` — 3 kolom.

② Persempit ke baris yang `city`-nya `'Tokyo'`.

SQL Editor

Jalankan query untuk melihat hasil

Mengkombinasikan dengan LIKE dan AND, serta Menumpuk ORDER BY / LIMIT

Karena kondisi IIF menerima ekspresi yang sama dengan WHERE, kamu bisa mengkombinasikannya dengan LIKE (pencocokan pola) atau AND / OR (kondisi compound). Percabangan seperti "beri label Tanaka jika name memuat Tanaka" atau "ace jika 30+ dan berbasis di Tokyo" muat dalam satu baris.

AS alias pada kolom hasil juga bisa menjadi target `ORDER BY`, jadi mengurutkan berdasarkan kolom label yang dihasilkan IIF lalu membatasi baris dengan LIMIT adalah pola dasar untuk output laporan dalam praktik.

-- 1) IIF + LIKE: beri label 'Tanaka' jika surname-nya Tanaka
SELECT name,
       IIF(name LIKE '%Tanaka', 'Tanaka', 'Other') AS surname_check
FROM staff;

-- 2) IIF + AND: kondisi compound pada setara-umur + city
SELECT name, birthday, city,
       IIF(strftime('%Y', birthday) <= '1989' AND city = 'Osaka',
           'Osaka senior', 'Other') AS tag
FROM staff;

Bayangkan kebutuhan "tempelkan label khusus hanya pada staff bersurname Tanaka yang berbasis di Tokyo". Kamu akan mencoba menulis kondisi compound seperti `name LIKE '%Tanaka'` AND `city = 'Tokyo'` dalam satu IIF.

① Dari tabel staff, ambil name, city, dan `IIF(name LIKE '%Tanaka' AND city = 'Tokyo', 'Tokyo Tanaka', 'Other')` dengan alias `tag` — 3 kolom.

SQL Editor

Jalankan query untuk melihat hasil

Bayangkan kebutuhan "tampilkan top 3 berdasarkan salary sekaligus memberi anotasi label rank pada tiap orang".

① Dari tabel staff, ambil name, salary, dan `IIF(salary >= 5000000, 'High', 'Normal')` dengan alias `rank` — 3 kolom.

② Urutkan berdasarkan `salary` menurun dan batasi ke 3 baris pertama.

SQL Editor

Jalankan query untuk melihat hasil
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Manakah berikut ini yang dengan benar menjelaskan IIF(kondisi, X, Y)?

Soal 2Manakah perbedaan yang benar antara WHERE dan IIF?

Soal 3Apa penulisan ulang yang benar saat menjalankan IF(salary >= 5000000, 'High', 'Normal') milik MySQL di konsol kursus ini?