Soal 1Mana yang menggambarkan SELECT DISTINCT dengan benar?
DISTINCT, ORDER BY, LIMIT — Membentuk Result Set
Artikel ini adalah bagian dari Kursus SQL, yang membantu Anda menguasai keterampilan SQL praktis dari nol, mulai dari dasar hingga kueri kompleks dan penyetelan SQL.
DISTINCT mengambil nama unik dari tabel score, ORDER BY mengurutkan menurut nilai, LIMIT dan OFFSET memotong TOP 5 atau halaman ke-2 di browser kamu.
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;?