Traffine I/O

Bahasa Indonesia

2023-03-13

Pernyataan CASE dalam SQL

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.

sql
CASE expression
    WHEN expression1 THEN result1
    WHEN expression2 THEN result2
    ...
    ELSE result
END;

Berikut adalah contoh pernyataan CASE sederhana:

sql
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.

sql
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE result
END;

Berikut adalah contoh pernyataan CASE dicari:

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

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

sql
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.

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

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

sql
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.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!