Cara bermain Lubang NULL
- Baca instruksi level. Arena menampilkan tabel dengan lubang untuk tiap NULL, lalu hasil query-mu dan hasil yang dicari (putus-putus).
- Ketik query di editor. Kalau ada
WHERE, tiap baris diberi nilai TRUE, FALSE, atau UNKNOWN, per kondisi dan untuk keseluruhannya. - Baris dengan nilai akhir UNKNOWN tidak masuk ke hasil, sama seperti FALSE. Di level
GROUP BY, arena juga menggambar keranjang tiap kelompok. - Tekan Cek jawaban atau Ctrl + Enter. Yang dicek isi hasilnya, jadi
poin <> 0danpoin NOT IN (0)sama-sama benar kalau barisnya sama. - Kalau buntu, buka Petunjuk. Level yang sudah selesai tetap tercentang di browser yang sama.
Yang kamu pelajari
- Level 1
= NULL dan IS NULL
= NULLselalu UNKNOWN. Untuk mencari lubang, pakaiIS NULL. - Level 2
NULL bukan 0
0 adalah nilai.
IS NOT NULLmenyertakan 0. - Level 3
Logika tiga nilai
Perbandingan dengan NULL menghasilkan UNKNOWN, dan WHERE hanya meloloskan TRUE.
- Level 4
NULL bukan teks kosong
''adalah teks kosong yang bisa dibandingkan dengan=. - Level 5
COALESCE
Mengganti NULL dengan nilai pengganti, di
SELECTmaupunWHERE. - Level 7
COUNT(kolom) vs COUNT(*)
COUNT(kolom)melewati NULL,COUNT(*)tidak. - Level 8
NULL di AVG
AVGmelewati NULL, jadi pembaginya hanya baris yang terisi. - Level 9
NULL dari LEFT JOIN
Baris tanpa pasangan berisi NULL di semua kolom tabel kanan.
- Level 10
NOT IN dan NULL
NULL di daftar
NOT INmembuat semua baris UNKNOWN.
UNKNOWN dibuang seperti FALSE
Poin Budi belum tercatat (NULL). Apakah poin <> 0 untuk Budi? Tidak ada yang tahu, jadi hasilnya UNKNOWN. WHERE hanya meloloskan TRUE, jadi Budi hilang dari hasil, walau poinnya jelas tidak tercatat sebagai 0.
UNKNOWN menular: NOT UNKNOWN tetap UNKNOWN, UNKNOWN AND TRUE juga UNKNOWN. Hanya dua hal yang bisa memutusnya: UNKNOWN OR TRUE jadi TRUE, dan UNKNOWN AND FALSE jadi FALSE. Karena itu poin <> 0 OR poin IS NULL menemukan Budi.
Tanya jawab
Apakah harus daftar akun untuk bermain?
Tidak. Semua level bisa dimainkan tanpa akun. Kemajuanmu disimpan di browser yang kamu pakai, jadi akan hilang kalau data browser dihapus.
Apakah query-nya dijalankan di database sungguhan?
Tidak. Query diurai dan dijalankan oleh mesin SQL kecil di browser dengan data contoh, jadi tidak ada data yang bisa rusak.
Kapan memakai NULL dan kapan memakai 0 atau teks kosong?
NULL untuk nilai yang belum diketahui atau tidak berlaku, misalnya nomor telepon yang belum diisi. 0 dan '' untuk nilai yang memang diketahui: poinnya nol, atau catatannya sengaja dikosongkan. Mencampur keduanya membuat COUNT dan AVG memberi angka yang berbeda.
Apakah IFNULL atau ISNULL bisa dipakai?
IFNULL hanya ada di MySQL dan SQLite, ISNULL di SQL Server, NVL di Oracle. COALESCE ada di semua database dan bisa menerima lebih dari dua nilai, jadi game ini hanya memakai COALESCE.
Kenapa Oracle menganggap teks kosong sama dengan NULL?
Itu perilaku khusus Oracle. Di MySQL, PostgreSQL, SQLite, dan SQL Server, '' adalah teks biasa yang berbeda dari NULL, dan game ini mengikuti mereka.