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
danOFFSET
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" |
- Tampilkan daftar penulis, urut abjad, tanpa duplikat.
- Tampilkan empat buku rilis terakhir, urutkan dari terkini hingga terlama.
- Tampilkan lima buku pertama urut abjad.
- 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.