Judul: Pernyataan CASE dalam SQL
Pernyataan CASE dalam SQL beroperasi dengan cara yang mirip dengan alur kendali if-then-else dalam sebagian besar bahasa pemrograman. Ini memungkinkan logika kondisional digunakan dalam kueri SQL, sehingga memungkinkan pengembalian nilai tertentu atau eksekusi ekspresi yang berbeda berdasarkan kondisi tertentu.
Misalnya, Anda dapat menggunakan pernyataan CASE dalam pernyataan SELECT untuk mengubah tampilan data berdasarkan nilai kolom pada setiap baris.
Jenis-Jenis Pernyataan CASE: Sederhana dan Dicari
Ada dua jenis ekspresi CASE dalam SQL: sederhana dan dicari.
Ekspresi CASE Sederhana
Ekspresi CASE sederhana membandingkan suatu ekspresi dengan serangkaian ekspresi sederhana untuk menentukan hasilnya. Ini mirip dengan pemeriksaan kesetaraan.
CASE expression
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
ELSE result
END;
Berikut adalah contoh pernyataan CASE sederhana:
SELECT
customer_id,
CASE country
WHEN 'USA' THEN 'Domestik'
ELSE 'Internasional'
END AS tipe_pelanggan
FROM customers;
Pernyataan ini memeriksa kolom country
untuk setiap baris dalam tabel customers
. Jika negara adalah 'USA', maka akan mengembalikan 'Domestik'. Jika tidak, akan mengembalikan 'Internasional'. Nilai-nilai baru tersebut akan dikembalikan dalam kolom yang diberi nama 'tipe_pelanggan'.
Ekspresi CASE Dicari
Ekspresi CASE dicari mengevaluasi serangkaian ekspresi Boolean untuk menentukan hasilnya. Ini mirip dengan penggunaan logika boolean.
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END;
Berikut adalah contoh pernyataan CASE dicari:
SELECT
customer_id,
CASE
WHEN total_pembelian > 10000 THEN 'Premium'
WHEN total_pembelian > 5000 THEN 'Gold'
ELSE 'Reguler'
END AS kategori_pelanggan
FROM customers;
Pernyataan ini memeriksa kolom total_pembelian
untuk setiap baris dalam tabel customers
. Jika total_pembelian
lebih besar dari 10.000, maka akan mengembalikan 'Premium'. Jika total_pembelian
lebih besar dari 5.000 (tetapi tidak lebih dari 10.000), maka akan mengembalikan 'Gold'. Untuk semua kasus lainnya, akan mengembalikan 'Reguler'. Nilai-nilai baru tersebut akan dikembalikan dalam kolom yang diberi nama kategori_pelanggan
.
Ingat, dalam ekspresi CASE dicari, kondisi dievaluasi sesuai urutan penulisannya. Jika kondisi pertama (total_pembelian > 10000
) bernilai benar, pernyataan CASE akan mengembalikan 'Premium' dan tidak akan mengevaluasi kondisi selanjutnya (total_pembelian > 5000
).
CASE dengan ORDER BY
Anda dapat menggunakan pernyataan CASE dalam klausa ORDER BY untuk mengurutkan hasil kueri SQL secara kondisional. Kombinasi yang kuat ini memungkinkan Anda mengontrol secara dinamis urutan pengurutan berdasarkan kriteria tertentu.
Berikut adalah contoh penggunaan pernyataan CASE dalam klausa ORDER BY:
SELECT
customer_id,
country,
total_pembelian
FROM
customers
ORDER BY
CASE
WHEN country = 'USA' THEN total_pembelian
ELSE NULL
END DESC;
Pada contoh ini, pernyataan CASE mengurutkan pelanggan dari Amerika Serikat berdasarkan total pembelian mereka secara menurun. Pelanggan dari negara lain tidak termasuk dalam pengurutan ini dan akan muncul di akhir hasil, karena nilai NULL diurutkan terakhir saat urutan DESC.
CASE dengan UPDATE
Ketika digunakan dalam pernyataan UPDATE, pernyataan CASE dapat memberikan logika kondisional untuk nilai baru yang akan diatur. Hal ini berguna ketika nilai baru tergantung pada nilai yang sudah ada dalam baris atau nilai dalam kolom lain.
Berikut adalah contoh penggunaan pernyataan CASE dalam pernyataan UPDATE:
UPDATE
customers
SET
kategori_pelanggan = CASE
WHEN total_pembelian > 10000 THEN 'Premium'
WHEN total_pembelian > 5000 THEN 'Gold'
ELSE 'Reguler'
END;
Pada contoh ini, pernyataan CASE memperbarui kolom kategori_pelanggan
berdasarkan nilai dalam kolom total_pembelian
untuk setiap baris. Pelanggan dengan total pembelian lebih dari 10.000 dikategorikan sebagai 'Premium', mereka dengan total pembelian lebih dari 5.000 (tetapi tidak lebih dari 10.000) dikategorikan sebagai 'Gold', dan lain-lain dikategorikan sebagai 'Reguler'.
Ingatlah untuk menggunakan klausa WHERE dalam pernyataan UPDATE Anda ketika Anda tidak ingin memperbarui setiap baris dalam tabel. Misalnya, Anda mungkin ingin memperbarui hanya baris-baris di mana kategori_pelanggan
adalah NULL.
UPDATE
customers
SET
kategori_pelanggan = CASE
WHEN total_pembelian > 10000 THEN 'Premium'
WHEN total_pembelian > 5000 THEN 'Gold'
ELSE 'Reguler'
END
WHERE
kategori_pelanggan IS NULL;
Ini mencegah pembaruan data yang sudah ada dalam kolom kategori_pelanggan
. Dalam kueri di atas, hanya baris-baris di mana kategori_pelanggan
adalah NULL yang akan diperbarui.
Menggunakan NULL dengan CASE
Dalam pernyataan CASE, NULL diperlakukan secara berbeda dari nilai lainnya. Jika Anda menguji untuk nilai NULL dengan operator kesetaraan (seperti = atau !=), hasilnya selalu NULL atau tidak diketahui. Untuk memeriksa nilai NULL, Anda harus menggunakan operator IS NULL
dan IS NOT NULL
dalam kondisi WHEN Anda.
Selain itu, jika tidak ada satu pun kondisi dalam klausa WHEN yang terpenuhi dan tidak ada klausa ELSE, pernyataan CASE akan mengembalikan NULL.
Berikut adalah contoh penggunaan pernyataan CASE untuk menggantikan nilai NULL:
SELECT
customer_id,
CASE
WHEN email IS NULL THEN 'Email tidak tersedia'
ELSE email
END AS email
FROM customers;
Pada contoh ini, pernyataan CASE memeriksa apakah kolom email
adalah NULL untuk setiap baris dalam tabel customers
. Jika iya, maka mengembalikan 'Email tidak tersedia'. Jika tidak, maka mengembalikan email yang sebenarnya.
Berikut adalah contoh lain di mana pernyataan CASE digunakan untuk menggantikan nilai NULL dengan rata-rata:
SELECT
product_id,
CASE
WHEN price IS NULL THEN (SELECT AVG(price) FROM products WHERE price IS NOT NULL)
ELSE price
END AS price
FROM
products;
Pada contoh ini, pernyataan CASE memeriksa apakah kolom price
adalah NULL untuk setiap baris dalam tabel products
. Jika iya, maka mengembalikan rata-rata harga dari semua harga non-NULL. Jika tidak, maka mengembalikan harga yang sebenarnya.