SQL Dasar: SELECT sampai WHERE
Ambil data dari database dengan SELECT, saring dengan WHERE, urutkan dengan ORDER BY.
SQL itu seperti memesan di warteg
Bayangkan database sebagai dapur restoran yang raksasa, dan SQL sebagai cara kamu memesan ke kokinya. Kamu tidak perlu tahu cara masaknya, bumbu apa yang dipakai, atau kompor mana yang menyala. Kamu cukup bilang "nasi goreng pedas, dua porsi" dan makanannya datang. SQL bekerja persis seperti itu: kamu bilang data apa yang kamu mau, database yang memikirkan caranya. Ini yang disebut bahasa deklaratif, dan ini alasan SQL terasa lebih mudah dipelajari daripada bahasa pemrograman biasa.
Kenapa analyst wajib SQL walau sudah jago pandas
Alasan pertama: data perusahaan tidak tinggal di file CSV di laptop kamu. Data tinggal di database server, dan tabel transaksi bisa berisi ratusan juta baris. Kamu tidak bisa, dan tidak boleh, mengunduh semuanya lalu membukanya di pandas. Laptop kamu akan menyerah duluan, dan tim data engineer akan menegurmu.
Alasan kedua: SQL memfilter data di dalam database, sebelum data dikirim kepadamu. Butuh transaksi bulan Januari dari arsip 5 tahun? Database hanya mengirimkan 1/60 bagiannya. Bandingkan dengan mengambil semua data lalu memfilter di pandas: lambat, boros memori, dan boros bandwidth.
Alasan ketiga: kemandirian dan karier. Tanpa SQL, kamu tergantung orang lain untuk mengambilkan data setiap kali ada pertanyaan bisnis. Dengan SQL, kamu jawab sendiri dalam hitungan menit. Tidak heran hampir semua lowongan data analyst menulis "wajib SQL". Bisa pandas tapi tidak bisa SQL itu seperti bisa masak tapi tidak bisa belanja bahan sendiri.
Contoh minimal: kenalan dengan sintaks
Tidak perlu install database server. SQLite sudah built-in di Python, jadi kamu bisa latihan langsung:
import sqlite3
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("CREATE TABLE pelanggan (nama TEXT, kota TEXT, belanja INTEGER)")
cur.execute("INSERT INTO pelanggan VALUES ('Budi', 'Jakarta', 800000), ('Sari', 'Bandung', 300000)")
for row in cur.execute("SELECT nama, belanja FROM pelanggan WHERE kota = 'Jakarta'"):
print(row) # ('Budi', 800000)
con.close()Baca querynya seperti kalimat biasa: SELECT (kolom apa) -> FROM (dari tabel mana) -> WHERE (dengan syarat apa). Urutan klausa ini baku di semua database: SELECT, FROM, WHERE, ORDER BY, LIMIT.
Contoh realistis: dataset toko
Sekarang ke contoh yang mirip kerjaan nyata. Tabel penjualan(id, tanggal, produk, kategori, jumlah, harga_satuan):
-- Omzet per kategori selama Januari 2026, urut dari yang terbesar
SELECT kategori,
SUM(jumlah * harga_satuan) AS omzet
FROM penjualan
WHERE tanggal BETWEEN '2026-01-01' AND '2026-01-31'
GROUP BY kategori
ORDER BY omzet DESC;Pola "saring dulu dengan WHERE, rangkum, lalu urutkan" ini akan kamu pakai di sekitar 90% query kerjaan. Operator WHERE yang paling sering dipakai: =, !=, >, <, BETWEEN, IN, LIKE. Contoh LIKE untuk mencari nama yang mengandung teks tertentu:
SELECT nama FROM pelanggan WHERE nama LIKE '%budi%';
SELECT nama FROM pelanggan WHERE kota IN ('Jakarta', 'Bandung', 'Surabaya');Jebakan 1: SELECT bintang di production
SALAH (di query production):
SELECT * FROM penjualan WHERE tanggal >= '2026-01-01';BENAR:
SELECT tanggal, produk, jumlah, harga_satuan
FROM penjualan
WHERE tanggal >= '2026-01-01';SELECT * mengambil semua kolom, termasuk yang tidak kamu butuhkan seperti foto produk atau catatan internal. Di tabel kecil tidak terasa, tapi di tabel 50 kolom dengan jutaan baris, query-mu jadi lambat dan boros memori. Tulis kolom yang dibutuhkan secara eksplisit, itu juga membuat query-mu terdokumentasi sendiri.
Jebakan 2: UPDATE atau DELETE tanpa WHERE
Ini jebakan paling legendaris dan paling mahal di dunia SQL:
-- SALAH: lupa WHERE, SEMUA baris ikut berubah!
UPDATE pelanggan SET kota = 'Jakarta';
-- BENAR: kunci dulu baris targetnya
UPDATE pelanggan SET kota = 'Jakarta' WHERE id = 42;Tanpa WHERE, UPDATE mengubah seluruh tabel dan DELETE menghapus seluruh tabel. Kebiasaan aman: tulis WHERE-nya dulu sebelum menulis SET, dan untuk DELETE selalu cek dulu dengan SELECT memakai WHERE yang sama sebelum mengeksekusi yang asli.
Catatan teknis: Teks di SQL dibungkus kutip satu (
'Jakarta'), bukan kutip dua. Di banyak database kutip dua artinya nama kolom atau tabel. Satu hal lagi:NULLtidak bisa dibandingkan dengan=. PakaiIS NULL(contoh:WHERE kota IS NULL), karenakota = NULLhasilnya selalu unknown dan barisnya tidak pernah muncul.
Tantangan
Top pelanggan Jakarta
Tabel pelanggan(nama, kota, total_belanja). Tulis query untuk mengambil 5 pelanggan Jakarta dengan belanja terbesar: kolom nama dan total_belanja, urut menurun, batasi 5.