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)

UrutanKlausa
1FROM
2WHERE
3GROUP BY
4Fungsi Agregasi (SUM, COUNT, AVG)
5HAVING
6SELECT
7ORDER BY
8LIMIT

Operator WHERE

OperatorContohKegunaan
=, <>, >, >=, <, <=WHERE nilai > 500000Perbandingan dasar
AND / ORWHERE kota = 'Jakarta' AND nilai > 500000Menggabungkan kondisi
LIKEWHERE nama LIKE 'Budi%'Pencarian pola teks (wildcard %)
BETWEENWHERE tanggal BETWEEN '2026-01-01' AND '2026-01-31'Rentang nilai (inklusif)

Fungsi Agregasi

FungsiKegunaan
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

JOINHasil
INNER JOINHanya baris yang cocok di kedua tabel
LEFT JOINSeluruh tabel kiri + yang cocok dari kanan (NULL jika tidak cocok)
RIGHT JOINSeluruh tabel kanan + yang cocok dari kiri
FULL OUTER JOINSeluruh 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.