Pelajari bagaimana SQL benar-benar berjalan, satu gagasan setiap kali
Setiap pelajaran memuat dataset kecil dan satu query, membuka langkah yang perlu dilihat, memberi tahu apa yang perlu diperhatikan, dan memberi satu perubahan untuk dicoba.
Cara query berjalan
Kondisi dan NULL
- AND berarti semua kondisi harus TRUE
- AND dihitung lebih dulu daripada OR
- IN, LIKE dan BETWEEN hanyalah kondisi biasa
- NULL bukan FALSE, tetapi juga bukan TRUE
- Mengecek NULL harus dengan IS NULL
- COALESCE memberi nilai pengganti untuk NULL
Menghitung nilai
- CASE memilih cabang pertama yang bernilai TRUE
- Casting dan fungsi tanggal bisa dipakai di SELECT maupun WHERE
Urutan dan batas
- ORDER BY berjalan belakangan, dan urutan baris bernilai sama tidak pasti
- Kamu bisa menentukan posisi NULL saat mengurutkan
- LIMIT tanpa ORDER BY hasilnya untung-untungan
Join
- INNER JOIN hanya menyimpan baris yang punya pasangan
- LEFT JOIN menyimpan semua baris kiri dan mengisi yang kosong dengan NULL
- Join bisa melipatgandakan baris
- WHERE pada tabel kanan mengubah LEFT JOIN menjadi INNER JOIN
- Mencari baris tanpa pasangan dengan anti-join
- Join berjalan dari kiri ke kanan, satu langkah per join
Pengelompokan
- GROUP BY mengumpulkan baris, lalu setiap grup menjadi satu baris
- Mengelompokkan dengan dua kunci
- Agregat tanpa GROUP BY menghasilkan satu grup
- count(*), count(col) dan count(DISTINCT col) menghitung hal yang berbeda
- WHERE menyaring baris, HAVING menyaring grup
- Mencari duplikat dengan GROUP BY dan HAVING
- DISTINCT sama dengan GROUP BY tanpa agregat
Menyusun query
- CTE adalah langkah bernama yang berjalan lebih dulu
- Subquery yang berdiri sendiri berjalan lebih dulu
- EXISTS mengecek setiap baris satu per satu
- NOT IN dengan NULL di daftarnya tidak meloloskan baris apa pun
- UNION menumpuk dua hasil query
- CTE rekursif berjalan per putaran
Window function
- Window function melihat baris lain tanpa meringkasnya
- LAG membaca nilai dari baris sebelumnya
- Membuat peringkat, lalu menyaringnya dengan QUALIFY
- Menyimpan satu baris per grup dengan ROW_NUMBER