0Pricing
SQL Interview Prep · Pelajaran

Logika Tiga Nilai dan UNKNOWN

Mengapa NULL = NULL bukan TRUE dan bagaimana UNKNOWN menyebar melalui kondisi.

Logika Tiga Nilai dan UNKNOWN adalah pelajaran SQL Interview Prep 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 Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Mengapa NULL Membingungkan Kandidat

NULL merupakan penyebab utama jawaban salah dalam wawancara SQL. Jebakannya adalah memperlakukannya seperti nilai biasa, padahal NULL berarti 'tidak diketahui' atau 'hilang', bukan nol dan bukan string kosong.

Pewawancara menyukai hal ini karena sintaksnya terlihat benar, tetapi hasilnya salah tanpa terlihat. Mereka mungkin menunjukkan penyaring yang 'seharusnya' mengembalikan satu baris, lalu bertanya mengapa penyaring itu tidak mengembalikan apa pun.

Dalam pelajaran ini, Anda akan membangun model mental yang membantu menjawab setiap pertanyaan tentang NULL: logika tiga nilai. Setelah memahami bahwa perbandingan dapat menghasilkan TRUE, FALSE, atau UNKNOWN, sisanya akan mengikuti.

NULL Bukan Nilai

Kalimat paling penting untuk disampaikan dalam wawancara: NULL adalah ketiadaan nilai, bukan nilai itu sendiri.

Artinya, Anda tidak dapat membandingkannya dengan = seperti saat membandingkan angka. Basis data tidak mengetahui apakah dua hal yang tidak diketahui itu sama, sehingga tidak dapat menetapkannya sebagai TRUE atau FALSE.

  • NULL = 5 bukan FALSE, melainkan UNKNOWN
  • NULL = NULL bukan TRUE, melainkan UNKNOWN
  • NULL <> NULL juga menghasilkan UNKNOWN

Inilah sebabnya penyaring kesetaraan naif pada kolom yang dapat bernilai NULL diam-diam menghilangkan baris.

Logika Dua Nilai dan Tiga Nilai

Sebagian besar bahasa pemrograman menggunakan logika dua nilai: sebuah ekspresi hanya bernilai TRUE atau FALSE. SQL menambahkan hasil ketiga, UNKNOWN, setiap kali NULL terlibat dalam perbandingan.

Jadi, setiap predikat dalam SQL dapat dievaluasi menjadi salah satu dari tiga hasil: TRUE, FALSE, atau UNKNOWN. Klausa WHERE hanya mempertahankan baris ketika predikatnya tepat bernilai TRUE. UNKNOWN berperilaku seperti FALSE dalam penyaringan, tetapi secara logis bukan hal yang sama.

Pewawancara menguji apakah Anda memahami perbedaan ini, karena UNKNOWN berperilaku berbeda ketika digunakan dengan NOT dibandingkan dengan FALSE.

Penyaring yang Diam-Diam Menghilangkan Baris

Berikut adalah contoh klasik yang dibahas langkah demi langkah. Misalkan bonus terkadang bernilai NULL. Seorang perekrut bertanya: 'Kueri ini seharusnya mengembalikan semua orang yang bonusnya bukan 1000. Mengapa kueri ini melewati karyawan yang tidak memiliki bonus?'

Untuk baris yang bonus-nya NULL, bonus <> 1000 dievaluasi menjadi UNKNOWN, bukan TRUE. WHERE hanya mempertahankan baris yang bernilai TRUE, sehingga karyawan tersebut menghilang.

Solusinya adalah menangani NULL secara eksplisit, yang akan dibahas dalam pelajaran berikutnya. Untuk saat ini, pahami bahwa baris yang hilang merupakan hasil logika, bukan kesalahan.

SELECT name, bonus
FROM employees
WHERE bonus <> 1000;
-- Rows where bonus IS NULL are excluded:
-- NULL <> 1000 evaluates to UNKNOWN, not TRUE

NULL dalam Ekspresi AND

Logika tiga nilai mengubah perilaku AND. Hafalkan aturan ini agar Anda dapat menjawab pertanyaan tentang tabel kebenaran secara langsung.

  • TRUE AND UNKNOWN = UNKNOWN
  • FALSE AND UNKNOWN = FALSE
  • UNKNOWN AND UNKNOWN = UNKNOWN

