








Mari Bicara tentang Wawancara (Bagian 2) 😎
Di postingan sebelumnya kita bahas soft skills, metodologi STAR, dan Excel. Itu adalah dasar. Sekarang kita lanjut ke SQL.
Jika Anda sudah menguasai Excel dengan baik, Anda sudah memahami dasar-dasarnya: bagaimana data terhubung, masalah apa yang muncul saat penggabungan, bagaimana pengelompokan bekerja. Transisi ke SQL pada awalnya pada dasarnya adalah 5 perintah: SELECT, FROM, WHERE, JOIN, GROUP BY. Fungsi window dan tabel sementara berguna, tetapi pada tahap awal tidak kritis.
Sekarang ke intinya. Masalah utama bukan pada sintaksis. Masalahnya ada pada blok yang tidak membuat query gagal. Kode berjalan, interpreter diam, tetapi hasilnya tidak seperti yang diharapkan pewawancara. Di sinilah banyak yang gagal.
1️⃣NOT IN + NULL: diam tanpa data
Di SQL: NULL ≠ kosong ≠ 0. Yang belajar Python tahu: nol adalah nol, NULL adalah kekosongan, ketiadaan. Ingatlah itu.
Tugas: temukan pengguna yang tidak ada dalam daftar hitam.
❌
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked)Kelihatannya benar. Tapi jika di blocked ada satu baris dengan user_id = NULL, hasilnya: 0 baris. SQL tidak bisa membandingkan dengan NULL dan diam-diam mengembalikan kosong.
✅
SELECT * FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM blocked b
WHERE b.user_id = u.id
)Omong-omong, NOT EXISTS juga lebih cepat: ambil id, pergi ke tabel kedua, temukan kecocokan pertama, berhenti. NOT IN memindai tabel dari atas ke bawah seluruhnya. Pada tabel besar perbedaannya signifikan.
2️⃣ LEFT JOIN yang diam-diam menjadi INNER JOIN
Tentang tipe JOIN akan kita bahas detail di postingan berikutnya. Sekarang inti jebakannya.
❌
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE o.status = 'completed'Apa yang terjadi: WHERE membunuh baris NULL dari tabel kanan. Pelanggan tanpa pesanan lenyap. LEFT JOIN berubah menjadi INNER JOIN. Hasilnya meleset.
✅
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
ON c.id = o.customer_id
AND o.status = 'completed'Satu baris dengan AND. Perbedaannya mendasar.
3️⃣AVG berbohong dengan indah
Ini tugas. 10 baris penjualan. Tiga di antaranya NULL. Berapa yang dikembalikan AVG? Rata-rata dari 7, bukan 10. Jika nilainya mirip dengan kenyataan, jebakannya sulit dikenali. Angkanya realistis, tapi terdistorsi.
❌
SELECT AVG(salary) FROM employees✅
SELECT AVG(COALESCE(salary, 0)) FROM employeesCOALESCE: menemukan NULL, ganti dengan 0. Bisa juga tanpa itu, tapi jelaskan pada pewawancara bahwa Anda memahami perilaku AVG dan menerimanya secara sadar. Kedua opsi akan diterima 👌
4️⃣Urutan eksekusi: jebakan utama
Kita tulis: SELECT → FROM → WHERE → GROUP BY.
Dieksekusi: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
Tidak logis? Banget 🤷♀️
❌
SELECT category, AVG(sales) AS avg_sales
FROM orders
WHERE avg_sales > 1000
GROUP BY categoryAlias avg_sales belum ada pada tahap WHERE. Sistem tidak tahu field ini.
✅
SELECT category, AVG(sales) AS avg_sales
FROM orders
GROUP BY category
HAVING AVG(sales) > 1000HAVING adalah filter setelah pengelompokan. Akan dibahas lebih detail di postingan terpisah.
5️⃣Lupa sintaks? Jangan panik
Itu terjadi: grogi, sudah lama tidak menyentuh topik. Ya, siapa yang tidak pernah. Katakan langsung: "Saya paham logikanya, bisa jelaskan langkah-langkahnya. Sintaks tepatnya akan saya cari di Google." Spesialis yang waras akan menghargai itu. Memahami logika itu satu hal. Mencari fungsi di Google = 30 detik.
Bonus terakhir: pertanyaan pertama saat tes = "DBMS apa yang Anda gunakan?".
DATE_TRUNC — PostgreSQL. DATE_FORMAT — MySQL. Query yang benar untuk database yang salah = error di tempat yang tidak terduga.
Di postingan SQL berikutnya: Retention dan kohort. Dan besok postingan serta artikel tentang studi kasus tim saya dengan perusahaan Grand-Alpha. Mereka bergerak di bidang pakan hewan.
Pertanyaan untuk Anda. Apakah Anda pernah mengalami lupa jawaban dan benar-benar tidak ingat? Bagaimana Anda bertindak dalam situasi itu? 👇
#sql
@data_dzen
Komentar
0Belum ada komentar.
Masuk untuk ikut berdiskusi.