Belajar dengan membaca secara berurutan

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 SELECTDISTINCT (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).

Sebelum latihan, pastikan definisi kolom tabel score dan contoh datanya.

① Jalankan PRAGMA table_info(score); untuk memeriksa nama kolom, tipe, dan primary key.

② Jalankan SELECT * FROM score LIMIT 5; untuk melihat 5 baris pertama.

SQL Editor

Jalankan query untuk melihat hasil

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.

Cara kerja DISTINCT
SELECT name FROM score;SELECT DISTINCT name FROM score;AliceAliceAliceBobAliceCarolBobDaveBob ...EveTotal 15 baris (dengan duplikat)Total 5 baris (setelah dedup)
SELECT tanpa DISTINCT mengembalikan baris duplikat apa adanya; dengan DISTINCT, baris dengan nilai yang sama menyatu menjadi satu.
-- 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;

Jalankan dua query berdampingan dalam satu konsol untuk melihat bagaimana hasilnya berubah dengan dan tanpa DISTINCT. (Setelah kamu menjalankannya dengan benar, penjelasannya akan muncul.)

① Dari score, ambil kolom name tanpa `DISTINCT`.

② Di konsol yang sama, ambil kolom name dengan `DISTINCT`.

③ Pastikan yang pertama mengembalikan 15 baris (setiap nama 3 kali), dan yang kedua mengembalikan 5 baris (duplikat menyatu).

SQL Editor

Jalankan query untuk melihat hasil

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

ORDER BY ascending dan descending
Asli(tanpa urutan)ORDER BY score(ASC = ascending)ORDER BY score DESC(descending)Alice 92Dave 65Carol 95Bob 76Bob 76Alice 92Carol 95Eve 87Eve 87Dave 65Alice 92Bob 76Eve 87Carol 95Dave 65
Tanpa ORDER BY, urutan tidak terjamin; menentukan ASC / DESC menghasilkan urutan yang kamu inginkan. Default adalah ASC (ascending).
-- 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.

Bayangkan layar daftar skor di mana kamu ingin siswa diurutkan berdasarkan nama, dan di dalam setiap siswa, mata pelajaran dengan skor terendah ditampilkan dulu.

① Dari score, ambil kolom name, subject, dan score.

② Sortir berdasarkan `name` ascending, dan di dalam nama yang sama berdasarkan `score` ascending.

③ Pastikan hasilnya 15 baris, dimulai dengan Alice Science 78 dan diakhiri dengan Eve English 93.

SQL Editor

Jalankan query untuk melihat hasil

Urutan nama yang sama dengan Latihan 2, tapi kali ini kamu ingin mata pelajaran dengan skor tertinggi ditampilkan dulu di dalam setiap siswa.

① Dari score, ambil kolom name, subject, dan score.

② Sortir berdasarkan `name` ascending, dan di dalam nama yang sama berdasarkan `score` descending.

③ Pastikan hasilnya 15 baris, dimulai dengan Alice Math 92 dan diakhiri dengan Eve Science 86.

SQL Editor

Jalankan query untuk melihat hasil

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."

Paginasi dengan LIMIT dan OFFSET
Setelah ORDER BY(semua 7 baris)LIMIT 3(halaman 1)LIMIT 3 OFFSET 3(halaman 2)1st Carol 95ambillewati2nd Eve 93ambillewati3rd Alice 92ambillewati4th Bob 90ambil5th Bob 88ambil6th Eve 87ambil7th Eve 86
Terhadap hasil yang sudah disortir ORDER BY, LIMIT memutuskan "berapa banyak yang diambil" dan OFFSET memutuskan "berapa banyak yang dilewati dari awal." Rumus dasarnya adalah OFFSET = (nomor halaman - 1) × baris per halaman.
-- 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
HalamanBaris per halamanOFFSETLIMITPeringkat target
15051–5
25556–10
3510511–15
1100101–10
210101011–20
1200201–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`.

Bayangkan dashboard yang butuh widget "top 5 di seluruh mata pelajaran."

① Dari score, ambil kolom name, subject, dan score.

② Sortir berdasarkan `score` descending, dan ambil hanya 5 baris pertama.

③ Pastikan hasilnya 5 baris, dimulai dengan Carol Math 95 dan diakhiri dengan Bob English 88.

SQL Editor

Jalankan query untuk melihat hasil

Bayangkan tombol "Tampilkan lebih banyak" di dashboard yang memuat 5 item berikutnya setelah top 5.

① Urutan sortir yang sama dengan Latihan 4 (score descending), mengambil kolom name, subject, dan score.

Lewati 5 baris pertama dan ambil 5 berikutnya (peringkat 6–10).

③ Pastikan hasilnya 5 baris, dimulai dengan Eve Math 87 dan diakhiri dengan Alice Science 78.

SQL Editor

Jalankan query untuk melihat hasil
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Mana yang menggambarkan SELECT DISTINCT dengan benar?

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;?