SQL (Structured Query Language) adalah bahasa yang digunakan untuk berkomunikasi dengan database. Sebagai data analyst, hampir semua pekerjaan sehari-hari — mulai dari mengambil data, membersihkannya, hingga membuatnya jadi laporan — dilakukan dengan SQL. Artikel ini akan membahas query-query paling penting yang wajib kamu kuasai.

Tidak perlu menghapal semua syntax sekaligus. Fokus pahami konsepnya, lama-lama akan hafal dengan sendirinya setelah sering dipakai.

Apa Itu SQL dan Kenapa Penting?

Database adalah tempat di mana data disimpan secara terstruktur dalam bentuk tabel — mirip seperti spreadsheet Excel, tapi jauh lebih powerful dan bisa menampung jutaan bahkan miliaran baris data. SQL adalah "bahasa" yang kamu gunakan untuk meminta dan memanipulasi data di dalam database tersebut.

"SQL is the most important skill for a data analyst. If you can only learn one thing, learn SQL." — Mode Analytics

Query 1 : SELECT & FROM — Mengambil Data

Ini adalah query paling dasar. SELECT digunakan untuk memilih kolom apa yang ingin kamu tampilkan, dan FROM menentukan dari tabel mana data tersebut diambil.

#
Ambil semua kolom

Gunakan tanda bintang (*) untuk mengambil semua kolom sekaligus dari sebuah tabel. Ini berguna saat kamu ingin mengeksplorasi struktur tabel untuk pertama kalinya.

#
Pilih kolom tertentu

Sebutkan nama kolom yang diinginkan, pisahkan dengan koma. Ini lebih efisien karena hanya mengambil data yang benar-benar kamu butuhkan, sehingga query lebih cepat.

#
Beri alias pada kolom

Gunakan kata kunci AS untuk memberi nama alias pada kolom agar hasil query lebih mudah dibaca, terutama saat nama kolom aslinya panjang atau kurang deskriptif.

SQL
-- Ambil semua kolom
SELECT *
FROM orders;

-- Pilih kolom tertentu
SELECT customer_id, order_date, total_amount
FROM orders;

-- Beri alias pada kolom
SELECT 
  customer_id AS id_pelanggan,
  order_date  AS tanggal_pesan,
  total_amount AS total_belanja
FROM orders;

Query 2 : WHERE — Memfilter Data

WHERE digunakan untuk menyaring baris data berdasarkan kondisi tertentu. Tanpa WHERE, kamu akan mengambil seluruh isi tabel. Dengan WHERE, kamu bisa fokus hanya pada data yang relevan.

#
PHP
$code       = $step['code']        ?? '';
$codeConfig = [
                'language' => $step['code_language'] ?? $step['language'] ?? 'php',
                'filename' => $step['code_filename'] ?? $step['filename'] ?? '',
                'code'     => $code,
              ];
Filter berdasarkan satu kondisi

Gunakan operator perbandingan seperti =, >, <, >=, <=, atau != untuk memfilter baris. Pastikan nilai teks diapit tanda kutip tunggal.

#
Kombinasikan kondisi dengan AND / OR

Gunakan AND jika semua kondisi harus terpenuhi sekaligus. Gunakan OR jika cukup salah satu kondisi yang terpenuhi.

#
Filter dengan daftar nilai menggunakan IN

Alih-alih menulis banyak OR, gunakan IN untuk memfilter berdasarkan sekumpulan nilai sekaligus. Lebih ringkas dan mudah dibaca.

SQL
-- Filter satu kondisi
SELECT * FROM orders WHERE status = 'completed';

-- Kombinasi AND
SELECT * FROM orders WHERE status = 'completed' AND total_amount > 500000;

-- Menggunakan IN
SELECT * FROM orders WHERE status IN ('completed', 'processing', 'shipped');

Hati-hati dengan NULL! Nilai NULL tidak bisa dibandingkan dengan = biasa. Gunakan IS NULL atau IS NOT NULL untuk mengecek nilai kosong.

SQL
-- Mencari baris yang kolom email-nya kosong
SELECT *
FROM customers
WHERE email IS NULL;

-- Mencari baris yang kolom email-nya terisi
SELECT *
FROM customers
WHERE email IS NOT NULL;

Query 3 : GROUP BY & Aggregate Functions — Merangkum Data

Salah satu tugas utama data analyst adalah membuat ringkasan (summary) dari data mentah. GROUP BY memungkinkan kamu mengelompokkan baris berdasarkan satu atau beberapa kolom, lalu menghitung statistik untuk setiap kelompok menggunakan fungsi agregasi.

#
Kenali fungsi agregasi utama

Tambahkan GROUP BY diikuti nama kolom yang ingin dijadikan kelompok. Setiap kolom yang muncul di SELECT (selain fungsi agregasi) wajib ada di GROUP BY.

#
Gunakan GROUP BY untuk mengelompokkan

Tambahkan GROUP BY diikuti nama kolom yang ingin dijadikan kelompok. Setiap kolom yang muncul di SELECT (selain fungsi agregasi) wajib ada di GROUP BY.

#
Filter hasil agregasi dengan HAVING

WHERE tidak bisa digunakan untuk memfilter hasil fungsi agregasi. Gunakan HAVING sebagai gantinya — ia bekerja setelah proses pengelompokan selesai.

SQL
-- Hitung total pesanan per status
SELECT 
  status,
  COUNT(*) AS jumlah_pesanan,
  SUM(total_amount) AS total_pendapatan,
  AVG(total_amount) AS rata_rata_nilai
