Materi
Validitas, dalam kerangka Pemerintah Inggris, adalah sejauh mana data berada dalam rentang dan format yang diharapkan; contohnya tanggal lahir tidak melewati hari ini dan disimpan sebagai tanggal, bukan teks bebas. Kontrak menuliskannya sebagai tiga jenis aturan: rentang (total lebih dari 0, tanggal di dalam periode data), format (tanggal yyyy-mm-dd yang ada di kalender), dan daftar nilai (status hanya baru, dikirim, selesai, atau batal).
Untuk tanggal yang disimpan sebagai teks, date(kolom) mengembalikan tanggal berbentuk yyyy-mm-dd. Teks yang sama sekali bukan tanggal menghasilkan NULL, tetapi tanggal mustahil tidak selalu ditolak: di SQLite yang dipakai latihan ini, date('2026-02-30') menghasilkan 2026-03-02. Karena itu hasil date() dibandingkan dengan teks aslinya memakai IS NOT. Operator itu memperlakukan NULL seperti nilai biasa, sehingga tanggal yang menghasilkan NULL dan tanggal yang digeser sama-sama tertangkap.
Daftar nilai diperiksa dengan NOT IN, dengan satu jebakan: tabel kebenaran operator IN di dokumentasi SQLite menunjukkan bahwa bila operand kirinya NULL, hasil NOT IN adalah NULL, bukan benar. Baris berstatus NULL lolos dari WHERE status NOT IN (...), jadi aturan wajib terisi ditulis terpisah dengan IS NULL. Perbandingan teks juga peka huruf besar: 'Selesai' bukan 'selesai'.
SELECT siswa_id, nilai
FROM rapor
WHERE nilai IS NULL OR nilai NOT BETWEEN 0 AND 100;