Menu Close

SQL SELECT DISTINCT WHERE ORDER BY LIMIT OFFSET

Redundansi adalah salah satu konsep penting dalam basis data. Data yang "redundan" berarti sebuah data dengan makna yang sama disimpan berulang dalam basis data. Konsep redundansi ini penting untuk pencadangan data dan pemulihan (backup/ recovery) untuk mengantisipasi jika terjadi kegagalan/ kerusakan data.

Namun, duplikasi di dalam basis data dihindari karena mengakibatkan kerepotan dan kebingungan pada saat mengambil dan mengelolanya. Misalnya, jika NIK tersimpan di tabel "Profil" dan "Pengguna", maka perubahan nilai tersebut harus dilakukan di kedua tempat.

Penyaringan dan Pengurutan pada Query SQL

Meskipun basis data telah dirancang dengan baik, dimana setiap baris data dijamin unik, bisa jadi hasil query menampilkan data yang berulang. Sebagai contoh, dalam skenario kepemilikan kendaraan, satu kendaraan hanya dimiliki oleh satu orang, tetapi satu orang bisa memiliki lebih dari satu kendaraan. Dalam penyimpanannya, kombinasi identitas pemilik (NIK) dan nomor kendaraan (plat polisi) dapat digunakan sebagai PRIMARY KEY untuk memastikan setiap baris dalam tabel tetap unik.

Akan tetapi, ketika kita hanya ingin menampilkan daftar NIK pemilik kendaraan, hasil query bisa menunjukkan NIK yang berulang, yaitu untuk pemilik yang memiliki lebih dari satu kendaraan. Untuk menghindari duplikasi ini, SQL menyediakan kata kunci DISTINCT untuk mengeliminasi baris dengan nilai kolom yang sama.

Contoh Tabel: Kepemilikan Kendaraan

NIK Plat_Polisi Nama_Pemilik Jenis_Kendaraan
1234567890 B1234ABC Bejo Mobil
1234567890 B5678DEF Bejo Motor
9876543210 D1234XYZ Surti Mobil
9876543210 D5678UVW Surti Motor
1357913579 H9876JKL Amat Mobil
SELECT NIK
FROM KepemilikanKendaraan;
NIK
1234567890
1234567890
9876543210
9876543210
1357913579

Seperti yang terlihat, NIK Bejo dan Surti muncul dua kali karena mereka memiliki lebih dari satu kendaraan.

SELECT DISTINCT NIK
FROM KepemilikanKendaraan;
NIK
1234567890
9876543210
1357913579

Dengan menggunakan kata kunci DISTINCT, duplikasi NIK dihilangkan, sehingga setiap NIK hanya muncul sekali.

DISTINCT: Tampikan Baris yang Berbeda

Perintah SELECT DISTINCT akan menampilkan baris tanpa duplikasi. Sintaksnya sederhana:

SELECT DISTINCT kolom, kolom_lainnya
FROM nama_tabel
WHERE kondisi;

Selain menggunakan kata kunci DISTINCT untuk menghapus duplikasi secara otomatis, bisa juga menggunakan GROUP BY yang akan dipelajari pada sesi berikutnya.

ORDER BY: Urutkan Berdasarkan

Dalam menyusun berbagai jenis laporan, kebutuhan pengurutan data bisa berbeda-beda. Misalnya, tampilkan data kendaraan sesuai urutan nama pemilik, urut tahun beli, urut nomor kendaraan, dsb. SQL menyediakan cara untuk mengurutkan hasil berdasarkan kolom tertentu dengan menggunakan klausa ORDER BY.

SELECT kolom, kolom_lainnya
FROM nama_tabel
WHERE kondisi
ORDER BY kolom ASC/DESC;

Dengan perintah ini, hasil query akan diurutkan secara alfabetis atau numerik. Pengurutan bisa dilakukan secara meningkat naik (ASCending) atau turun (DEScending). ASC lebih mudah dihafalkan dengan ASZ (A Sampai Z, 0-9). Jika tidak dicantumkan, secara otomatis DBMS akan mengasumsikan pengurutan berdasarkan ASC.

LIMIT & OFFSET: Membatasi Jumlah dan Posisi Baris

