Appendix B: Cheat Sheet SQL
Kapan dan Kenapa Memakai Appendix Ini
Appendix ini dirancang untuk dibuka berdampingan dengan editor SQL kamu (misalnya DBeaver atau pgAdmin) saat sedang menulis query, bukan untuk dibaca berurutan. Pakai halaman ini ketika kamu lupa urutan klausa yang benar, ragu perbedaan WHERE dan HAVING, atau butuh mengingat kembali sintaks JOIN maupun window function secara cepat tanpa membuka ulang Bab 9 sampai 13 secara lengkap. Struktur di bawah mengikuti urutan logis dari dasar (SELECT, WHERE) hingga lanjutan (CTE, window function), sesuai urutan pembelajaran pada Bagian III Handbook ini.
Struktur Dasar Query
SELECT kolom1, kolom2
FROM nama_tabel
WHERE kondisi
GROUP BY kolom
HAVING kondisi_agregasi
ORDER BY kolom ASC/DESC
LIMIT jumlah;
Urutan Eksekusi Sebenarnya (Bukan Urutan Penulisan)
| Urutan | Klausa |
| 1 | FROM |
| 2 | WHERE |
| 3 | GROUP BY |
| 4 | Fungsi Agregasi (SUM, COUNT, AVG) |
| 5 | HAVING |
| 6 | SELECT |
| 7 | ORDER BY |
| 8 | LIMIT |
Operator WHERE
| Operator | Contoh | Kegunaan |
| =, <>, >, >=, <, <= | WHERE nilai > 500000 | Perbandingan dasar |
| AND / OR | WHERE kota = 'Jakarta' AND nilai > 500000 | Menggabungkan kondisi |
| LIKE | WHERE nama LIKE 'Budi%' | Pencarian pola teks (wildcard %) |
| BETWEEN | WHERE tanggal BETWEEN '2026-01-01' AND '2026-01-31' | Rentang nilai (inklusif) |
Fungsi Agregasi
| Fungsi | Kegunaan |
| SUM(kolom) | Menjumlahkan nilai |
| COUNT(*) / COUNT(kolom) | Menghitung baris (COUNT(kolom) abaikan NULL) |
| AVG(kolom) | Menghitung rata-rata (abaikan NULL) |
CASE WHEN
SELECT nama,
CASE
WHEN nilai < 100000 THEN 'Kecil'
WHEN nilai <= 500000 THEN 'Sedang'
ELSE 'Besar'
END AS kategori
FROM pesanan;
Jenis JOIN
| JOIN | Hasil |
| INNER JOIN | Hanya baris yang cocok di kedua tabel |
| LEFT JOIN | Seluruh tabel kiri + yang cocok dari kanan (NULL jika tidak cocok) |
| RIGHT JOIN | Seluruh tabel kanan + yang cocok dari kiri |
| FULL OUTER JOIN | Seluruh baris dari kedua tabel |
SELECT a.kolom, b.kolom
FROM tabel_a a
JOIN tabel_b b ON a.id = b.id;
CTE (Common Table Expression)
WITH nama_cte AS (
SELECT ...
)
SELECT * FROM nama_cte;
Window Function
SELECT nama, nilai,
ROW_NUMBER() OVER (ORDER BY nilai DESC) AS nomor_urut,
RANK() OVER (PARTITION BY kategori ORDER BY nilai DESC) AS peringkat
FROM pesanan;
Menangani NULL
SELECT COALESCE(kolom, 0) AS kolom_tanpa_null FROM tabel;
Catatan Penting
- Nilai teks selalu diapit tanda kutip satu (
'teks'), nama kolom/tabel tidak.
- WHERE tidak bisa memakai hasil fungsi agregasi; gunakan HAVING untuk itu.
- Setiap kolom di SELECT tanpa fungsi agregasi wajib ada di GROUP BY.
- RIGHT JOIN jarang dipakai; LEFT JOIN dengan tabel ditukar menghasilkan hasil yang setara.