Intuisinya: AND hanya memerlukan satu FALSE agar hasilnya pasti FALSE. Jadi, FALSE AND apa pun tetap bernilai FALSE. Namun, TRUE AND sesuatu yang tidak diketahui tetap tidak diketahui, karena sisi yang tidak diketahui itu masih dapat menghasilkan salah satu dari kedua kemungkinan.

-- If status = 'active' is TRUE but bonus = 100 is UNKNOWN:
SELECT *
FROM employees
WHERE status = 'active' AND bonus = 100;
-- Combined result is UNKNOWN, so the row is NOT returned

NULL dalam Ekspresi OR

OR merupakan kebalikan dari AND. Operator ini hanya memerlukan satu TRUE agar hasilnya pasti TRUE, sehingga TRUE mengesampingkan nilai yang tidak diketahui.

  • TRUE OR UNKNOWN = TRUE
  • FALSE OR UNKNOWN = UNKNOWN
  • UNKNOWN OR UNKNOWN = UNKNOWN

Jadi, sebuah baris tetap dapat memenuhi kondisi OR meskipun salah satu cabangnya tidak diketahui, selama cabang lainnya benar-benar bernilai TRUE. Ini adalah pertanyaan lanjutan yang sering muncul setelah pertanyaan tentang AND.

SELECT *
FROM employees
WHERE department = 'Sales' OR bonus = 100;
-- A Sales employee with NULL bonus:
-- TRUE OR UNKNOWN = TRUE, so the row IS returned

NOT Membalik TRUE/FALSE, tetapi Tidak Membalik UNKNOWN

Inilah bagian yang lebih halus dan biasanya disimpan pewawancara untuk terakhir. NOT membalik TRUE menjadi FALSE dan FALSE menjadi TRUE, tetapi NOT UNKNOWN tetap UNKNOWN.

Inilah sebabnya Anda tidak dapat sekadar membungkus kondisi yang gagal dengan NOT untuk membalik hasilnya. Jika bonus = 1000 bernilai UNKNOWN untuk baris NULL, maka NOT (bonus = 1000) juga bernilai UNKNOWN, dan baris tersebut tetap dikecualikan.

Negasi tidak memulihkan baris NULL. Hanya pengujian eksplisit IS NULL yang dapat melakukannya.

-- For a row where bonus IS NULL:
--   bonus = 1000        -> UNKNOWN
--   NOT (bonus = 1000)  -> UNKNOWN  (still excluded)
SELECT * FROM employees WHERE NOT (bonus = 1000);

Contoh: Jebakan NOT IN

Ini adalah salah satu teka-teki NULL yang paling sering ditanyakan. NOT IN dengan daftar yang berisi NULL mengembalikan tidak ada baris sama sekali, sehingga mengejutkan kandidat yang mengira operator tersebut hanya akan melewati NULL.

Di balik layar, x NOT IN (1, 2, NULL) diperluas menjadi x <> 1 AND x <> 2 AND x <> NULL. Perbandingan terakhir bernilai UNKNOWN, dan TRUE AND TRUE AND UNKNOWN menghasilkan UNKNOWN, sehingga tidak ada yang memenuhi syarat.

Alternatif yang aman adalah NOT EXISTS, yang tidak rentan terhadap masalah ini.

-- Returns ZERO rows if the subquery yields any NULL
SELECT name
FROM employees
WHERE manager_id NOT IN (SELECT manager_id FROM managers);

-- Each comparison against NULL becomes UNKNOWN,
-- and the AND-chain collapses to UNKNOWN for every row.

Mengapa UNKNOWN Berperilaku seperti FALSE dalam WHERE

Pertanyaan lanjutan yang umum adalah: 'Jika UNKNOWN bukan FALSE, mengapa baris tersebut dihilangkan seperti baris FALSE?'

Jawabannya tepat: WHERE, ON, dan HAVING semuanya menggunakan aturan untuk hanya mempertahankan TRUE. FALSE dan UNKNOWN sama-sama gagal dalam pengujian tersebut, sehingga untuk keperluan penyaringan keduanya terlihat sama.