Sebuat tabel dapat berisi ribuan bahkan jutaan baris. Klausa LIMIT dan OFFSET berguna untuk mengambil sebagian dari hasil query. Klausa LIMIT membatasi jumlah baris yang diambil dan OFFSET menunjukkan berapa baris pertama yang dilewati.

SELECT kolom, kolom_lainnya
FROM nama_tabel
WHERE kondisi
ORDER BY kolom ASC/DESC
LIMIT jumlah_baris OFFSET mulai_dari_baris;

Fitur ini paling sering digunakan pada kasus pagination atau pengelolaan daftar hasil query menjadi halaman. Sebagai contoh, situs media sosial menampilkan daftar foto yang diurutkan berdasarkan popularitas dan waktu. Setiap halaman diwakili oleh kumpulan baris yang diambil menggunakan perintah LIMIT dan OFFSET.

-- 10 baris saja
SELECT foto FROM catatan LIMIT 10;
-- lewati 10 baris pertama
SELECT foto FROM catatan LIMIT 10 OFFSET 10;
SELECT foto FROM catatan LIMIT 10 OFFSET 20;

Kapan LIMIT dan OFFSET dieksekusi dalam [[urutan pemrosesan perintah query]]? Umumnya, klausa ini dieksekusi paling akhir.

Latihan

id judul penulis tahun jenis
1 "Senja di Jakarta" "Mochammad Ali" 1963 "Sastra"
2 "Laskar Pelangi" "Andrea Hirata" 2005 "Fiksi"
3 "Bumi Manusia" "Pramoedya Ananta Toer" 1980 "Sastra"
4 "Negeri 5 Menara" "Ahmad Fuadi" 2009 "Inspirasi"
5 "Habibie & Ainun" "Bacharuddin Jusuf Habibie" 2010 "Biografi"
6 "Laskar Pelangi 2" "Andrea Hirata" 2007 "Fiksi"
7 "Anak Semua Bangsa" "Pramoedya Ananta Toer" 1981 "Sastra"
8 "Edensor" "Andrea Hirata" 2011 "Fiksi"
9 "Rumah Kaca" "Pramoedya Ananta Toer" 1985 "Sastra"
10 "Dilan 1990" "Pidi Baiq" 2014 "Fiksi"
  1. Tampilkan daftar penulis, urut abjad, tanpa duplikat.
  2. Tampilkan empat buku rilis terakhir, urutkan dari terkini hingga terlama.
  3. Tampilkan lima buku pertama urut abjad.
  4. Tampilkan lima buku berikutnya.

Pembahasan

1. Tampilkan daftar penulis, urut abjad, tanpa duplikat.

SELECT DISTINCT penulis
FROM Buku
ORDER BY penulis ASC;
penulis
"Ahmad Fuadi"
"Andrea Hirata"
"Bacharuddin Jusuf Habibie"
"Mochammad Ali"
"Pidi Baiq"
"Pramoedya Ananta Toer"

Penulis "Andrea Hirata" dan "Pramoedya Ananta Toer" muncul beberapa kali di tabel, namun dengan DISTINCT, kita menghilangkan duplikat.

2. Tampilkan empat buku rilis terakhir, urutkan dari terkini hingga terlama.

SELECT judul, tahun
FROM Buku
ORDER BY tahun DESC
LIMIT 4;
judul tahun
"Dilan 1990" 2014
"Edensor" 2011
"Habibie & Ainun" 2010
"Negeri 5 Menara" 2009

Ingat: ASC (ASZ: A sampai Z, 0 s.d. 9). Pengurutan berdasarkan rilis terkini hingga terlama berarti diurutkan dari tahun terbesar hingga terkecil.

3. Tampilkan lima buku pertama urut abjad.

SQL:

SELECT judul
FROM Buku
ORDER BY judul ASC
LIMIT 5;
judul
"Anak Semua Bangsa"
"Bumi Manusia"
"Dilan 1990"
"Edensor"
"Habibie & Ainun"

4. Tampilkan lima buku berikutnya.

SELECT judul
FROM Buku
ORDER BY judul ASC
LIMIT 5 OFFSET 5;
judul
"Laskar Pelangi"
"Laskar Pelangi 2"
"Negeri 5 Menara"
"Rumah Kaca"
"Senja di Jakarta"

Ingat: OFFSET x = lewati x baris.

Posted in Praktikum