Materi
Transformasi seperti JOIN, filter, dan deduplikasi mengubah jumlah baris. Rekonsiliasi membuktikan perubahan itu sesuai rencana: setiap baris sumber yang lolos aturan tiba di hasil tepat sekali, dan setiap baris yang dibuang punya aturan yang menjelaskannya. Pemeriksaan paling dasar membandingkan COUNT(*) sumber dan COUNT(*) hasil.
Jumlah yang sama belum bukti. Dokumentasi SQLite tentang SELECT menjelaskan dua perilaku JOIN yang bisa saling menutupi. JOIN biasa hanya meneruskan baris yang menemukan pasangan, sehingga baris tanpa pasangan hilang; LEFT JOIN menambahkan satu baris berisi NULL untuk setiap baris kiri tanpa pasangan. Sebaliknya, baris yang menemukan dua pasangan muncul dua kali. Tiga baris hilang dan tiga baris tergandakan menghasilkan jumlah yang persis sama. Karena itu rekonsiliasi dilanjutkan per kunci: kunci yang ada di sumber tetapi tidak di hasil, dan kunci yang kemunculannya di hasil lebih banyak daripada di sumber.
Kode awal pelajaran ini memuat tahap hasil dari pipeline laporan penjualan per kota: pesanan berstatus selesai digabung ke tabel pelanggan untuk mengambil kota. Tulis kueri pemeriksamu di bawah CTE itu.
WITH s AS (SELECT kelas_id, COUNT(*) AS n FROM pendaftaran GROUP BY kelas_id),
h AS (SELECT kelas_id, COUNT(*) AS n FROM laporan_kelas GROUP BY kelas_id)
SELECT s.kelas_id, s.n AS di_sumber, h.n AS di_hasil
FROM s JOIN h ON h.kelas_id = s.kelas_id
WHERE h.n <> s.n;