Kamus SQL · Gratis

53 perintah SQL, lengkap dengan query dan hasilnya.

Dari SELECT sampai JOIN, CTE, dan window function. Tiap perintah dijelaskan dalam bahasa Indonesia, dan semua contoh query sudah dijalankan di tabel contoh yang sama, jadi kamu bisa lihat hasilnya baris per baris.

Data contoh Semua contoh memakai 3 tabel ini: departemen, karyawan, penjualan

Tabel departemen

idnama_deptlokasi
1 Keuangan Jakarta
2 Marketing Jakarta
3 IT Bandung
4 Legal Surabaya

Tabel karyawan

idnamadept_idkotagajitgl_masukatasan_id
1 Andi Pratama 3 Bandung 12500000 2019-03-11 NULL
2 Bunga Lestari 1 Jakarta 9800000 2020-07-01 NULL
3 Candra Wijaya 3 Bandung 8200000 2021-02-15 1
4 Dewi Anggraini 2 Jakarta 7500000 2022-05-09 6
5 Eko Saputra 1 Jakarta 6900000 2023-01-16 2
6 Fajar Nugroho 2 Surabaya 11000000 2018-09-03 NULL
7 Gita Permata 3 Jakarta 8200000 2023-08-21 1
8 Hendra Gunawan NULL Medan 5500000 2024-04-02 NULL

Tabel penjualan

idtanggalkaryawan_idprodukkategoriqtyharga
1 2026-01-05 4 Laptop Elektronik 2 8500000
2 2026-01-12 6 Printer Elektronik 1 2300000
3 2026-01-20 4 Kursi Kantor Furnitur 5 1200000
4 2026-02-03 6 Laptop Elektronik 1 8500000
5 2026-02-14 4 Meja Kerja Furnitur 3 1750000
6 2026-02-25 5 Kertas A4 ATK 20 55000
7 2026-03-02 6 Kursi Kantor Furnitur 4 1200000
8 2026-03-10 4 Printer Elektronik 2 2300000
9 2026-03-18 5 Kertas A4 ATK 30 55000
10 2026-03-27 6 Monitor Elektronik 3 1900000
Bab 01

Dasar Query

Mengambil kolom, memberi nama baru, mengurutkan, dan membatasi jumlah baris.

Bab 02

Filter Data

Menyaring baris dengan WHERE dan operator logikanya.

Bab 03

Agregat & Grouping

Menghitung, menjumlah, dan meringkas data per kelompok.

Bab 04

Gabung Tabel (JOIN)

Menggabungkan beberapa tabel berdasarkan kolom yang saling terhubung.

Bab 05

Fungsi Teks, Angka & Tanggal

Merapikan teks, membulatkan angka, mengubah tipe data, dan mengambil bagian tanggal.

Bab 06

Logika & NULL

Membuat kolom bersyarat dan menangani nilai kosong.

Bab 07

Subquery & CTE

Query di dalam query, supaya pertanyaan bertingkat bisa dijawab dalam satu kali jalan.

Bab 08

Window Function

Ranking, total berjalan, dan membandingkan baris tanpa meringkas data.

Bab 09

Membuat & Mengubah Data

Membuat tabel, menambah, mengubah, dan menghapus baris.

Konsep

Urutan SQL menjalankan query

Query ditulis mulai dari SELECT, tapi database mengerjakannya mulai dari FROM. Ini sebabnya alias di SELECT tidak bisa dipakai di WHERE.

  1. FROM / JOINTentukan tabel sumber dan gabungkan.
  2. WHERESaring baris.
  3. GROUP BYKelompokkan baris.
  4. HAVINGSaring kelompok.
  5. SELECTPilih kolom, hitung ekspresi, beri alias.
  6. DISTINCTBuang baris kembar.
  7. ORDER BYUrutkan hasil.
  8. LIMITBatasi jumlah baris.
Resep

Pola query yang sering dipakai

Gabungan beberapa perintah untuk pertanyaan yang sering muncul di kantor.

