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, NOT untuk menggabungkan kondisi.
  • IN untuk mengecek apakah nilai ada dalam daftar.
  • BETWEEN untuk rentang nilai.
  • LIKE untuk 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() dan MAX() — 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, city
  • orders: 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.