Soal 1Mana yang menggambarkan SELECT DISTINCT dengan benar?
DISTINCT, ORDER BY, LIMIT — Membentuk Result Set
Pelajari SQL DISTINCT, ORDER BY, LIMIT, dan OFFSET. Mencakup deduplikasi, sorting, pembatasan baris, dan paginasi dengan OFFSET — semua berjalan langsung di browser kamu pada dataset score yang dimuat dari CSV.
Data yang akan kita pakai — tabel score yang dimuat dari CSV
Artikel ini memakai tabel `score` yang dimuat otomatis dari file CSV untuk menelusuri empat konstruksi yang membentuk output SELECT — DISTINCT (deduplikasi), ORDER BY (sorting), LIMIT (jumlah baris), dan OFFSET (skip dari awal).
Tabel score punya 5 kolom — id / name / subject / score / recorded_on — dengan total 15 baris: 5 siswa (Alice / Bob / Carol / Dave / Eve) masing-masing mengambil 3 mata pelajaran (Math / English / Science).
DISTINCT — kembalikan hanya baris unik
Hasil SELECT bisa berisi baris yang sama beberapa kali. Misalnya, mengambil hanya kolom name dari score mengembalikan 15 baris — Alice / Bob / Carol / Dave / Eve, masing-masing tiga mata pelajaran.
Menulis `SELECT DISTINCT col, ...` menggabungkan baris duplikat menjadi satu di result set. Dengan banyak kolom, baris dianggap duplikat saat kombinasi kolomnya cocok.
-- Daftar nama siswa unik
SELECT DISTINCT name FROM score;
-- Daftar mata pelajaran unik
SELECT DISTINCT subject FROM score;
-- Dedup pada kombinasi (name, subject) (= semua 15 baris unik)
SELECT DISTINCT name, subject FROM score;
ORDER BY — sortir hasilnya
SQL tidak menjamin urutan baris secara default — SELECT * FROM score; membiarkan implementasi DB memutuskan urutan baris yang dikembalikan. Saat kamu ingin urutan tertentu, tambahkan `ORDER BY col [ASC|DESC]`.
- ASC (ascending / kecil → besar) adalah default dan bisa dihilangkan
- DESC (descending / besar → kecil) harus ditulis eksplisit
- Daftar banyak kolom dipisah koma memberimu sort multi-level: baris yang sama di kolom pertama akan diurutkan oleh kolom kedua
-- 1) Ascending kolom tunggal (ASC bisa dihilangkan)
SELECT name, score FROM score ORDER BY score;
-- 2) Descending kolom tunggal
SELECT name, score FROM score ORDER BY score DESC;
-- 3) Sort banyak kolom (berdasarkan subject, lalu skor tertinggi dulu di dalam subject)
SELECT name, subject, score FROM score ORDER BY subject ASC, score DESC;
Detail kecil tentang ORDER BY
- ORDER BY ada setelah `WHERE` dan sebelum `LIMIT`. Hafalkan urutan SELECT cols FROM tabel WHERE kondisi ORDER BY col DESC LIMIT N; dan kamu tidak akan tersandung.
- Sisi kanan ORDER BY bisa menerima nomor kolom (ORDER BY 2 DESC mengurutkan berdasarkan kolom ke-2 yang dipilih), tapi itu menurunkan keterbacaan — konvensinya adalah pakai nama kolom.
- Di konsol kursus ini, sorting string adalah huruf besar → huruf kecil (urutan ASCII). Beberapa DB memperlakukan 'A' dan 'a' sebagai setara.
LIMIT dan OFFSET — persempit jumlah dan paginasi
Saat result set membesar — 100 baris, 10.000 baris — membuang semuanya ke layar itu berat dan pengguna tidak bisa menyerapnya. Menambahkan `LIMIT N` mengembalikan hanya N baris pertama. Gabungkan dengan `OFFSET M` untuk melewati M baris pertama lalu mengambil N, yang memberimu paginasi untuk hal seperti "item 6–10" atau "item 11–20."
-- 1) Ambil top 5 (ranking TOP 5)
SELECT name, subject, score FROM score
ORDER BY score DESC
LIMIT 5;
-- 2) Ambil item 6 sampai 10 (halaman 2)
SELECT name, subject, score FROM score
ORDER BY score DESC
LIMIT 5 OFFSET 5;
-- 3) Rumus paginasi: halaman N, K baris per halaman
-- LIMIT K OFFSET (N - 1) * K
-- misal halaman 3, 5 per halaman → LIMIT 5 OFFSET 10
| Halaman | Baris per halaman | OFFSET | LIMIT | Peringkat target |
|---|---|---|---|---|
| 1 | 5 | 0 | 5 | 1–5 |
| 2 | 5 | 5 | 5 | 6–10 |
| 3 | 5 | 10 | 5 | 11–15 |
| 1 | 10 | 0 | 10 | 1–10 |
| 2 | 10 | 10 | 10 | 11–20 |
| 1 | 20 | 0 | 20 | 1–20 |
LIMIT tanpa ORDER BY tidak menjamin urutan
Menulis hanya `LIMIT` dan melewatkan `ORDER BY` seperti SELECT * FROM score LIMIT 5; membuat pilihan 5 baris mana yang dikembalikan terserah implementasi DB. Bahkan di DB yang cenderung mengembalikan baris dalam urutan insert (seperti SQLite), standar SQL bilang urutannya tidak terdefinisi. Di MySQL / PostgreSQL, index dan execution plan bisa menukar baris mana yang kamu dapat.
Untuk apa pun yang urutannya penting — ranking, paginasi, "N item pertama" — selalu tulis `ORDER BY` sebelum `LIMIT`.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa yang dikembalikan SELECT name, score FROM score ORDER BY score DESC;?
Soal 3Baris apa yang dikembalikan SELECT * FROM score ORDER BY score DESC LIMIT 5 OFFSET 10;?