Ekspresi CASE
Logika IF/THEN di dalam kueri.
Ekspresi CASE adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Logika Percabangan dalam SQL
Terkadang Anda perlu membuat kueri mengambil keputusan: jika ini, maka itu, jika tidak, yang lain. SQL menyediakan ekspresi CASE khusus untuk keperluan ini.
CASE memungkinkan Anda mengembalikan nilai yang berbeda berdasarkan kondisi, langsung di dalam SELECT. Anggap saja ini sebagai versi SQL dari rangkaian if/else.
SELECT name,
CASE WHEN price > 100 THEN 'expensive'
ELSE 'affordable'
END AS price_band
FROM products;Struktur CASE
Ekspresi CASE memiliki beberapa bagian:
WHEN condition THEN value— satu atau beberapa cabangELSE value— nilai cadangan opsionalEND— menutup ekspresi (wajib!)
SQL mengevaluasi cabang WHEN dari atas ke bawah dan mengembalikan nilai dari cabang pertama yang benar.
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
ENDCASE Mengembalikan Nilai
Gagasan utamanya: ekspresi CASE menghasilkan satu nilai untuk setiap baris. Karena menghasilkan nilai, Anda dapat menggunakannya di mana pun nilai diperbolehkan — dalam daftar SELECT, dalam WHERE, dalam ORDER BY, bahkan di dalam fungsi.
Di sini, ekspresi tersebut memberi label sederhana pada setiap pesanan.
SELECT order_id,
CASE WHEN shipped_at IS NOT NULL THEN 'shipped'
WHEN paid_at IS NOT NULL THEN 'paid'
ELSE 'pending'
END AS status
FROM orders;Kecocokan Pertama yang Dipilih
Urutan penting. SQL memeriksa setiap WHEN secara berurutan dan berhenti pada cabang pertama yang benar. Cabang berikutnya diabaikan meskipun juga cocok.
Di bawah ini, pesanan di atas 1000 adalah 'besar', bukan 'sedang', karena cabang pertama yang cocok dipilih.
SELECT order_id, total,
CASE WHEN total >= 1000 THEN 'large'
WHEN total >= 100 THEN 'medium'
ELSE 'small'
END AS size_band
FROM orders;Cabang ELSE
Cabang ELSE menampung semua kemungkinan lain. Jika tidak ada kondisi WHEN yang benar, CASE mengembalikan nilai ELSE.
Jika Anda menghilangkan ELSE dan tidak ada yang cocok, CASE mengembalikan NULL. Ini merupakan sumber umum NULL yang tidak terduga, jadi tambahkan ELSE secara eksplisit jika ingin nilai cadangan yang pasti.
SELECT name,
CASE WHEN stock = 0 THEN 'out of stock' END AS note
FROM products;
-- rows with stock > 0 get NULL in note (no ELSE)Kondisi Dapat Berupa Apa Saja
Kondisi WHEN hanyalah ekspresi logika — jenis yang sama seperti yang Anda tulis dalam klausa WHERE. Anda dapat menggunakan perbandingan, AND, OR, BETWEEN, IN, LIKE, dan lainnya.
SELECT email,
CASE WHEN country IN ('US','CA') AND age >= 18 THEN 'eligible'
WHEN email LIKE '%@test.com' THEN 'test account'
ELSE 'review'
END AS segment
FROM users;Tipe Hasil Harus Kompatibel
Setiap cabang CASE harus mengembalikan nilai dengan tipe yang kompatibel, karena kolom harus memiliki satu tipe. Mencampur teks dan angka akan menyebabkan kesalahan atau konversi tipe yang tidak terduga.
Jika Anda memerlukan angka dalam satu cabang dan teks dalam cabang lain, lakukan konversi secara eksplisit agar tipenya selaras.
SELECT product_id,
CASE WHEN on_sale THEN price * 0.9
ELSE price
END AS effective_price -- all branches numeric: good
FROM products;Menggunakan CASE dalam WHERE
Karena CASE menghasilkan nilai, Anda dapat membandingkan hasilnya dalam klausa WHERE. Ini berguna untuk aturan pemfilteran dinamis.
Namun, sering kali logika kondisi biasa dalam WHERE lebih jelas — gunakan CASE dalam WHERE hanya jika percabangan benar-benar membuat kondisi lebih sederhana.
SELECT *
FROM orders
WHERE CASE WHEN priority = 'high' THEN total > 0
ELSE total > 500
END;Menumpuk CASE
Anda dapat menempatkan CASE di dalam cabang CASE lain untuk menyatakan logika bertingkat. Cara ini berfungsi, tetapi ekspresi yang bertumpuk terlalu dalam sulit dibaca.
Jaga agar penumpukan tetap dangkal; jika bertambah panjang, kolom terpisah atau tabel pencarian biasanya lebih rapi.
SELECT order_id,
CASE WHEN region = 'EU' THEN
CASE WHEN total > 100 THEN 'EU big'
ELSE 'EU small' END
ELSE 'other'
END AS bucket
FROM orders;CASE dengan Fungsi Agregat
Pola yang ampuh: bungkus CASE di dalam fungsi agregat seperti SUM atau COUNT. Ini menghitung atau menjumlahkan baris secara bersyarat dalam satu kali pemrosesan — kadang disebut agregasi bersyarat atau tabel silang.
SELECT
COUNT(*) AS total_orders,
SUM(CASE WHEN status = 'shipped' THEN 1 ELSE 0 END) AS shipped,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending
FROM orders;CASE Mengembalikan NULL dengan Sengaja
Mengembalikan NULL dari sebuah cabang kadang tepat seperti yang Anda perlukan — misalnya untuk mengosongkan nilai yang tidak ingin Anda tampilkan, atau memasukkannya ke fungsi agregat berikutnya yang mengabaikan NULL.
Di sini, hanya pesanan besar yang mempertahankan totalnya; pesanan lainnya menjadi NULL sehingga AVG akan melewatinya.
SELECT order_id,
CASE WHEN total >= 1000 THEN total
ELSE NULL
END AS large_order_total
FROM orders;Pemeriksaan Singkat
Perhatikan ekspresi ini untuk sebuah baris dengan total = 1500:
CASE WHEN total >= 100 THEN 'medium' WHEN total >= 1000 THEN 'large' ELSE 'small' END
Nilai apa yang dikembalikannya?
Ringkasan: Ekspresi CASE
Anda telah mempelajari inti logika kondisional dalam SQL:
CASE WHEN ... THEN ... ELSE ... ENDmengembalikan satu nilai untuk setiap baris- Cabang diperiksa dari atas ke bawah; kecocokan pertama yang berlaku
- Jika
ELSEdihilangkan, hasilnyaNULLketika tidak ada yang cocok - Semua cabang harus mengembalikan tipe yang kompatibel
CASEdapat digunakan dalamSELECT,WHERE, dan di dalam fungsi agregat
Selanjutnya, kita akan membandingkan dua bentuk sintaksis CASE.
SELECT name,
CASE WHEN price > 100 THEN 'expensive'
WHEN price > 20 THEN 'mid'
ELSE 'cheap'
END AS tier
FROM products;Pertanyaan yang Sering Diajukan
Apakah pelajaran “Ekspresi CASE” gratis?
Ya — teks lengkap “Ekspresi CASE” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Ekspresi CASE”?
Logika IF/THEN di dalam kueri. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Ekspresi CASE” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Ekspresi CASE
- CASE Tersearched vs Sederhana
- Mengelompokkan dan Memberi Label Data
- CASE dalam ORDER BY dan Agregat