Lewati ke konten utama
F2

F2 · SQL dan Data dari Nol

Bertanya pada data dengan SQL: dari kueri pertama sampai merancang basis data sendiri dan membuat laporan yang dipakai orang.

Mulai Modul 01

Daftar modul

  1. 01Data, tabel, dan basis data8 latihan
  2. 02SELECT, WHERE, dan ORDER BY8 latihan
  3. 03NULL, CASE, dan fungsi bawaan8 latihan
  4. 04Agregasi8 latihan
  5. 05JOIN8 latihan
  6. 06Subquery dan CTE8 latihan
  7. 07Window function8 latihan
  8. 08Mengubah data9 latihan
  9. 09Membuat tabel dan menjaga data9 latihan
  10. 10Desain skema9 latihan
  11. 11Indeks dan kinerja dasar8 latihan
  12. 12Dari SQLite ke PostgreSQL8 latihan
  13. 13Transaksi dan konkurensi8 latihan
  14. 14SQL dari Python8 latihan
  15. 15Proyek akhir: Laporan Warung Makmur8 latihan

Ada contoh atau latihan bertanda “Kerjakan di laptop”? Paket dan data F2 untuk menjalankannya di komputermu ada di panduan menjalankan kode di komputermu.

Tentang course ini

Bertanya pada data dengan SQL: dari kueri pertama sampai merancang basis data sendiri dan membuat laporan yang dipakai orang.

Course fondasi gratis Coding Studio. Setiap modul bisa dibaca langsung sebagai Markdown; di Coding Studio, setiap kueri contoh dan latihan dijalankan di peramban (SQLite di dalam Python Pyodide) dan latihan diperiksa otomatis.


Untuk siapa

  • Siapa pun yang bekerja dengan data dalam tabel: pelajar, mahasiswa, admin kantor, pemilik UMKM, calon analis data, calon developer.
  • Tanpa prasyarat. F2 tidak membutuhkan F1, kecuali latihan Python di Modul 13 (dua koneksi) dan Modul 14 (SQL dari Python), yang memakai F1 Modul 01–11. sys.argv (F1 Modul 13) dijelaskan singkat di Modul 14.
  • Calon peserta F5 Rilis, C1 Data Science, C3 AI Engineering, dan C4 Data Engineering: F2 adalah prasyaratnya.

Yang kamu butuhkan: peramban modern dan internet. Modul 01–11 dan 14 seluruhnya di peramban; Modul 13 sebagian di peramban. Modul 12 (PostgreSQL) dan lab dua sesi di Modul 13 memakai GitHub Codespaces atau PostgreSQL di komputermu.

Setelah F2 kamu bisa

  1. Membaca skema basis data relasional dan menjelaskan isi setiap tabel.
  2. Menulis kueri SELECT dengan saringan, pengurutan, ekspresi, NULL, dan CASE.
  3. Merangkum data dengan agregasi, GROUP BY, dan HAVING.
  4. Menggabungkan tabel dengan JOIN tanpa terjebak baris berlipat.
  5. Memecah pertanyaan sulit dengan subquery dan CTE; memakai window function untuk peringkat, total berjalan, dan perbandingan antarperiode.
  6. Mengubah data dengan aman (INSERT/UPDATE/DELETE dalam transaksi).
  7. Merancang skema yang menjaga kebenaran data (kunci, constraint, normalisasi) dan membuat indeks yang tepat.
  8. Memindahkan basis data dari SQLite ke PostgreSQL.
  9. Menjalankan SQL dari Python dengan parameter (kebal SQL injection).
  10. Memakai asisten AI untuk menulis dan menjelaskan kueri, lalu membuktikan kuerinya benar sebelum dipakai.

Dataset: Warung Makmur

Semua modul memakai satu dataset fiktif yang akrab: warung kelontong Warung Makmur selama 1–30 September 2026 (data/warung.sql, dibuat deterministik oleh data/buat_warung.py).

