Database & SQL
SQL murni dulu, ORM belakangan. PostgreSQL & MySQL sampai optimasi query.
±90 jam · 0/83 selesai (0%)
Modul 1: Konsep Database & SELECT
Berpikir dalam tabel: query pertamamu sampai filter yang presisi.
7 bab dalam modul ini
- 1.1Database relasional: tabel, baris, kolom, tipe data
- 1.2SELECT & FROM: mengambil kolom
- 1.3WHERE: =, <>, >, <, BETWEEN, IN, LIKE
- 1.4AND/OR/NOT & urutan evaluasi
- 1.5ORDER BY & LIMIT/OFFSET
- 1.6DISTINCT & alias (AS)
- 1.7NULL: kenapa = NULL tidak jalan (IS NULL)
- ‹›Konsep Database RelasionalPraktek
- ‹›SELECT Kolom Spesifik & Alias (AS)Praktek
- ‹›Filtering Baris dengan Klausul WHEREPraktek
- ‹›Kombinasi Kondisi AND, OR, dan NOTPraktek
- ‹›Pengurutan ORDER BY & Pembatasan LIMIT/OFFSETPraktek
- ‹›Menghilangkan Duplikat dengan DISTINCTPraktek
- ‹›Pengecekan Nilai Kosong (IS NULL / IS NOT NULL)Praktek
- ?Kuis: Konsep Database & SELECTKuis
Modul 2: Relasi & JOIN
Materi interview SQL paling sering keluar — kuasai sampai bisa menggambar diagramnya.
7 bab dalam modul ini
- 2.1Primary key & foreign key
- 2.2INNER JOIN: irisan dua tabel
- 2.3LEFT/RIGHT JOIN & baris NULL
- 2.4Join lebih dari dua tabel
- 2.5Self join (karyawan → atasan)
- 2.6Many-to-many & junction table
- 2.7Latihan: menulis join dari pertanyaan bisnis nyata
- ‹›Primary Key vs Foreign KeyPraktek
- ‹›INNER JOIN: Irisan Dua TabelPraktek
- ‹›LEFT JOIN & Baris NULLPraktek
- ‹›JOIN Lebih dari 2 TabelPraktek
- ‹›Self JOIN (Menggabungkan Tabel dengan Dirinya Sendiri)Praktek
- ‹›Many-to-Many & Junction TablePraktek
- ‹›Studi Kasus Pertanyaan Bisnis NyataPraktek
- ?Kuis: Relasi & JOINKuis
Modul 3: Agregasi & Subquery
Dari data mentah ke jawaban bisnis: total, rata-rata, dan pengelompokan.
7 bab dalam modul ini
- 3.1COUNT, SUM, AVG, MIN, MAX
- 3.2GROUP BY: aturan emas kolom yang boleh di-SELECT
- 3.3HAVING vs WHERE
- 3.4Subquery di WHERE, FROM, SELECT
- 3.5CTE (WITH): query kompleks yang tetap terbaca
- 3.6CASE WHEN untuk kategorisasi
- 3.7Window function dasar: ROW_NUMBER, RANK, running total
- ‹›Fungsi Agregasi (COUNT, SUM, AVG, MIN, MAX)Praktek
- ‹›Pengelompokan Data dengan GROUP BYPraktek
- ‹›Menyaring Agregat: HAVING vs WHEREPraktek
- ‹›Subquery di dalam WHEREPraktek
- ‹›CTE (Common Table Expressions) dengan WITHPraktek
- ‹›Kategorisasi Data dengan CASE WHENPraktek
- ‹›Window Function Dasar (ROW_NUMBER)Praktek
- ?Kuis: Agregasi & SubqueryKuis
Modul 4: Manipulasi Data & Transaksi
INSERT, UPDATE, DELETE — dan jaring pengaman sebelum kamu menghapus data produksi.
7 bab dalam modul ini
- 4.1INSERT: satu baris, banyak baris, dari SELECT
- 4.2UPDATE dengan WHERE (dan horor UPDATE tanpa WHERE)
- 4.3DELETE vs TRUNCATE
- 4.4Transaksi: BEGIN, COMMIT, ROLLBACK
- 4.5ACID dijelaskan dengan kasus transfer uang
- 4.6UPSERT (ON CONFLICT / ON DUPLICATE KEY)
- 4.7RETURNING untuk mendapat data yang berubah
- ‹›INSERT INTO Menyimpan Data BaruPraktek
- ‹›UPDATE Data dengan WHEREPraktek
- ‹›Menghapus Data: DELETE vs TRUNCATEPraktek
- ‹›Transaksi SQL: BEGIN, COMMIT, ROLLBACKPraktek
- ‹›Prinsip Keandalan Transaksi ACIDPraktek
- ‹›UPSERT (Insert or Update on Conflict)Praktek
- ‹›Klausul RETURNING di PostgreSQLPraktek
- ?Kuis: Manipulasi Data & TransaksiKuis
Modul 5: Desain Skema & Index
Merancang database yang tidak menyesal 6 bulan kemudian.
7 bab dalam modul ini
- 5.1Normalisasi 1NF–3NF dengan contoh nyata (bukan definisi hafalan)
- 5.2Kapan denormalisasi masuk akal
- 5.3ERD: membaca & menggambar
- 5.4Memilih tipe data & constraint (NOT NULL, UNIQUE, CHECK)
- 5.5Index: cara kerja B-tree secara intuitif
- 5.6Kapan index membantu & kapan memperlambat
- 5.7EXPLAIN: membaca rencana eksekusi query
- ‹›Normalisasi Database (1NF, 2NF, 3NF)Praktek
- ‹›Kapan Denormalisasi Masuk Akal?Praktek
- ‹›Entity Relationship Diagram (ERD)Praktek
- ‹›Constraint: NOT NULL, UNIQUE, CHECKPraktek
- ‹›Indexing dengan B-TreePraktek
- ‹›Kapan Index Membantu & MemperlambatPraktek
- ‹›Membaca Execution Plan dengan EXPLAIN ANALYZEPraktek
- ?Kuis: Desain Skema & IndexKuis
Modul 6: PostgreSQL: Fundamental
Database #1 pilihan developer dunia (58% pemakaian) — fitur yang membuatnya dipilih untuk stack modern.
9 bab dalam modul ini
- 6.1Instalasi & psql: \l, \dt, \d, \?
- 6.2Tipe data kaya: array, JSONB, UUID, enum, range
- 6.3SERIAL vs GENERATED ALWAYS AS IDENTITY (mana yang benar sekarang)
- 6.4Query JSONB: operator ->, ->>, @>, dan jsonb_path_query
- 6.5Membuat index pada kolom JSONB (GIN)
- 6.6Full-text search: tsvector, tsquery, ts_rank
- 6.7Sequence: currval, nextval, dan jebakan setelah restore
- 6.8Role, GRANT, dan Row Level Security dasar
- 6.9Skema (schema) untuk memisahkan domain data
- ‹›PostgreSQL CLI (psql) ConnectionPraktek
- ‹›Tipe Data Kaya: JSONB & UUIDPraktek
- ‹›Query Data JSONB (Operator -> dan ->>)Praktek
- ‹›Full-Text Search PostgreSQL (to_tsvector & to_tsquery)Praktek
- ‹›Identity Column (GENERATED ALWAYS AS IDENTITY)Praktek
- ‹›Role & Permission Manajemen (GRANT / REVOKE)Praktek
- ?Kuis: PostgreSQL SpesifikKuis
Modul 7: MySQL: Fundamental
Pasangan setia Laravel dan mayoritas hosting Indonesia — jalur tercepat ke pekerjaan lokal.
9 bab dalam modul ini
- 7.1Instalasi & mysql CLI: SHOW DATABASES, SHOW TABLES, DESCRIBE
- 7.2MySQL vs MariaDB: apa bedanya dan kenapa hosting sering memakai MariaDB
- 7.3Storage engine InnoDB (dan kenapa MyISAM ditinggalkan)
- 7.4AUTO_INCREMENT: perilaku setelah DELETE dan setelah restart
- 7.5Charset utf8mb4 & collation — jebakan emoji dan urutan sortir
- 7.6Tipe data: perbedaan penting dari PostgreSQL (TINYINT, ENUM, TEXT)
- 7.7DATETIME vs TIMESTAMP & penanganan timezone
- 7.8Tipe JSON di MySQL & generated column untuk mengindeksnya
- 7.9User, GRANT, dan hak akses per-database
Modul 8: PostgreSQL: Performa & Operasional
Yang ditanyakan saat kamu pegang database production: kenapa query lambat, index mana yang dipakai, dan bagaimana kalau data hilang.
11 bab dalam modul ini
- 8.1EXPLAIN vs EXPLAIN ANALYZE — membaca rencana eksekusi sungguhan
- 8.2Seq Scan vs Index Scan vs Bitmap Heap Scan: kapan masing-masing wajar
- 8.3Jenis index: B-tree, GIN, GiST, BRIN, partial, dan expression index
- 8.4Index yang tidak terpakai & kenapa menambah index bisa memperlambat
- 8.5Window function: ROW_NUMBER, LAG/LEAD, running total
- 8.6CTE & recursive CTE untuk data berjenjang (kategori, struktur organisasi)
- 8.7VACUUM, autovacuum, dan table bloat
- 8.8Transaction isolation level & deadlock
- 8.9Backup dengan pg_dump/pg_restore + latihan restore (bukan cuma backup)
- 8.10Connection pooling: kenapa PostgreSQL butuh PgBouncer
- 8.11Extension berguna: pg_stat_statements, uuid-ossp, pgcrypto
- ‹›Membaca Rencana Eksekusi (EXPLAIN ANALYZE)Praktek
- ‹›Membuat Partial Index & GIN IndexPraktek
- ‹›Window Function (ROW_NUMBER & OVER PARTITION BY)Praktek
- ‹›Common Table Expression (WITH CTE)Praktek
- ‹›Pembersihan Baris Mati dengan VACUUMPraktek
- ‹›Backup & Restore Database (pg_dump & pg_restore)Praktek
- ‹›Aktifkan Extension PostgreSQL (CREATE EXTENSION)Praktek
- ?Kuis: PostgreSQL Performa & OperasionalKuis
Modul 9: MySQL: Performa & Operasional
Menangani MySQL di production: optimizer, index, replikasi, dan pemulihan data.
11 bab dalam modul ini
- 9.1EXPLAIN & EXPLAIN ANALYZE di MySQL: kolom type, key, rows, filtered
- 9.2Clustered index InnoDB: kenapa primary key besar merusak performa
- 9.3Covering index & prefix index untuk kolom teks panjang
- 9.4Kenapa fungsi di kolom WHERE membatalkan index
- 9.5Window function & CTE (tersedia sejak MySQL 8.0)
- 9.6sql_mode & STRICT_TRANS_TABLES: kenapa MySQL lama menerima data invalid
- 9.7Slow query log: menemukan query paling berat
- 9.8Transaksi InnoDB, locking, dan deadlock
- 9.9Backup mysqldump vs snapshot + latihan restore
- 9.10Replikasi master-replica dasar & kapan dibutuhkan
- 9.11Perbedaan penting MySQL 8.4 LTS vs versi lama yang masih banyak di hosting
- ‹›Membaca Rencana Eksekusi (EXPLAIN di MySQL)Praktek
- ‹›Optimasi Covering IndexPraktek
- ‹›Mencegah Pembatalan Indeks (Index Invalidation)Praktek
- ‹›Mendeteksi Query Lambat (Slow Query Log)Praktek
- ‹›Mode Ketat SQL (STRICT_TRANS_TABLES)Praktek
- ‹›Replikasi Database (SHOW REPLICA STATUS)Praktek
- ‹›Mengunci Baris dengan FOR UPDATEPraktek
- ?Kuis: MySQL Performa & OperasionalKuis
Modul 10: Memilih & Migrasi antar Database
Keputusan arsitektur yang sering ditanyakan di interview: kenapa memilih yang ini, dan apa risikonya kalau harus pindah.
9 bab dalam modul ini
- 10.1Peta perbedaan sintaks: LIMIT/OFFSET, string concat, upsert, boolean
- 10.2AUTO_INCREMENT vs SERIAL/IDENTITY vs UUID
- 10.3Perbedaan penanganan tipe JSON, timezone, dan pencarian teks
- 10.4Kapan MySQL lebih tepat (ekosistem Laravel, hosting murah, tim existing)
- 10.5Kapan PostgreSQL lebih tepat (data kompleks, JSONB, analitik, Supabase)
- 10.6Menjawab pertanyaan interview 'kenapa pakai X?' dengan alasan teknis
- 10.7Strategi migrasi: dump-restore, tool bantu, dan uji kesetaraan data
- 10.8Jebakan migrasi: collation, tipe boolean, tanggal nol (0000-00-00)
- 10.9Menulis SQL yang portabel (dan kapan justru tidak perlu portabel)
- ‹›Perbedaan Sintaks: String ConcatenationPraktek
- ‹›Penanganan Upsert (Insert or Update)Praktek
- ‹›Penanganan Tipe Boolean & Date InvalidPraktek
- ‹›Justifikasi Arsitektur Pemilihan DatabasePraktek
- ‹›Transformasi Data saat MigrasiPraktek
- ‹›Verifikasi Jumlah & Hash Data Pasca-MigrasiPraktek
- ?Kuis: Memilih & Migrasi antar DatabaseKuis
Modul 11: SQL di Aplikasi
Menjembatani SQL murni dengan kode: ORM, N+1, dan keamanan.
6 bab dalam modul ini
- 11.1Koneksi dari Node (pg) & connection pool
- 11.2Parameterized query: satu-satunya cara mencegah SQL injection
- 11.3ORM vs query builder vs raw SQL — trade-off jujur
- 11.4Masalah N+1 & cara mendeteksinya
- 11.5Migration di aplikasi nyata
- 11.6Optimasi query lambat: proses diagnosis lengkap
- ‹›Connection Pooling di Backend Node.jsPraktek
- ‹›Parameterized Query Mencegah SQL InjectionPraktek
- ‹›Kueri ORM (Prisma / Eloquent) vs Raw SQLPraktek
- ‹›Mendeteksi & Menghilangkan Masalah N+1Praktek
- ‹›Skema Migration di Aplikasi NyataPraktek
- ‹›Diagnosis & Optimasi Query Lambat (EXPLAIN ANALYZE)Praktek
- ?Kuis: SQL di AplikasiKuis