SQL Academy · Pelajaran

Ungkapan CASE

Logik IF/THEN di dalam pertanyaan.

Pelajaran 1 daripada 413 langkah

Ungkapan CASE ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Logik Percabangan dalam SQL

Adakalanya anda memerlukan pertanyaan untuk membuat keputusan: jika ini, maka itu, jika tidak, perkara lain. SQL menyediakan ungkapan CASE khusus untuk tujuan ini.

CASE membolehkan anda mengembalikan nilai yang berbeza berdasarkan syarat, terus dalam SELECT. Anggap ia sebagai versi SQL bagi rangkaian if/else.

SELECT name,
       CASE WHEN price > 100 THEN 'expensive'
            ELSE 'affordable'
       END AS price_band
FROM products;

Struktur CASE

Ungkapan CASE mempunyai beberapa bahagian:

  • WHEN condition THEN value — satu atau lebih cabang
  • ELSE value — nilai sandaran pilihan
  • END — menutup ungkapan (wajib!)

SQL menilai cabang WHEN dari atas ke bawah dan mengembalikan nilai cabang pertama yang benar.

CASE WHEN condition1 THEN result1
     WHEN condition2 THEN result2
     ELSE default_result
END

CASE Mengembalikan Nilai

Idea utamanya: ungkapan CASE menilai kepada satu nilai bagi setiap baris. Oleh sebab ia menghasilkan nilai, anda boleh menggunakannya di mana-mana tempat yang menerima nilai — dalam senarai SELECT, dalam WHERE, dalam ORDER BY, malah di dalam fungsi.

Di sini, ia melabelkan setiap pesanan dengan status yang ringkas.

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;

Padanan Pertama Diutamakan

Urutan penting. SQL menyemak setiap WHEN mengikut turutan dan berhenti pada cabang benar yang pertama. Cabang seterusnya diabaikan walaupun cabang itu juga sepadan.

Di bawah, pesanan melebihi 1000 ialah 'besar', bukan 'sederhana', kerana cabang yang sepadan dahulu diutamakan.

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 merangkumi semua keadaan. Jika tiada syarat WHEN yang benar, CASE mengembalikan nilai ELSE.

Jika anda meninggalkan ELSE dan tiada apa-apa yang sepadan, CASE mengembalikan NULL. Ini ialah punca biasa NULL yang tidak dijangka, jadi tambahkan ELSE yang jelas apabila anda mahukan nilai sandaran yang ditetapkan.

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)

Syarat Boleh Jadi Apa-apa

Syarat WHEN hanyalah ungkapan logik — jenis yang sama seperti yang anda tulis dalam klausa WHERE. Anda boleh menggunakan perbandingan, AND, OR, BETWEEN, IN, LIKE dan sebagainya.

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;

Jenis Hasil Mestilah Serasi

Setiap cabang CASE mestilah mengembalikan nilai daripada jenis yang serasi, kerana lajur perlu mempunyai satu jenis. Mencampurkan teks dan nombor akan menyebabkan ralat atau penukaran jenis yang tidak dijangka.

Jika anda memerlukan nombor dalam satu cabang dan teks dalam cabang yang lain, tukar jenis secara jelas supaya jenisnya sepadan.

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

Oleh sebab CASE menghasilkan nilai, anda boleh membandingkan hasilnya dalam klausa WHERE. Ini berguna untuk peraturan penapisan dinamik.

Namun, selalunya logik syarat biasa dalam WHERE lebih jelas — gunakan CASE dalam WHERE hanya apabila percabangan itu benar-benar memudahkan syarat.

SELECT *
FROM orders
WHERE CASE WHEN priority = 'high' THEN total > 0
           ELSE total > 500
      END;

CASE Bersarang

Anda boleh meletakkan CASE di dalam cabang CASE yang lain untuk menyatakan logik berlapis. Cara ini berfungsi, tetapi ungkapan yang bersarang terlalu dalam sukar dibaca.

Pastikan sarangannya tidak terlalu dalam; jika menjadi panjang, lajur berasingan atau jadual carian biasanya lebih kemas.

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 Agregat

Satu corak yang berkuasa ialah membalut CASE di dalam agregat seperti SUM atau COUNT. Cara ini mengira atau menjumlahkan baris secara bersyarat dalam satu laluan sahaja — kadangkala disebut pengagregatan bersyarat atau jadual pangsi.

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 daripada sesuatu cabang kadangkala memang perkara yang diperlukan — contohnya untuk mengosongkan nilai yang tidak mahu dipaparkan, atau memberikannya kepada agregat kemudian yang mengabaikan NULL.

Di sini, hanya pesanan besar mengekalkan jumlahnya; yang lain menjadi NULL supaya AVG melangkaunya.

SELECT order_id,
       CASE WHEN total >= 1000 THEN total
            ELSE NULL
       END AS large_order_total
FROM orders;

Semakan Pantas

Pertimbangkan ungkapan ini untuk baris dengan total = 1500:

CASE WHEN total >= 100 THEN 'medium' WHEN total >= 1000 THEN 'large' ELSE 'small' END

Apakah nilai yang dipulangkannya?

Imbas Kembali: Ungkapan CASE

Anda telah mempelajari asas logik bersyarat dalam SQL:

  • CASE WHEN ... THEN ... ELSE ... END mengembalikan satu nilai bagi setiap baris
  • Cabang diperiksa dari atas ke bawah; padanan pertama dipilih
  • Jika ELSE ditinggalkan, NULL terhasil apabila tiada padanan
  • Semua cabang mesti mengembalikan jenis yang serasi
  • CASE boleh digunakan dalam SELECT, WHERE dan dalam fungsi agregat

Seterusnya, kita akan membandingkan dua bentuk sintaks CASE.

SELECT name,
       CASE WHEN price > 100 THEN 'expensive'
            WHEN price > 20  THEN 'mid'
            ELSE 'cheap'
       END AS tier
FROM products;
Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
46
Pelajaran
183

Soalan Lazim

Adakah pelajaran “Ungkapan CASE” percuma?

Ya — teks penuh “Ungkapan CASE” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Ungkapan CASE”?

Logik IF/THEN di dalam pertanyaan. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Ungkapan CASE” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Ungkapan CASE
  2. CASE Carian berbanding CASE Ringkas
  3. Mengumpulkan dan Melabel Data
  4. CASE dalam ORDER BY dan Agregat
← Kembali ke SQL Academy