Belajar SQL Basic
Dari Nol Sampai Siap
Ke Proyek Nyata
Kurikulum terstruktur + panduan tools + referensi video — semua dalam satu tempat. Cocok untuk pemula yang ingin serius menguasai SQL.
Apa Itu Database & SQL?
Sebelum menulis query, kamu harus paham dulu apa itu database dan kenapa SQL jadi bahasa paling penting di dunia data.
Database Relational
Database relational menyimpan data dalam bentuk tabel (baris & kolom), di mana satu tabel bisa berhubungan dengan tabel lain melalui key. Bayangkan spreadsheet yang saling terhubung.
SQL: Bahasa Universal Data
SQL (Structured Query Language) adalah bahasa standar untuk berkomunikasi dengan database relational. Hampir semua RDBMS (PostgreSQL, MySQL, SQL Server, SQLite) menggunakan SQL dengan sedikit perbedaan dialek.
RDBMS Populer
| Nama | Lisensi | Cocok Untuk | Keunikan |
|---|---|---|---|
| PostgreSQL | Open Source | Production, analytics | Fitur paling lengkap, extensible |
| MySQL | Open Source | Web apps (WordPress, Laravel) | Populer, cepat untuk read-heavy |
| SQLite | Public Domain | Mobile, embedded, local dev | Serverless, file-based |
| SQL Server | Proprietary | Enterprise .NET ecosystem | Integrasi dengan Microsoft stack |
Persiapan & Tools
Bagian paling membingungkan bagi pemula: pilih tools yang mana? Tenang, kita bahas satu per satu.
Rekomendasi Setup Pemula
Untuk belajar, cukup install SQLite (nol konfigurasi) + DBeaver (GUI universal). Nanti setelah paham dasar, bisa ekspansi ke PostgreSQL/MySQL.
Tools Database GUI
DBeaver
Universal GUI — support semua database. Gratis, open source, cross-platform.
Rekomendasi #1MySQL Workbench
Official GUI dari MySQL. Cocok kalau fokus belajar MySQL.
MySQLpgAdmin
Official GUI untuk PostgreSQL. Web-based, fitur administrasi lengkap.
PostgreSQLDB Browser for SQLite
GUI ringan khusus SQLite. Portable, nggak perlu installasi rumit.
SQLiteTablePlus
GUI modern & cepat. Support banyak database. Native Mac, ada trial.
Modern UIAzure Data Studio
Dari Microsoft, ringan. Cocok untuk SQL Server & PostgreSQL.
Cross-platformCommand Line (CLI)
Tools GUI memang nyaman, tapi suatu saat kamu pasti butuh CLI. Ada kalanya server nggak punya GUI, dan kamu harus debug pakai terminal.
| Database | CLI | Contoh Koneksi |
|---|---|---|
| PostgreSQL | psql | psql -U postgres -d mydb |
| MySQL | mysql | mysql -u root -p mydb |
| SQLite | sqlite3 | sqlite3 mydb.sqlite |
VS Code Extensions
Buat yang pakai VS Code, install extension ini biar workflow makin mulus:
- SQLTools — konek ke berbagai database langsung dari editor
- SQLite Viewer — preview file .sqlite di side panel
- Prettier SQL VSCode — format query biar rapi
SELECT & WHERE
Dua kata yang paling sering kamu pakai dalam SQL. SELECT buat ambil data, WHERE buat filter data. Ini adalah fondasi dari segalanya.
SELECT Dasar
Gunakan SELECT untuk mengambil kolom tertentu dari sebuah tabel.
WHERE: Filter Data
WHERE membatasi baris yang dikembalikan berdasarkan kondisi.
Operator Perbandingan
| Operator | Arti | Contoh |
|---|---|---|
= | Sama dengan | WHERE name = 'Budi' |
<> atau != | Tidak sama | WHERE status <> 'canceled' |
>, < | Lebih dari / Kurang dari | WHERE price > 50000 |
>=, <= | Lebih/Kurang dari atau sama | WHERE age >= 17 |
IS NULL | Nilai NULL | WHERE deleted_at IS NULL |
IS NOT NULL | Bukan NULL | WHERE phone IS NOT NULL |
NULL = NULL hasilnya false. Selalu gunakan IS NULL untuk mengecek.
Logical Operators
Gabungkan kondisi dengan AND, OR, dan NOT.
Filtering & Sorting
Data mentah jarang berguna tanpa diurutkan dan difilter dengan tepat. Di bab ini kita akan merapikan hasil query.
ORDER BY — Mengurutkan Hasil
LIMIT & OFFSET — Paginasi
DISTINCT — Hilangkan Duplikat
Operator Khusus untuk Filtering
JOINs
Di sinilah SQL mulai terasa powerful-nya. JOIN menggabungkan data dari beberapa tabel dalam satu query.
INNER JOIN
Hanya mengembalikan baris yang punya kecocokan di kedua tabel.
LEFT JOIN
Semua baris dari tabel kiri dipertahankan. Jika tidak ada kecocokan di tabel kanan, kolomnya akan NULL.
RIGHT & FULL JOIN
Self JOIN
JOIN tabel dengan dirinya sendiri. Berguna untuk data hierarki (kategori, employee-manager).
Aggregate Functions & GROUP BY
Data mentah perlu diringkas. Aggregate functions mengubah banyak baris menjadi satu nilai ringkasan.
Fungsi Agregat Dasar
| Fungsi | Kegunaan | Contoh |
|---|---|---|
COUNT() | Menghitung jumlah baris | COUNT(*) AS total_user |
SUM() | Total nilai numerik | SUM(amount) AS revenue |
AVG() | Rata-rata nilai | AVG(price) AS avg_price |
MIN() | Nilai terkecil | MIN(price) AS termurah |
MAX() | Nilai terbesar | MAX(price) AS termahal |
GROUP BY — Kelompokkan Data
GROUP BY membagi data menjadi grup berdasarkan nilai kolom, lalu fungsi agregat dijalankan per grup.
HAVING — Filter Hasil Agregasi
HAVING mirip WHERE, tapi untuk hasil agregasi. WHERE filter baris sebelum GROUP BY, HAVING filter setelah GROUP BY.
Subqueries & CTEs
Kadang kamu perlu query di dalam query. Subquery dan CTE (Common Table Expression) adalah teknik untuk membuat query bertingkat yang lebih terstruktur.
Subquery di WHERE
Correlated Subquery
Subquery yang referensi kolom dari outer query. Dijalankan per baris — hati-hati soal performa.
EXISTS / NOT EXISTS
Lebih efisien daripada IN untuk kasus tertentu — berhenti begitu nemu kecocokan pertama.
CTE (WITH)
CTE membuat query sementara yang bisa kamu pakai di SELECT utama. Jauh lebih rapi daripada subquery bertingkat.
Data Manipulation (INSERT, UPDATE, DELETE)
SELECT untuk membaca, tapi kapan kita nulis data? Di sinilah DML (Data Manipulation Language) berperan.
INSERT — Menambah Data
UPDATE — Mengubah Data
DELETE — Menghapus Data
Transactions
Transaction memastikan beberapa operasi berjalan all or nothing. Kalau satu gagal, semuanya dibatalkan.
Database Design & Normalisasi
Database yang dirancang dengan buruk akan membuat query jadi rumit dan lambat. Bab ini membahas prinsip desain yang benar.
Primary Key & Foreign Key
Primary Key adalah identitas unik setiap baris di tabel. Foreign Key menghubungkan tabel satu dengan yang lain.
Normalisasi Database
Normalisasi adalah proses menghilangkan data duplikat dan memastikan integritas data.
| Bentuk | Aturan | Contoh Pelanggaran |
|---|---|---|
| 1NF | Setiap kolom berisi 1 nilai (atomic) | Kolom phone berisi "0811, 0822" |
| 2NF | 1NF + semua kolom non-key tergantung pada seluruh primary key | Tabel dengan PK komposit tapi kolom lain hanya tergantung 1 bagian PK |
| 3NF | 2NF + tidak ada transitive dependency | Kolom city_name tergantung city_id, bukan PK |
Entity Relationship Diagram (ERD)
Sebelum bikin tabel, gambar dulu ERD-nya. Hubungan antar entitas biasanya:
- One-to-One (1:1) — Satu user punya satu profil
- One-to-Many (1:N) — Satu user punya banyak order (paling umum)
- Many-to-Many (M:N) — Banyak produk di banyak order (butuh tabel pivot)
Performance & Best Practices
Query yang benar belum tentu query yang efisien. Bab ini membahas cara menulis SQL yang tidak hanya benar, tapi juga cepat.
EXPLAIN — Baca Rencana Eksekusi
EXPLAIN menunjukkan bagaimana database akan menjalankan query-mu. Ini adalah skill paling penting setelah bisa nulis query.
Indexing
Index mempercepat pencarian dengan cara yang mirip indeks di buku. Tapi ada trade-off: nulis data jadi sedikit lebih lambat karena index harus diupdate.
Common Mistakes
| Kesalahan | Solusi |
|---|---|
| SELECT * di production | Sebutkan kolom spesifik |
| N+1 query (loop query di aplikasi) | Pakai JOIN atau batch query |
| Lupa WHERE di UPDATE/DELETE | Selalu double-check sebelum execute |
| Tidak pakai index untuk kolom yang sering difilter | Monitor slow query & tambah index |
Function di kolom di WHERE (WHERE YEAR(date) = 2025) | Gunakan range: WHERE date >= '2025-01-01' AND date < '2026-01-01' |
| Ordering by kolom tanpa index | Tambah index atau batasi hasil |
Panduan Singkat Best Practices
- Biasakan pakai CTE daripada subquery bertingkat — lebih mudah dibaca
- Gunakan
EXPLAIN ANALYZEsebelum optimasi — jangan tebak-nebak - Hindari
SELECT *di production — ambil kolom yang diperlukan saja - Batch INSERT lebih cepat daripada insert satu-satu
- Gunakan
VACUUM(PostgreSQL) atau optimasi tabel periodik - Setelah baca data, jangan di-loop di aplikasi — gunakan JOIN di SQL
- Berlakukan constraint di level database, bukan cuma di aplikasi
Referensi Video YouTube
Video berikut melengkapi materi di atas. Tonton sesuai urutan bab untuk hasil maksimal.
Belajar SQL Dasar — Database & SELECT Query
Pengantar SQL dari awal: database, SELECT, WHERE, ORDER BY
SQL JOINs Explained with Examples
Visual explanation of INNER, LEFT, RIGHT, FULL JOIN with diagrams
SQL Aggregate Functions — COUNT, SUM, AVG, GROUP BY, HAVING
Praktik fungsi agregat dari dasar sampai mahir
Subqueries & CTEs in SQL
Kapan pakai subquery vs CTE, plus contoh use case nyata
Database Normalization — 1NF, 2NF, 3NF
Penjelasan normalisasi database dengan contoh studi kasus
SQL Indexing Explained (PostgreSQL)
Cara kerja index, kapan bikin index, dan bagaimana EXPLAIN bekerja
MySQL vs PostgreSQL — Which One to Choose?
Perbandingan lengkap dua RDBMS paling populer di dunia
SQL Transaction & Concurrency Control
BEGIN, COMMIT, ROLLBACK, isolation levels — konsep penting production
SQL Window Functions (Advanced)
ROW_NUMBER, RANK, LAG, LEAD — bab lanjutan setelah kuasai dasar
Full SQL Course — FreeCodeCamp
Kursus SQL 4 jam gratis dari FreeCodeCamp, dari nol sampai mahir