FROM orders
GROUP BY status;

-- Tampilkan hanya kelompok dengan total pendapatan > 10 juta
SELECT 
  status,
  SUM(total_amount) AS total_pendapatan
FROM orders
GROUP BY status
HAVING SUM(total_amount) > 10000000;

Query 4: JOIN — Menggabungkan Tabel

Di dunia nyata, data jarang tersimpan dalam satu tabel saja. JOIN adalah cara untuk menggabungkan dua atau lebih tabel berdasarkan kolom yang berelasi. Ini adalah salah satu skill SQL yang paling membedakan data analyst junior dan senior.

#
Pahami jenis-jenis JOIN

INNER JOIN mengambil baris yang ada di kedua tabel (irisan). LEFT JOIN mengambil semua baris dari tabel kiri, dan mencocokkannya dengan tabel kanan (yang tidak cocok akan menjadi NULL). RIGHT JOIN adalah kebalikannya.

#
Tulis INNER JOIN

Gunakan ON untuk menentukan kolom mana yang menjadi penghubung antara dua tabel. Biasanya ini adalah primary key di satu tabel dan foreign key di tabel lain.

#
Gunakan LEFT JOIN untuk data yang tidak selalu ada

Gunakan LEFT JOIN saat kamu ingin tetap menampilkan semua data dari tabel utama meskipun tidak ada data pasangannya di tabel kedua. Contohnya: tampilkan semua pelanggan, termasuk yang belum pernah pesan.

SQL
-- INNER JOIN: pesanan + nama pelanggan
SELECT 
  o.order_id,
  c.name AS nama_pelanggan,
  o.order_date,
  o.total_amount
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id;

-- LEFT JOIN: semua pelanggan + jumlah pesanan (termasuk yg belum pesan)
SELECT 
  c.name AS nama_pelanggan,
  COUNT(o.order_id) AS jumlah_pesanan
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY c.name;

Tips: Selalu beri alias pada nama tabel (misalnya FROM orders o) agar query lebih pendek dan mudah dibaca, terutama saat menggabungkan banyak tabel sekaligus.

Query 5 : ORDER BY & LIMIT — Mengurutkan dan Membatasi Hasil

ORDER BY digunakan untuk mengurutkan hasil query, sedangkan LIMIT membatasi jumlah baris yang dikembalikan. Kombinasi keduanya sangat berguna untuk membuat laporan "Top N" — misalnya 10 produk terlaris atau 5 pelanggan dengan belanja terbanyak.

SQL
-- 10 pesanan dengan nilai terbesar
SELECT 
  order_id,
  customer_id,
  total_amount
FROM orders
ORDER BY total_amount DESC
LIMIT 10;

-- Pelanggan yang paling sering belanja
SELECT 
  c.name,
  COUNT(o.order_id) AS total_pesanan
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.name
ORDER BY total_pesanan DESC
LIMIT 5;

Urutan Eksekusi Query SQL

Banyak pemula bingung mengapa query mereka error padahal syntax-nya terlihat benar. Salah satu penyebabnya adalah tidak memahami urutan eksekusi SQL — yang berbeda dari urutan penulisannya. Memahami ini akan membantu kamu debug query dengan lebih cepat.

#
FROM & JOIN (pertama dieksekusi)

SQL pertama-tama menentukan tabel mana yang akan digunakan dan melakukan join antar tabel. Ini adalah fondasi dari semua operasi berikutnya.

#
WHERE (filter baris)

Setelah tabel terbentuk, SQL memfilter baris berdasarkan kondisi WHERE. Karena ini terjadi sebelum SELECT, kamu tidak bisa menggunakan alias kolom di WHERE.

#
GROUP BY → HAVING → SELECT → ORDER BY → LIMIT (terakhir)

Pengelompokan dilakukan setelah filter, lalu HAVING memfilter hasil grup. Baru kemudian SELECT memilih kolom yang ditampilkan, diurutkan dengan ORDER BY, dan dipotong dengan LIMIT.

SQL
-- Urutan PENULISAN (cara kamu menulis):
SELECT    -- 5
FROM      -- 1
JOIN      -- 2
WHERE     -- 3
GROUP BY  -- 4
HAVING    -- 4b
ORDER BY  -- 6
LIMIT     -- 7

-- Contoh query lengkap yang menggabungkan semua konsep:
SELECT 
  c.name AS nama_pelanggan,
  COUNT(o.order_id) AS jumlah_pesanan,
  SUM(o.total_amount) AS total_belanja
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE o.order_date >= '2024-01-01'
GROUP BY c.name
HAVING COUNT(o.order_id) >= 3
ORDER BY total_belanja DESC
LIMIT 10;

Langkah Selanjutnya

Selamat! Kamu sudah mempelajari query-query inti yang digunakan setiap hari oleh data analyst profesional. Dengan menguasai SELECT, WHERE, GROUP BY, JOIN, ORDER BY, dan LIMIT, kamu sudah bisa menjawab sebagian besar pertanyaan bisnis dari data. Langkah selanjutnya adalah berlatih dengan dataset nyata — semakin banyak berlatih, semakin intuitif SQL terasa.

Rekomendasi platform latihan SQL gratis: Mode Analytics SQL Tutorial, SQLZoo, LeetCode (bagian Database), dan HackerRank SQL. Coba selesaikan minimal 2–3 soal per hari untuk membangun muscle memory.