Top 1 per kelompok

query.sql
WITH urut AS (
  SELECT kategori, produk, qty * harga AS omzet,
         ROW_NUMBER() OVER (PARTITION BY kategori ORDER BY qty * harga DESC) AS rn
  FROM penjualan
)
SELECT kategori, produk, omzet FROM urut WHERE rn = 1;

Transaksi terbesar di setiap kategori. Ganti rn = 1 dengan rn <= 3 untuk Top 3.

Cari data duplikat

query.sql
SELECT produk, COUNT(*) AS jumlah
FROM penjualan
GROUP BY produk
HAVING COUNT(*) > 1;

Nilai yang muncul lebih dari sekali. Tambahkan kolom lain di GROUP BY untuk mengecek kombinasi yang kembar.

Persentase terhadap total

query.sql
SELECT kategori,
       SUM(qty * harga) AS omzet,
       ROUND(100.0 * SUM(qty * harga) / SUM(SUM(qty * harga)) OVER (), 1) AS persen
FROM penjualan
GROUP BY kategori;

Porsi omzet tiap kategori. SUM(...) OVER () menghitung total keseluruhan tanpa subquery.

Data yang tidak punya pasangan

query.sql
SELECT d.nama_dept
FROM departemen AS d
LEFT JOIN karyawan AS k ON k.dept_id = d.id
WHERE k.id IS NULL;

Departemen yang belum punya karyawan. Pola LEFT JOIN + IS NULL ini disebut anti join.

Hitung bersyarat dalam satu baris

query.sql
SELECT COUNT(*) AS total,
       SUM(CASE WHEN kota = 'Jakarta' THEN 1 ELSE 0 END) AS di_jakarta,
       SUM(CASE WHEN gaji >= 10000000 THEN 1 ELSE 0 END) AS gaji_10jt
FROM karyawan;

Beberapa hitungan dengan syarat berbeda sekaligus, mirip COUNTIFS di Excel.

Pertumbuhan bulan ke bulan (%)

query.sql
WITH b AS (
  SELECT SUBSTRING(tanggal, 1, 7) AS bulan, SUM(qty * harga) AS omzet
  FROM penjualan GROUP BY 1
)
SELECT bulan, omzet,
       ROUND(100.0 * (omzet - LAG(omzet) OVER (ORDER BY bulan))
             / NULLIF(LAG(omzet) OVER (ORDER BY bulan), 0), 1) AS growth_persen
FROM b;

Kenaikan atau penurunan omzet dibanding bulan sebelumnya, aman dari pembagian nol.

Dialek

Beda MySQL, PostgreSQL, SQL Server & BigQuery

Inti SQL sama di semua database. Yang berbeda biasanya fungsi teks, tanggal, dan cara membatasi baris.

KebutuhanMySQLPostgreSQLSQL ServerBigQuery
Ambil 10 baris LIMIT 10LIMIT 10SELECT TOP 10LIMIT 10
Sambung teks CONCAT(a, b)a || ba + b / CONCATCONCAT(a, b)
Ganti NULL IFNULL(a, 0)COALESCE(a, 0)ISNULL(a, 0)IFNULL(a, 0)
Tanggal hari ini CURDATE()CURRENT_DATECAST(GETDATE() AS DATE)CURRENT_DATE()
Ambil bulan MONTH(tgl)EXTRACT(MONTH FROM tgl)MONTH(tgl)EXTRACT(MONTH FROM tgl)
Panjang teks CHAR_LENGTH(a)LENGTH(a)LEN(a)LENGTH(a)
Selisih hari DATEDIFF(b, a)b - aDATEDIFF(day, a, b)DATE_DIFF(b, a, DAY)

Belajar SQL bareng mentor

Hafal sintaks itu mudah. Menjawab pertanyaan bisnis, itu skill.

Private Class Python & SQL untuk Data: dari query dasar sampai JOIN dan studi kasus kerja, dengan kurikulum dan jadwal yang menyesuaikan kamu.

Lihat Private Class