Kamus · Bab 3
Database & SQL
Istilah struktur database relasional, klausa dan operator SQL dasar, JOIN, hingga subquery dan window function.
Database Relasional
Cara menyimpan data dalam beberapa tabel terpisah yang saling berkaitan, alih-alih memaksakan seluruh data ke dalam satu tabel besar.
Struktur ini menghindari redundansi dan inkonsistensi data, karena setiap informasi hanya perlu tersimpan satu kali di tabel yang sesuai.
Data pelanggan disimpan terpisah dari data pesanan, dengan kedua tabel dihubungkan melalui kolom identitas pelanggan.
Primary Key
Kolom yang berfungsi sebagai identitas unik untuk setiap baris dalam sebuah tabel, nilainya tidak boleh sama antar baris dan tidak boleh kosong.
Wajib dimiliki setiap tabel agar setiap baris dapat dibedakan secara pasti, meski ada kemungkinan kemiripan nilai pada kolom lain.
Kolom id_pelanggan pada tabel Pelanggan memastikan dua pelanggan dengan nama yang sama tetap dapat dibedakan.
Foreign Key
Kolom pada suatu tabel yang merujuk pada Primary Key di tabel lain, menciptakan relasi antar kedua tabel tersebut.
Nilai pada Foreign Key harus sesuai dengan nilai yang ada pada Primary Key tabel yang dirujuk.
Kolom id_pelanggan pada tabel Pesanan merupakan Foreign Key yang merujuk pada Primary Key id_pelanggan di tabel Pelanggan.
Kardinalitas
Jenis hubungan yang terjadi antara dua tabel yang saling terkait, terdiri dari satu ke banyak, banyak ke banyak, dan satu ke satu.
Menjadi acuan penting saat merancang struktur tabel maupun saat memahami bagaimana dua tabel seharusnya digabungkan.
Satu pelanggan dapat memiliki banyak pesanan (satu ke banyak), namun satu pesanan hanya dilakukan oleh satu pelanggan tertentu.
ERD (Entity Relationship Diagram)
Diagram visual yang menggambarkan struktur tabel dalam sebuah database beserta relasi antar tabelnya.
Digunakan sebagai acuan untuk memahami struktur database secara keseluruhan sebelum menyusun query yang melibatkan banyak tabel.
Sebuah ERD menampilkan tabel Pelanggan, Produk, dan Pesanan beserta garis penghubung yang menandakan relasi satu ke banyak di antaranya.
DDL (Data Definition Language)
Kumpulan perintah SQL yang berfungsi mendefinisikan atau mengubah struktur database, seperti membuat atau menghapus tabel.
Umumnya menjadi tanggung jawab administrator database atau Data Engineer, bukan pekerjaan harian Data Analyst.
Perintah CREATE TABLE yang mendefinisikan struktur kolom sebuah tabel baru merupakan bagian dari DDL.
DML (Data Manipulation Language)
Kumpulan perintah SQL yang berfungsi mengelola isi data di dalam tabel, termasuk mengambil, menambah, mengubah, dan menghapus data.
Menjadi bagian terbesar dari pekerjaan sehari-hari Data Analyst, khususnya perintah untuk mengambil dan menampilkan data.
Perintah SELECT, INSERT, UPDATE, dan DELETE seluruhnya tergolong DML karena mengelola isi data, bukan struktur tabel.
SELECT
Perintah SQL paling dasar untuk mengambil dan menampilkan data dari sebuah tabel.
SELECT nama_kolom FROM nama_tabel;
SELECT nama, alamat FROM pelanggan; menampilkan kolom nama dan alamat dari seluruh baris pada tabel pelanggan.
WHERE
Klausa SQL yang menyaring baris data berdasarkan kondisi tertentu, ditempatkan setelah FROM.
SELECT * FROM tabel WHERE kondisi;
SELECT * FROM pesanan WHERE nilai_transaksi > 500000; hanya menampilkan baris dengan nilai transaksi di atas 500.000.
LIKE
Operator SQL yang digunakan bersama WHERE untuk mencari data berdasarkan pola teks, memakai simbol wildcard seperti tanda persen.
WHERE kolom LIKE 'pola%'
WHERE nama LIKE 'Budi%' mencari seluruh nama yang diawali kata "Budi".
BETWEEN
Operator SQL untuk mencari data dalam rentang nilai tertentu, baik angka maupun tanggal, bersifat inklusif pada kedua batasnya.
WHERE kolom BETWEEN nilai_awal AND nilai_akhir
WHERE tanggal BETWEEN '2026-01-01' AND '2026-01-31' menampilkan seluruh data sepanjang bulan Januari.
LIMIT
Klausa SQL yang membatasi jumlah baris yang ditampilkan dari hasil sebuah query.
SELECT * FROM tabel ORDER BY kolom DESC LIMIT 10;
Menggabungkan ORDER BY dan LIMIT untuk menampilkan sepuluh transaksi dengan nilai tertinggi dari keseluruhan data.
GROUP BY
Klausa SQL yang mengelompokkan baris data berdasarkan nilai unik pada satu atau lebih kolom, sebelum dihitung menggunakan fungsi agregasi.
SELECT kolom, SUM(kolom_lain) FROM tabel GROUP BY kolom;
SELECT kategori, SUM(nilai_transaksi) FROM pesanan GROUP BY kategori; menghasilkan total nilai transaksi untuk setiap kategori.
HAVING
Klausa SQL yang menyaring hasil kelompok setelah proses GROUP BY dan agregasi selesai dihitung, berbeda dari WHERE yang menyaring baris mentah sebelum pengelompokan.
GROUP BY kolom HAVING kondisi_agregasi
GROUP BY kategori HAVING SUM(nilai_transaksi) > 50000000 hanya menampilkan kategori dengan total transaksi di atas lima puluh juta.
CASE WHEN
Sintaks SQL untuk logika kondisional, menampilkan hasil berbeda tergantung kondisi yang terpenuhi, setara dengan fungsi IF pada spreadsheet.
CASE WHEN kondisi THEN hasil ELSE hasil_lain END
CASE WHEN nilai < 100000 THEN 'Kecil' ELSE 'Besar' END AS kategori mengelompokkan nilai transaksi ke dalam dua kategori.
JOIN
Perintah SQL untuk menggabungkan baris dari dua tabel atau lebih berdasarkan kolom penghubung, biasanya relasi Primary Key dan Foreign Key.
SELECT kolom FROM tabel1 JOIN tabel2 ON tabel1.kolom = tabel2.kolom;
Menggabungkan tabel Pesanan dan Pelanggan untuk menampilkan nama pelanggan beserta nilai transaksinya dalam satu hasil tampilan.
INNER JOIN
Jenis JOIN yang hanya menampilkan baris yang memiliki kecocokan di kedua tabel yang digabungkan.
Baris yang tidak memiliki pasangan cocok di tabel lainnya tidak akan ikut ditampilkan sama sekali dalam hasil.
Menggabungkan tabel Pelanggan dan Pesanan menggunakan INNER JOIN hanya menampilkan pelanggan yang memang memiliki riwayat transaksi.
LEFT JOIN
Jenis JOIN yang menampilkan seluruh baris dari tabel di sisi kiri, dilengkapi data yang cocok dari tabel kanan; baris tanpa kecocokan tetap tampil dengan nilai kosong (NULL) pada kolom tabel kanan.
Digunakan ketika seluruh data dari tabel utama perlu tetap ditampilkan, termasuk yang tidak memiliki data terkait di tabel lainnya.
Menampilkan seluruh pelanggan termasuk yang belum pernah bertransaksi, dengan kolom nilai transaksi kosong bagi mereka yang belum berbelanja.
RIGHT JOIN
Jenis JOIN yang menampilkan seluruh baris dari tabel di sisi kanan, dilengkapi data yang cocok dari tabel kiri; baris tanpa kecocokan tetap tampil dengan nilai kosong pada kolom tabel kiri.
Jarang dipakai secara langsung karena hasil yang sama dapat dicapai dengan menukar urutan tabel dan menggunakan LEFT JOIN.
RIGHT JOIN antara Pesanan dan Pelanggan menghasilkan output yang identik dengan LEFT JOIN antara Pelanggan dan Pesanan yang urutannya ditukar.
Subquery
Query SQL yang ditempatkan di dalam query SQL lainnya, digunakan untuk menghasilkan nilai atau data perantara sebelum diproses lebih lanjut oleh query utama.
SELECT * FROM pesanan WHERE nilai_transaksi > (SELECT AVG(nilai_transaksi) FROM pesanan); menampilkan transaksi yang nilainya di atas rata-rata seluruh transaksi.
Digunakan ketika sebuah nilai perantara perlu dihitung terlebih dahulu sebelum dipakai menyaring atau membandingkan data pada query utama.
CTE (Common Table Expression)
Cara menulis subquery dengan struktur lebih rapi dan mudah dibaca, menggunakan klausa WITH untuk memberi nama pada tahap perhitungan perantara.
WITH nama_cte AS (SELECT ...) SELECT * FROM nama_cte;
Digunakan ketika logika query melibatkan banyak tahapan, sehingga lebih mudah ditelusuri dibanding subquery bersarang.
Window Function
Kelompok fungsi SQL yang menghitung nilai berdasarkan konteks baris-baris lain, tanpa meringkas data menjadi satu baris seperti pada GROUP BY.
RANK() OVER (PARTITION BY kategori ORDER BY total_penjualan DESC) memberi peringkat produk terlaris secara terpisah untuk setiap kategori.
Digunakan ketika perhitungan perlu memperhitungkan konteks baris lain, namun detail setiap baris tetap perlu ditampilkan.
ROW_NUMBER
Window function SQL yang memberikan nomor urut unik untuk setiap baris berdasarkan urutan yang ditentukan.
ROW_NUMBER() OVER (ORDER BY kolom DESC)
Memberikan nomor urut 1, 2, 3, dan seterusnya pada setiap transaksi berdasarkan nilai transaksi dari yang tertinggi, tanpa ada nomor yang sama meski nilainya identik.
RANK
Window function SQL yang memberikan peringkat pada setiap baris, dengan nilai yang sama mendapat peringkat sama dan melompati nomor peringkat berikutnya.
RANK memberi peringkat sama untuk nilai identik, sementara ROW_NUMBER selalu memberi nomor berbeda meski nilainya sama.
Dua transaksi dengan nilai tertinggi yang identik sama-sama mendapat peringkat 1, sementara transaksi berikutnya langsung mendapat peringkat 3, bukan 2.
PARTITION BY
Klausa pada window function yang memungkinkan perhitungan dilakukan secara terpisah untuk setiap kelompok data, tanpa meringkas baris seperti pada GROUP BY.
RANK() OVER (PARTITION BY kolom_kelompok ORDER BY kolom_nilai DESC)
Memberi peringkat produk terlaris secara terpisah untuk setiap kategori, sehingga setiap kategori memiliki produk peringkat 1 masing-masing.