Roadmap Belajar SQL untuk Karir Data Analyst di 2026
TL;DR
Level 1 (Bulan 1-2): SELECT, WHERE, JOIN dasar. Level 2 (Bulan 3-4): GROUP BY, Subquery, CASE WHEN. Level 3 (Bulan 5-6): Window Functions, CTE, Query Optimization. Setelah itu fokus portfolio dan apply kerja.
Kenapa SQL Penting untuk Data Analyst?
Kalau kamu mau jadi Data Analyst, SQL itu skill nomor satu yang wajib dikuasai. Bukan Python, bukan Excel, tapi SQL.
Kenapa? Karena 90% pekerjaan Data Analyst itu ngurusin data yang ada di database. Dan cara ngobrol sama database ya pake SQL.
Hampir semua job posting Data Analyst di Indonesia minta SQL sebagai requirement utama. Coba cek aja di LinkedIn atau JobStreet. Gojek, Tokopedia, Shopee, bank-bank besar, semuanya butuh Data Analyst yang jago SQL.
Kabar baiknya, SQL itu relatively gampang dipelajari dibanding programming language lain. Syntax-nya mirip bahasa Inggris, dan konsepnya logical.
Berapa Lama Belajar SQL?
Dengan belajar konsisten 1-2 jam per hari:
- Fundamentals: 1-2 bulan
- Intermediate: 2-3 bulan
- Advanced: 2-3 bulan
- Job ready: 6-8 bulan total
Ini bukan timeline yang strict ya. Ada yang lebih cepat, ada yang butuh lebih lama. Yang penting konsisten.
Roadmap Overview
LEVEL 1: FUNDAMENTALS (Bulan 1-2)
- SELECT, FROM, WHERE
- ORDER BY, LIMIT
- Operators (AND, OR, IN, BETWEEN, LIKE)
- Basic JOINs (INNER, LEFT)
- Aggregate Functions (COUNT, SUM, AVG)
LEVEL 2: INTERMEDIATE (Bulan 3-4)
- GROUP BY dan HAVING
- Subqueries
- CASE WHEN
- All JOINs (RIGHT, FULL, CROSS, Self)
- Date Functions
LEVEL 3: ADVANCED (Bulan 5-6)
- Window Functions (ROW_NUMBER, RANK, LAG)
- Common Table Expressions (CTE)
- Query Optimization
- Indexing Basics
- Real-world Analytics Queries
LEVEL 4: JOB READY
- Portfolio Projects
- BI Tools Integration
- Interview Preparation
- Apply dan Interview
Level 1: SQL Fundamentals (Bulan 1-2)
Di level ini, fokus ke basic query operations. Tujuannya adalah bisa extract data dari database.
Week 1-2: SELECT dan Filtering
Konsep yang harus dikuasai:
- SELECT untuk memilih kolom
- FROM untuk menentukan tabel
- WHERE untuk filter data
- ORDER BY untuk sorting
- LIMIT untuk membatasi hasil
Contoh query:
-- Ambil nama dan email customer dari Jakarta
SELECT nama, email
FROM customers
WHERE kota = 'Jakarta'
ORDER BY nama
LIMIT 10;
Latihan:
1. Tampilkan semua produk dengan harga di atas 100000
2. Cari customer yang mendaftar di tahun 2024
3. Urutkan orders dari yang terbaru
Week 3-4: Operators dan Conditions
Konsep yang harus dikuasai:
- AND, OR untuk multiple conditions
- IN untuk match multiple values
- BETWEEN untuk range
- LIKE untuk pattern matching
- IS NULL untuk cek null values
Contoh query:
-- Produk kategori Fashion atau Elektronik dengan harga 50rb-500rb
SELECT nama_produk, kategori, harga
FROM produk
WHERE kategori IN ('Fashion', 'Elektronik')
AND harga BETWEEN 50000 AND 500000;
-- Customer dengan email Gmail
SELECT nama, email
FROM customers
WHERE email LIKE '%@gmail.com';
Week 5-6: Basic JOINs
Konsep yang harus dikuasai:
- INNER JOIN untuk data yang match di kedua tabel
- LEFT JOIN untuk semua data dari tabel kiri
Contoh query:
-- Tampilkan orders dengan nama customer
SELECT
o.id,
c.nama AS customer,
o.tanggal,
o.total
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id;
-- Semua customer, termasuk yang belum pernah order
SELECT
c.nama,
COUNT(o.id) AS jumlah_order
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY c.nama;
Week 7-8: Aggregate Functions
Konsep yang harus dikuasai:
- COUNT untuk menghitung jumlah
- SUM untuk menjumlahkan
- AVG untuk rata-rata
- MIN/MAX untuk nilai terkecil/terbesar
- GROUP BY untuk grouping
Contoh query:
-- Total penjualan per kategori
SELECT
kategori,
COUNT(*) AS jumlah_transaksi,
SUM(total) AS total_penjualan,
AVG(total) AS rata_rata
FROM orders o
JOIN produk p ON o.produk_id = p.id
GROUP BY kategori;
Checkpoint Level 1
Sebelum lanjut ke Level 2, pastikan kamu bisa:
- [ ] Menulis query SELECT dengan multiple columns
- [ ] Filter data dengan WHERE dan berbagai operators
- [ ] Join dua tabel dan ambil data dari keduanya
- [ ] Hitung agregasi dasar (COUNT, SUM, AVG)
- [ ] Sort dan limit hasil query
Level 2: Intermediate SQL (Bulan 3-4)
Di level ini, query kamu mulai lebih kompleks. Fokusnya adalah analytical thinking.
Week 9-10: GROUP BY dan HAVING
Konsep yang harus dikuasai:
- GROUP BY dengan multiple columns
- HAVING untuk filter hasil agregasi
- Perbedaan WHERE vs HAVING
Contoh query:
-- Kategori dengan penjualan di atas 10 juta
SELECT
kategori,
SUM(total) AS total_penjualan
FROM orders o
JOIN produk p ON o.produk_id = p.id
GROUP BY kategori
HAVING SUM(total) > 10000000
ORDER BY total_penjualan DESC;
Week 11-12: Subqueries
Konsep yang harus dikuasai:
- Subquery di WHERE clause
- Subquery di FROM clause (derived tables)
- Subquery di SELECT clause
- Correlated vs non-correlated subqueries
Contoh query:
-- Produk dengan harga di atas rata-rata
SELECT nama_produk, harga
FROM produk
WHERE harga > (SELECT AVG(harga) FROM produk);
-- Customer dengan order tertinggi
SELECT *
FROM customers
WHERE id = (
SELECT customer_id
FROM orders
GROUP BY customer_id
ORDER BY SUM(total) DESC
LIMIT 1
);
Week 13-14: CASE WHEN
Konsep yang harus dikuasai:
- Simple CASE vs Searched CASE
- CASE dalam SELECT
- CASE dalam agregasi (conditional aggregation)
Contoh query:
-- Kategorisasi customer berdasarkan total belanja
SELECT
nama,
total_belanja,
CASE
WHEN total_belanja >= 10000000 THEN 'Gold'
WHEN total_belanja >= 5000000 THEN 'Silver'
ELSE 'Bronze'
END AS tier
FROM (
SELECT
c.nama,
SUM(o.total) AS total_belanja
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.nama
) AS customer_spending;
Week 15-16: Advanced JOINs dan Date Functions
Konsep yang harus dikuasai:
- RIGHT JOIN, FULL OUTER JOIN
- Self JOIN
- CROSS JOIN
- Date functions (EXTRACT, DATE_TRUNC, DATE_DIFF)
Contoh query:
-- Penjualan per bulan
SELECT
DATE_TRUNC('month', tanggal) AS bulan,
SUM(total) AS total_penjualan
FROM orders
WHERE tanggal >= '2024-01-01'
GROUP BY DATE_TRUNC('month', tanggal)
ORDER BY bulan;
-- Customer yang belum order dalam 30 hari terakhir
SELECT c.nama, MAX(o.tanggal) AS last_order
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY c.nama
HAVING MAX(o.tanggal) < CURRENT_DATE - INTERVAL '30 days'
OR MAX(o.tanggal) IS NULL;
Checkpoint Level 2
Sebelum lanjut ke Level 3, pastikan kamu bisa:
- [ ] Menulis query dengan GROUP BY dan HAVING kompleks
- [ ] Buat subquery di berbagai posisi
- [ ] Transform data dengan CASE WHEN
- [ ] Manipulasi dan filter berdasarkan tanggal
- [ ] Solve business questions dengan SQL
Level 3: Advanced SQL (Bulan 5-6)
Di level ini, kamu belajar teknik yang dipake di real analytics work.
Week 17-18: Window Functions
Konsep yang harus dikuasai:
- ROW_NUMBER, RANK, DENSE_RANK
- PARTITION BY
- LAG dan LEAD
- Running totals dengan SUM OVER
Contoh query:
-- Ranking penjualan per kategori
SELECT
kategori,
nama_produk,
total_terjual,
RANK() OVER (
PARTITION BY kategori
ORDER BY total_terjual DESC
) AS ranking
FROM product_sales;
-- Month over month growth
SELECT
bulan,
total_penjualan,
LAG(total_penjualan) OVER (ORDER BY bulan) AS prev_month,
ROUND(
(total_penjualan - LAG(total_penjualan) OVER (ORDER BY bulan))
* 100.0 / LAG(total_penjualan) OVER (ORDER BY bulan),
2
) AS growth_pct
FROM monthly_sales;
Week 19-20: CTEs (Common Table Expressions)
Konsep yang harus dikuasai:
- Basic CTE dengan WITH clause
- Multiple CTEs
- Recursive CTE (optional)
Contoh query:
-- Analisis cohort dengan CTE
WITH first_purchase AS (
SELECT
customer_id,
MIN(DATE_TRUNC('month', tanggal)) AS cohort_month
FROM orders
GROUP BY customer_id
),
monthly_activity AS (
SELECT
customer_id,
DATE_TRUNC('month', tanggal) AS activity_month
FROM orders
GROUP BY customer_id, DATE_TRUNC('month', tanggal)
)
SELECT
fp.cohort_month,
ma.activity_month,
COUNT(DISTINCT ma.customer_id) AS active_users
FROM first_purchase fp
JOIN monthly_activity ma ON fp.customer_id = ma.customer_id
GROUP BY fp.cohort_month, ma.activity_month
ORDER BY fp.cohort_month, ma.activity_month;
Week 21-22: Query Optimization
Konsep yang harus dikuasai:
- EXPLAIN untuk analyze query
- Indexing basics
- Query refactoring
- Avoiding common performance pitfalls
Tips Optimization:
-- Hindari SELECT *
-- BURUK
SELECT * FROM orders;
-- BAIK
SELECT id, customer_id, total FROM orders;
-- Hindari function di WHERE
-- BURUK (ga bisa pake index)
SELECT * FROM orders WHERE YEAR(tanggal) = 2024;
-- BAIK (bisa pake index)
SELECT * FROM orders
WHERE tanggal >= '2024-01-01'
AND tanggal < '2025-01-01';
-- Pake EXISTS instead of IN untuk large datasets
-- LEBIH CEPAT
SELECT * FROM customers c
WHERE EXISTS (
SELECT 1 FROM orders o
WHERE o.customer_id = c.id
);
Week 23-24: Real-world Analytics
Project-based learning:
- Cohort analysis
- Funnel analysis
- Customer segmentation (RFM)
- Time series analysis
Contoh: RFM Segmentation
WITH rfm AS (
SELECT
customer_id,
MAX(tanggal) AS last_order,
COUNT(*) AS frequency,
SUM(total) AS monetary
FROM orders
WHERE tanggal >= CURRENT_DATE - INTERVAL '1 year'
GROUP BY customer_id
),
rfm_scores AS (
SELECT
customer_id,
NTILE(5) OVER (ORDER BY last_order) AS R,
NTILE(5) OVER (ORDER BY frequency) AS F,
NTILE(5) OVER (ORDER BY monetary) AS M
FROM rfm
)
SELECT
customer_id,
R, F, M,
CASE
WHEN R >= 4 AND F >= 4 THEN 'Champions'
WHEN R >= 4 AND F <= 2 THEN 'New Customers'
WHEN R <= 2 AND F >= 4 THEN 'At Risk'
WHEN R <= 2 AND F <= 2 THEN 'Lost'
ELSE 'Regular'
END AS segment
FROM rfm_scores;
Checkpoint Level 3
Sebelum lanjut ke job hunting, pastikan kamu bisa:
- [ ] Pake Window Functions untuk ranking dan running totals
- [ ] Struktur query kompleks dengan CTE
- [ ] Optimize query untuk performance
- [ ] Solve real analytics problems (cohort, funnel, segmentation)
Level 4: Job Ready
Sekarang fokus ke persiapan karir.
Portfolio Projects
Buat 2-3 project yang showcase skill SQL kamu:
Project 1: E-commerce Analytics Dashboard
- Dataset: Kaggle e-commerce dataset
- Deliverables: SQL queries + insights + visualization
- Metrics: Revenue, AOV, customer segments, product performance
Project 2: User Retention Analysis
- Dataset: App usage data atau buat synthetic
- Deliverables: Cohort analysis, retention curves
- Metrics: D1, D7, D30 retention, churn prediction
Project 3: Marketing Campaign Analysis
- Dataset: Marketing attribution data
- Deliverables: Funnel analysis, CAC calculation, ROI per channel
BI Tools Integration
Data Analyst juga perlu bisa connect SQL ke visualization tools:
- Metabase - Open source, gampang dipake
- Tableau - Industry standard
- Looker - Google Cloud based
- Power BI - Microsoft ecosystem
Minimal bisa salah satu. Metabase recommended buat pemula karena gratis dan SQL-centric.
Interview Preparation
Technical Interview:
- Practice SQL problems di LeetCode, HackerRank, StrataScratch
- Review common patterns: ranking, window functions, self-joins
- Prepare for live coding SQL
Behavioral Interview:
- Siapkan cerita tentang project kamu
- STAR method untuk jawab pertanyaan situational
- Tunjukkan analytical thinking process
Take-home Assignment:
- Biasanya dikasih dataset dan beberapa business questions
- Focus on clarity dan insights, bukan cuma query
Apply dan Interview
Di mana cari kerja:
- LinkedIn Jobs
- JobStreet/Indeed
- Tech company career pages (Gojek, Tokopedia, dll)
- Startup job boards (Techinasia, Glints)
Tips:
- Mulai dari posisi junior/entry-level
- Jangan takut apply meskipun ga 100% qualified
- Network dengan Data professionals di LinkedIn
Resources Belajar
Gratis
Interactive Platforms:
- SQLBolt (sqlbolt.com) - Pemula banget
- Mode Analytics SQL Tutorial - Real datasets
- PostgreSQL Tutorial (postgresqltutorial.com)
Practice:
- LeetCode SQL (Medium/Hard free)
- HackerRank SQL
- StrataScratch (beberapa free)
YouTube:
- Alex The Analyst
- Ken Jee
- Data with Mo
Berbayar
- DataCamp SQL Track (~Rp 300rb/bulan)
- Udemy courses (~Rp 150rb one-time)
- LinkedIn Learning (dengan Premium)
Books
- "Learning SQL" by Alan Beaulieu
- "SQL for Data Scientists" by Renee Teate
Tips Belajar Efektif
1. Consistency Over Intensity
Lebih baik 1 jam per hari selama 6 bulan daripada 8 jam per hari selama 2 minggu terus burnout.
2. Learn by Doing
Jangan cuma baca atau nonton. Ketik sendiri query-nya, eksperimen, bikin error, debug.
3. Use Real Datasets
Kaggle punya banyak dataset gratis. Pake yang relevan sama interest kamu.
4. Join Community
- Discord servers (Data Talk, SQL Learning)
- Reddit r/SQL, r/dataanalysis
- LinkedIn groups
5. Teach Others
Bikin blog atau LinkedIn post tentang yang udah kamu pelajari. Teaching is the best way to learn.
Common Questions
Q: Harus belajar database mana?
A: Mulai dari PostgreSQL. Syntax-nya standar dan fiturnya lengkap. Nanti kalau udah kerja, adaptasi ke MySQL atau lainnya gampang.
Q: Perlu belajar Python juga?
A: Untuk Data Analyst junior, SQL cukup. Python bisa dipelajari belakangan. Tapi kalau mau jadi Data Scientist, Python wajib.
Q: Berapa gaji Data Analyst di Indonesia?
A: Fresh graduate: Rp 5-8 juta/bulan
1-3 tahun: Rp 8-15 juta/bulan
Senior: Rp 15-30 juta/bulan
(Tergantung perusahaan dan kota)
Q: Harus punya gelar IT/Statistik?
A: Tidak wajib. Banyak Data Analyst yang self-taught atau dari background lain. Yang penting adalah skill dan portfolio.
Kesimpulan
Roadmap belajar SQL untuk jadi Data Analyst:
- Level 1 (Bulan 1-2): Fundamentals - SELECT, WHERE, JOIN, agregasi dasar
- Level 2 (Bulan 3-4): Intermediate - GROUP BY, subquery, CASE WHEN
- Level 3 (Bulan 5-6): Advanced - Window functions, CTE, optimization
- Level 4: Portfolio, BI tools, interview prep
Yang terpenting adalah konsistensi dan practice dengan real problems. SQL itu skill yang harus dilatih, bukan cuma dibaca.
6 bulan mungkin kedengeran lama, tapi percaya deh, waktu itu bakal berlalu juga. Yang bedain kamu 6 bulan dari sekarang adalah apa yang kamu lakuin hari ini.
Mulai aja dulu. Ga harus perfect. Progress > perfection.
Good luck di journey jadi Data Analyst! Kalau butuh latihan, cek nguliksql.id ya!