Belajar SQL: dari SELECT sampai JOIN
Catatan belajar SQL dasar untuk menganalisis data: SELECT, WHERE, ORDER BY, GROUP BY, hingga menggabungkan tabel dengan JOIN.
Mengapa SQL adalah titik awal
Sebelum bisa membangun dashboard atau model data, langkah pertama yang saya pelajari adalah mengambil data dari tempatnya tinggal: database. SQL (Structured Query Language) adalah bahasa standar untuk berkomunikasi dengan basis data relasional. Untuk seorang analis data, menguasai SQL dasar bukan pilihan tambahan, tetapi keterampilan fundamental.
Pada tulisan ini, saya membagikan catatan belajar saya mulai dari query paling sederhana sampai menggabungkan beberapa tabel dengan JOIN. Semua contoh di bawah ini menggunakan dataset sintetis untuk demonstrasi.
1. Mengambil data dengan SELECT
Query paling dasar adalah mengambil semua kolom dari satu tabel:
SELECT *
FROM orders;
Namun, dalam analisis nyata, mengambil semua kolom (*) biasanya tidak efisien. Lebih baik ambil hanya kolom yang dibutuhkan:
SELECT order_id, order_date, customer_id, total_amount
FROM orders;
Hasilnya adalah sebuah tabel yang berisi hanya keempat kolom tersebut.
2. Filter data dengan WHERE
Terkadang kita tidak butuh semua baris, hanya yang memenuhi kriteria tertentu. Di sinilah WHERE berguna:
SELECT order_id, order_date, total_amount
FROM orders
WHERE order_date >= '2025-01-01'
AND total_amount > 1000000;
Query di atas hanya akan menampilkan pesanan yang dilakukan sejak 1 Januari 2025 dengan total di atas 1.000.000.
Operator yang sering saya gunakan:
=,!=,>,<,>=,<=untuk perbandingan.AND,OR,NOTuntuk menggabungkan kondisi.INuntuk mengecek apakah nilai ada dalam daftar.BETWEENuntuk rentang nilai.LIKEuntuk pencarian pola teks.
Contoh menggunakan LIKE:
SELECT customer_name
FROM customers
WHERE customer_name LIKE 'A%';
3. Mengurutkan hasil dengan ORDER BY
Hasil query tidak selalu datang dalam urutan yang kita inginkan. ORDER BY mengurutkan data berdasarkan satu atau lebih kolom:
SELECT order_id, total_amount
FROM orders
ORDER BY total_amount DESC;
DESC berarti menurun (terbesar ke terkecil), sementara ASC berarti naik (terkecil ke terbesar).
4. Mengelompokkan dan meringkas dengan GROUP BY
Dalam analisis, kita sering perlu meringkas data, misalnya total penjualan per pelanggan:
SELECT customer_id, COUNT(*) AS jumlah_pesanan, SUM(total_amount) AS total_penjualan
FROM orders
GROUP BY customer_id
ORDER BY total_penjualan DESC;
Fungsi agregasi yang sering digunakan:
COUNT()— menghitung baris.SUM()— jumlah total.AVG()— nilai rata-rata.MIN()danMAX()— nilai terkecil dan terbesar.
5. Filter hasil agregasi dengan HAVING
WHERE digunakan untuk menyaring baris sebelum grouping, sedangkan HAVING digunakan untuk menyaring hasil setelah grouping:
SELECT customer_id, COUNT(*) AS jumlah_pesanan
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 3;
Query ini hanya menampilkan pelanggan yang memiliki lebih dari tiga pesanan.
6. Menggabungkan tabel dengan JOIN
Data dalam basis data relasial biasanya tersebar di beberapa tabel. Untuk mendapatkan gambaran lengkap, kita perlu menggabungkannya. Ini adalah bagian yang paling banyak saya pelajari dan juga tempat banyak kesalahan awal terjadi.
Tabel contoh:
customers:customer_id,customer_name,cityorders:order_id,customer_id,order_date,total_amount
INNER JOIN
INNER JOIN hanya menampilkan baris yang memiliki kecocokan di kedua tabel:
SELECT c.customer_name, o.order_id, o.total_amount
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id;
Jika ada pelanggan yang belum pernah memesan, pelanggan tersebut tidak akan muncul di hasil ini.
LEFT JOIN
LEFT JOIN menampilkan semua baris dari tabel kiri (customers), meskipun tidak ada kecocokan di tabel kanan (orders):
SELECT c.customer_name, o.order_id, o.total_amount
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id;
Pelanggan tanpa pesanan akan muncul dengan NULL pada kolom order_id dan total_amount. Ini sangat berguna untuk mencari pelanggan yang belum aktif.
Kesalahan yang saya alami
Saat pertama kali belajar JOIN, saya sering lupa menentukan kondisi ON, sehingga hasil query menghasilkan duplikasi baris yang tidak masuk akal (cross join tersembunyi). Pelajaran yang saya dapatkan: selalu periksa jumlah baris hasil query dan bandingkan dengan jumlah baris asli di setiap tabel.
Kesimpulan
SQL adalah fondasi yang kuat untuk analisis data. Dengan menguasai SELECT, WHERE, ORDER BY, GROUP BY, HAVING, dan JOIN, kita sudah bisa menjawab sebagian besar pertanyaan bisnis dari data yang tersimpan di basis data relasional.
Tulisan ini adalah catatan pribadi saat belajar dan bukan panduan resmi. Semua contoh menggunakan data sintetis.