Perbedaannya hanya terlihat pada negasi dan batasan CHECK. Batasan CHECK meloloskan baris ketika kondisinya TRUE atau UNKNOWN, sehingga NULL dapat melewati CHECK yang Anda kira akan memblokirnya.

-- CHECK passes on TRUE or UNKNOWN, so NULL salary is allowed:
-- CONSTRAINT salary_positive CHECK (salary > 0)
-- INSERT ... salary = NULL  -> NULL > 0 is UNKNOWN -> allowed

Contoh Lebih Mendalam: COUNT dan Kesenjangan Nilai Kebenaran

Satukan konsep-konsep ini melalui pertanyaan wawancara yang realistis. 'Kita memiliki 100 karyawan. SELECT COUNT(*) WHERE bonus = 100 mengembalikan 30, dan WHERE bonus <> 100 mengembalikan 50. Di mana 20 lainnya?'

Ke-20 karyawan yang hilang memiliki bonus NULL. Baik = 100 maupun <> 100 tidak bernilai TRUE untuk mereka; keduanya bernilai UNKNOWN, sehingga mereka tidak masuk ke salah satu penyaring.

Mengatakan 'jumlah kategori tersebut tidak sama dengan total karena NULL tidak memenuhi satu pun predikat' merupakan jawaban tepat yang diinginkan pewawancara.

SELECT
  COUNT(*) FILTER (WHERE bonus = 100)  AS eq_100,
  COUNT(*) FILTER (WHERE bonus <> 100) AS ne_100,
  COUNT(*) FILTER (WHERE bonus IS NULL) AS null_bonus,
  COUNT(*) AS total
FROM employees;

Poin Pembahasan Wawancara

Saat logika NULL dibahas, sampaikan poin-poin berikut untuk menunjukkan pengalaman tingkat lanjut:

  • NULL berarti tidak diketahui; perbandingan dengannya menghasilkan UNKNOWN.
  • SQL menggunakan logika tiga nilai: TRUE, FALSE, UNKNOWN.
  • WHERE, ON, dan HAVING hanya mempertahankan baris yang bernilai TRUE.
  • NOT UNKNOWN tetap bernilai UNKNOWN, sehingga negasi tidak memulihkan baris NULL.
  • NOT IN dengan NULL apa pun tidak mengembalikan baris; utamakan NOT EXISTS.

Sampaikan modelnya terlebih dahulu, lalu jelaskan tabel kebenarannya. Urutan ini menunjukkan bahwa Anda memahami alasannya, bukan sekadar triknya.

Uji Singkat

Uji pemahaman Anda tentang logika tiga nilai.

Rangkuman

Anda kini memiliki model mental inti tentang NULL:

  • NULL adalah sesuatu yang tidak diketahui, bukan nilai; jangan pernah membandingkannya dengan = atau <>.
  • SQL memiliki tiga nilai: predikat menghasilkan TRUE, FALSE, atau UNKNOWN.
  • Klausa penyaringan hanya mempertahankan TRUE; baris UNKNOWN menghilang seperti baris FALSE.
  • NOT membalik TRUE dan FALSE, tetapi membiarkan UNKNOWN tetap tidak berubah.
  • Jebakan NOT IN + NULL mengembalikan nol baris; gunakan NOT EXISTS.

Berikutnya: cara yang benar untuk menguji NULL dengan IS NULL, IS NOT NULL, dan operator kesetaraan yang aman terhadap NULL.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Logika Tiga Nilai dan UNKNOWN” gratis?

Ya — teks lengkap “Logika Tiga Nilai dan UNKNOWN” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Logika Tiga Nilai dan UNKNOWN”?

Mengapa NULL = NULL bukan TRUE dan bagaimana UNKNOWN menyebar melalui kondisi. Kamu berlatih SQL Interview Prep 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 Interview Prep?

Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep 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 “Logika Tiga Nilai dan UNKNOWN” 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 Interview Prep ini?

Ya. Setiap pelajaran SQL Interview Prep 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

  1. Logika Tiga Nilai dan UNKNOWN
  2. IS NULL, IS NOT NULL, dan Kesetaraan yang Aman terhadap NULL
  3. COALESCE, NULLIF, dan ISNULL
  4. NULL dalam Agregat, JOIN, dan DISTINCT
← Kembali ke SQL Interview Prep