erDiagram
  kategori ||--o{ produk : "punya"
  produk ||--o{ transaksi_item : "terjual di"
  transaksi ||--|{ transaksi_item : "berisi"
  kasir ||--o{ transaksi : "melayani"
  pelanggan |o--o{ transaksi : "berbelanja (boleh kosong)"
  pemasok ||--o{ pembelian : "memasok"
  produk ||--o{ pembelian : "dibeli ulang"
TabelBarisIsi
kategori7Kategori produk (Alat tulis sengaja belum punya produk)
produk32Nama, kategori, harga_jual dan harga_beli sekarang (rupiah), satuan, stok, aktif (0/1)
pemasok4Pemasok dan kotanya (satu belum pernah dipesan bulan ini)
pembelian45Belanja stok ke pemasok
kasir3Kasir dan tanggal mulai kerja
pelanggan15Pelanggan langganan; rt boleh NULL; dua belum pernah belanja
transaksi816Waktu ('YYYY-MM-DD HH:MM:SS'), kasir, pelanggan (NULL = pembeli umum), metode bayar (tunai/qris/transfer)
transaksi_item1.516Isi tiap transaksi: produk, jumlah, harga_satuan saat itu

Detail yang sengaja ditanam untuk latihan: dua produk tidak pernah terjual; satu produk berhenti dijual 8 September (aktif = 0); harga minyak goreng naik 15 September dan gula pasir 22 September (jadi harga_satuan di transaksi lama berbeda dari harga_jual sekarang); sebagian besar transaksi tanpa pelanggan (NULL); jam ramai pagi dan sore; QRIS makin sering di akhir bulan.

Mulai Modul 10 tersedia juga data/kasbon.sql (dimuat sesudah warung.sql): rancangan rujukan fitur kasbon (utang belanja pelanggan) beserta pembayarannya.

Semua angka fiktif. Harga dibuat masuk akal untuk warung di Jawa pada 2026, bukan data resmi.

Cara belajar di course ini

  • Tebak dulu, baru jalankan. Sebelum menjalankan kueri, tebak berapa baris dan kolom hasilnya. Hasil yang mengejutkan adalah tanda kamu belum paham datanya, atau kuerinya salah.
  • Latihan diperiksa otomatis: hasil kuerimu dibandingkan dengan hasil yang benar (jumlah kolom, jumlah baris, isi, dan urutan bila diminta). Petunjuk bertingkat dulu, solusi paling akhir.
  • Kueri yang jalan belum tentu benar. Setiap modul punya bagian Kesalahan umum: kueri yang tidak galat tetapi menjawab pertanyaan yang salah (baris berlipat karena JOIN, NULL yang hilang diam-diam, pembagian bilangan bulat).
  • AI sebagai rekan, kamu sebagai pemeriksa (lihat bagian berikut).
  • Inti dulu, pendalaman belakangan. Setiap modul dibuka dengan kotak Intinya. Bagian bertanda Di balik layar (opsional) atau Pendalaman boleh dilewati di bacaan pertama; latihan dan kuis inti tidak bergantung padanya.

Waktu: ±2–6 jam per modul (tertulis di awal setiap modul), total ±45–50 jam.

Belajar bersama AI

Setiap modul punya bagian Belajar bersama AI dengan metode yang sama; modulnya hanya menambahkan contoh khas topiknya.

  1. Bertanya dengan konteks. Sebut basis data dan versinya (SQLite 3.45, PostgreSQL 16), tempel skema (pragma_table_info) atau pesan galat yang sebenarnya, dan minta penjelasan, bukan sekadar kueri jadi.
  2. Memeriksa, bukan memercayai. Jalankan setiap kueri dari AI. Tebak dulu jumlah baris dan kolomnya, tulis kueri kedua dengan cara lain yang seharusnya memberi angka sama, hitung satu baris dengan tangan, dan pastikan bagian-bagian berjumlah sama dengan keseluruhan.
  3. Tiga langkah tugas. Tugas tanpa AI melatih penalaran dengan kertas dan pensil; Tugas dengan AI memberi perintah yang realistis lalu memeriksa hasilnya dengan mesin; Bandingkan mencatat kesalahan khas AI untuk topik itu dan pemahaman yang menangkapnya.

Silabus (15 modul)

#ModulHasil utamaLangkah proyek
01Data, tabel, dan basis dataTabel/baris/kolom, kunci primer, relasi, SQLite vs PostgreSQL, kueri pertamaMengenal skema Warung Makmur
02SELECT, WHERE, dan ORDER BYMemilih kolom, alias, ekspresi, saringan (AND/OR/IN/BETWEEN/LIKE), DISTINCT, urut, LIMITDaftar produk untuk dicek ulang stoknya
03NULL, CASE, dan fungsi bawaanLogika NULL, COALESCE, CASE WHEN, fungsi teks dan angka, pembagian bilangan bulat, fungsi tanggal (satu tabel padanan SQLite dan PostgreSQL)Label stok dan margin per produk
04AgregasiCOUNT/SUM/AVG/MIN/MAX, GROUP BY, HAVING, WHERE vs HAVING, mengelompokkan per hari/jamLaporan 1: omzet harian dan jam ramai
05JOINKunci asing, INNER JOIN, LEFT JOIN, anti-join, baris berlipat (fan-out), self-join singkatLaporan 2: produk terlaris dan yang tidak laku
06Subquery dan CTESubquery skalar, IN, EXISTS, berkorelasi, WITH untuk kueri bertahapLaporan 3: margin per kategori dan pelanggan setia
07Window functionROW_NUMBER/RANK/DENSE_RANK, PARTITION BY, total berjalan, LAG/LEAD, rata-rata bergerak, top-N per kelompokLaporan 4: tren harian dan juara per kategori
08Mengubah dataINSERT, UPDATE, DELETE, BEGIN/COMMIT/ROLLBACK, upsert ON CONFLICT, kebiasaan amanMencatat restok dan koreksi harga
09Membuat tabel dan menjaga dataCREATE TABLE, tipe data (afinitas SQLite), NOT NULL/UNIQUE/CHECK/DEFAULT, kunci asing dan PRAGMA foreign_keys, ALTER TABLETabel kasbon pertama
10Desain skemaEntitas dan relasi, 1-N dan N-N, normalisasi (1NF–3NF) dengan contoh, kapan denormalisasi, ERD, penamaanMerancang kasbon dengan benar (rancangan rujukan kasbon.sql)
11Indeks dan kinerja dasarCara kerja indeks (intuisi B-tree), EXPLAIN QUERY PLAN, indeks gabungan, kapan indeks tidak terpakai, biaya indeksIndeks untuk laporan
12Dari SQLite ke PostgreSQLPerbedaan tipe dan fungsi tanggal, IDENTITY, BOOLEAN, TIMESTAMP, psql, memindahkan Warung MakmurLaporan berjalan di PostgreSQL
13Transaksi dan konkurensiACID, pembaruan yang hilang, pembaruan atomik, SELECT … FOR UPDATE, deadlock, BEGIN IMMEDIATE di SQLite, mencoba ulang transaksi; pendalaman: tingkat isolasi, write skew, MVCCDua kasir menulis bersamaan tanpa merusak stok
14SQL dari Pythonsqlite3, parameter ?, SQL injection, mengambil baris, transaksi dari Python, menulis CSV/MarkdownSkrip laporan bulanan otomatis
15Proyek akhir: Laporan Warung MakmurMenyatukan laporan, skema kasbon, indeks, versi PostgreSQL, README dengan temuan dan rekomendasi; lencana Tayang ringan (repo publik, GitHub Actions, GitHub Pages)Proyek utuh

Detail proyek: proyek-warung.md.

Yang sengaja tidak dibahas di F2: stored procedure dan trigger lanjutan, replikasi, partisi, tuning server, ORM, gudang data dan skema bintang (ada di C4). Menayangkan aplikasi dan API (Docker, CI/CD) ada di F5 Rilis.


Kerangka setiap modul

Sama dengan F1 (lihat ../f1-python/README.md, "Kerangka setiap modul"), dengan penyesuaian:

  • Tambahkan <!-- data-contoh: warung --> di bawah blockquote agar setiap contoh sql dijalankan di dataset Warung Makmur (Modul 10 ke atas boleh warung,kasbon).
  • Intinya (3–5 butir pendek) tepat sebelum bagian 1.
  • 2. Konsep: setiap contoh sql diikuti text hasil yang dicetak alat pemeriksa, tidak diketik tangan. Sebelum hasil, minta pembaca menebak jumlah baris.
  • 3. Latihan: format latihan SQL standar Coding Studio; minimal 8 latihan per modul (3 dasar, 3 menengah, 2 tantangan, ditandai **Tingkat:**). Latihan hanya memakai konsep yang sudah diajarkan.
  • 2. Konsep, "Di balik layar (opsional)": pendalaman di akhir bagian 2 (aljabar relasional, rencana kueri, B-tree, jurnal/WAL, MVCC), dibuka dengan catatan "boleh dilewati". Latihan dan kuis inti tidak bergantung padanya; soal yang memakainya ditandai pendalaman. Satu konsep punya satu rumah (misalnya fungsi tanggal di Modul 03, ACID di Modul 13, algoritma join dan jendela di C4); modul lain menautkan, tidak mengajarkan ulang.
  • 4. Kesalahan umum: utamakan kesalahan yang tidak memunculkan galat (hasil salah diam-diam), lalu galat yang sering muncul (sql galat + text galat).
  • 5. Belajar bersama AI: rujuk metode bersama di README ini, lalu tiga contoh pertanyaan, satu jawaban AI yang terdengar benar tetapi salah, dan tugas tanpa/dengan AI yang ringkas.
  • 7. Di dunia kerja: skenario generik yang realistis (toko daring, aplikasi kasir, aplikasi belajar, bank). Jangan merujuk repo, berkas, jalur kode, keputusan, atau insiden internal perusahaan mana pun.

Pedoman bahasa dan istilah

Sapaan "kamu" dan istilah baku sama dengan F1, ditambah:

InggrisDipakai
querykueri
table / row / columntabel / baris / kolom
primary key / foreign keykunci primer / kunci asing
constraintconstraint (batasan)
indexindeks
joinJOIN (menggabungkan tabel)
aggregateagregasi
subquery, CTE, window functionsubquery, CTE, window function
schemaskema
transactiontransaksi basis data (bedakan dari tabel transaksi warung: sebut "transaksi basis data" atau BEGIN…COMMIT)

Kata kunci SQL ditulis HURUF BESAR, nama tabel/kolom huruf kecil (snake_case), satu klausa utama per baris untuk kueri lebih dari satu baris.

Aturan mutu (untuk penulis dan reviewer)

  1. Semua kueri diperiksa mesin. Pemeriksa latihan Coding Studio harus melaporkan 0 galat untuk course ini. Hasil tidak pernah diketik dari ingatan; angka di prosa (misalnya "omzet tertinggi Rp…") diambil dari kueri yang dijalankan.
  2. SQLite ≥ 3.45 untuk semua latihan dan contoh yang dijalankan. Kueri khusus PostgreSQL ditandai sql postgres dan diuji manual di PostgreSQL 16.
  3. Jawaban pasti. Setiap ORDER BY yang dinilai atau dipotong LIMIT punya pemecah seri; pemeriksa menolak jawaban yang bergantung pada urutan fisik baris.
  4. Dataset tidak disunting tangan. Ubah buat_warung.py, jalankan ulang, lalu jalankan pemeriksa untuk semua modul (hasil contoh bisa berubah).
  5. Tanpa data pribadi, fakta dicek, kuota gratis bertanggal (sama dengan F1).