{"id":244,"date":"2024-10-20T02:00:43","date_gmt":"2024-10-19T19:00:43","guid":{"rendered":"https:\/\/notes.its.ac.id\/ruhendrawan\/?p=244"},"modified":"2024-10-20T02:12:14","modified_gmt":"2024-10-19T19:12:14","slug":"sql-select-distinct-where","status":"publish","type":"post","link":"https:\/\/notes.its.ac.id\/ruhendrawan\/sql-select-distinct-where","title":{"rendered":"SQL SELECT DISTINCT WHERE ORDER BY LIMIT OFFSET"},"content":{"rendered":"<p>Redundansi adalah salah satu konsep penting dalam basis data. Data yang  &quot;redundan&quot; berarti sebuah data dengan makna yang sama disimpan berulang dalam basis data. Konsep redundansi ini penting untuk pencadangan data dan pemulihan (<em>backup<\/em>\/ <em>recovery<\/em>) untuk mengantisipasi jika terjadi kegagalan\/ kerusakan data.<\/p>\n<p>Namun, duplikasi di dalam basis data dihindari karena mengakibatkan kerepotan dan kebingungan pada saat mengambil dan mengelolanya. Misalnya, jika NIK tersimpan di tabel &quot;Profil&quot; dan &quot;Pengguna&quot;, maka perubahan nilai tersebut harus dilakukan di kedua tempat.<\/p>\n<h2>Penyaringan dan Pengurutan pada Query SQL<\/h2>\n<p>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 (<em>NIK<\/em>) dan nomor kendaraan (plat polisi) dapat digunakan sebagai <code>PRIMARY KEY<\/code> untuk memastikan setiap baris dalam tabel tetap unik.<\/p>\n<p>Akan tetapi, ketika kita hanya ingin menampilkan daftar <em>NIK<\/em> pemilik kendaraan, hasil query bisa menunjukkan <em>NIK<\/em> yang berulang, yaitu untuk pemilik yang memiliki lebih dari satu kendaraan. Untuk menghindari duplikasi ini, SQL menyediakan kata kunci <code>DISTINCT<\/code> untuk mengeliminasi baris dengan nilai kolom yang sama.<\/p>\n<p>Contoh Tabel: Kepemilikan Kendaraan<\/p>\n<table>\n<thead>\n<tr>\n<th>NIK<\/th>\n<th>Plat_Polisi<\/th>\n<th>Nama_Pemilik<\/th>\n<th>Jenis_Kendaraan<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1234567890<\/td>\n<td>B1234ABC<\/td>\n<td>Bejo<\/td>\n<td>Mobil<\/td>\n<\/tr>\n<tr>\n<td>1234567890<\/td>\n<td>B5678DEF<\/td>\n<td>Bejo<\/td>\n<td>Motor<\/td>\n<\/tr>\n<tr>\n<td>9876543210<\/td>\n<td>D1234XYZ<\/td>\n<td>Surti<\/td>\n<td>Mobil<\/td>\n<\/tr>\n<tr>\n<td>9876543210<\/td>\n<td>D5678UVW<\/td>\n<td>Surti<\/td>\n<td>Motor<\/td>\n<\/tr>\n<tr>\n<td>1357913579<\/td>\n<td>H9876JKL<\/td>\n<td>Amat<\/td>\n<td>Mobil<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-sql\">SELECT NIK\nFROM KepemilikanKendaraan;\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>NIK<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1234567890<\/td>\n<\/tr>\n<tr>\n<td>1234567890<\/td>\n<\/tr>\n<tr>\n<td>9876543210<\/td>\n<\/tr>\n<tr>\n<td>9876543210<\/td>\n<\/tr>\n<tr>\n<td>1357913579<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Seperti yang terlihat, <em>NIK<\/em> Bejo dan Surti muncul dua kali karena mereka memiliki lebih dari satu kendaraan.<\/p>\n<pre><code class=\"language-sql\">SELECT DISTINCT NIK\nFROM KepemilikanKendaraan;\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>NIK<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1234567890<\/td>\n<\/tr>\n<tr>\n<td>9876543210<\/td>\n<\/tr>\n<tr>\n<td>1357913579<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dengan menggunakan kata kunci <code>DISTINCT<\/code>, duplikasi <em>NIK<\/em> dihilangkan, sehingga setiap <em>NIK<\/em> hanya muncul sekali.<\/p>\n<h4><code>DISTINCT<\/code>: Tampikan Baris yang Berbeda<\/h4>\n<p>Perintah SELECT DISTINCT akan menampilkan baris tanpa duplikasi. Sintaksnya sederhana:<\/p>\n<pre><code class=\"language-sql\">SELECT DISTINCT kolom, kolom_lainnya\nFROM nama_tabel\nWHERE kondisi;\n<\/code><\/pre>\n<p>Selain menggunakan kata kunci <code>DISTINCT<\/code> untuk menghapus duplikasi secara otomatis, bisa juga menggunakan <code>GROUP BY<\/code> yang akan dipelajari pada sesi berikutnya.<\/p>\n<h4><code>ORDER BY<\/code>: Urutkan Berdasarkan<\/h4>\n<p>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 <code>ORDER BY<\/code>.<\/p>\n<pre><code class=\"language-sql\">SELECT kolom, kolom_lainnya\nFROM nama_tabel\nWHERE kondisi\nORDER BY kolom ASC\/DESC;\n<\/code><\/pre>\n<p>Dengan perintah ini, hasil query akan diurutkan secara alfabetis atau numerik. Pengurutan bisa dilakukan secara meningkat naik (ASCending) atau turun (DEScending). <code>ASC<\/code> lebih mudah dihafalkan dengan ASZ (A Sampai Z, 0-9). Jika tidak dicantumkan, secara otomatis DBMS akan mengasumsikan pengurutan berdasarkan <code>ASC<\/code>.<\/p>\n<h4><code>LIMIT<\/code> &amp; <code>OFFSET<\/code>: Membatasi Jumlah dan Posisi Baris<\/h4>\n<p>Sebuat tabel dapat berisi ribuan bahkan jutaan baris. Klausa <code>LIMIT<\/code> dan <code>OFFSET<\/code> berguna untuk  mengambil sebagian dari hasil query. Klausa <code>LIMIT<\/code>  membatasi jumlah baris yang diambil dan <code>OFFSET<\/code> menunjukkan berapa baris pertama yang dilewati.<\/p>\n<pre><code class=\"language-sql\">SELECT kolom, kolom_lainnya\nFROM nama_tabel\nWHERE kondisi\nORDER BY kolom ASC\/DESC\nLIMIT jumlah_baris OFFSET mulai_dari_baris;\n<\/code><\/pre>\n<p>Fitur ini paling sering digunakan pada kasus <em>pagination<\/em> 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 <code>LIMIT<\/code> dan <code>OFFSET<\/code>.<\/p>\n<pre><code class=\"language-sql\">-- 10 baris saja\nSELECT foto FROM catatan LIMIT 10;\n-- lewati 10 baris pertama\nSELECT foto FROM catatan LIMIT 10 OFFSET 10;\nSELECT foto FROM catatan LIMIT 10 OFFSET 20;\n<\/code><\/pre>\n<blockquote>\n<p>Kapan <code>LIMIT<\/code> dan <em><code>OFFSET<\/code><\/em> dieksekusi dalam [[urutan pemrosesan perintah query]]? Umumnya, klausa ini dieksekusi paling akhir.<\/p>\n<\/blockquote>\n<h3>Latihan<\/h3>\n<table>\n<thead>\n<tr>\n<th>id<\/th>\n<th>judul<\/th>\n<th>penulis<\/th>\n<th>tahun<\/th>\n<th>jenis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>&quot;Senja di Jakarta&quot;<\/td>\n<td>&quot;Mochammad Ali&quot;<\/td>\n<td>1963<\/td>\n<td>&quot;Sastra&quot;<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>&quot;Laskar Pelangi&quot;<\/td>\n<td>&quot;Andrea Hirata&quot;<\/td>\n<td>2005<\/td>\n<td>&quot;Fiksi&quot;<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>&quot;Bumi Manusia&quot;<\/td>\n<td>&quot;Pramoedya Ananta Toer&quot;<\/td>\n<td>1980<\/td>\n<td>&quot;Sastra&quot;<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>&quot;Negeri 5 Menara&quot;<\/td>\n<td>&quot;Ahmad Fuadi&quot;<\/td>\n<td>2009<\/td>\n<td>&quot;Inspirasi&quot;<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>&quot;Habibie &amp; Ainun&quot;<\/td>\n<td>&quot;Bacharuddin Jusuf Habibie&quot;<\/td>\n<td>2010<\/td>\n<td>&quot;Biografi&quot;<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>&quot;Laskar Pelangi 2&quot;<\/td>\n<td>&quot;Andrea Hirata&quot;<\/td>\n<td>2007<\/td>\n<td>&quot;Fiksi&quot;<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>&quot;Anak Semua Bangsa&quot;<\/td>\n<td>&quot;Pramoedya Ananta Toer&quot;<\/td>\n<td>1981<\/td>\n<td>&quot;Sastra&quot;<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>&quot;Edensor&quot;<\/td>\n<td>&quot;Andrea Hirata&quot;<\/td>\n<td>2011<\/td>\n<td>&quot;Fiksi&quot;<\/td>\n<\/tr>\n<tr>\n<td>9<\/td>\n<td>&quot;Rumah Kaca&quot;<\/td>\n<td>&quot;Pramoedya Ananta Toer&quot;<\/td>\n<td>1985<\/td>\n<td>&quot;Sastra&quot;<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td>&quot;Dilan 1990&quot;<\/td>\n<td>&quot;Pidi Baiq&quot;<\/td>\n<td>2014<\/td>\n<td>&quot;Fiksi&quot;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol>\n<li>Tampilkan daftar penulis, urut abjad, tanpa duplikat.<\/li>\n<li>Tampilkan empat buku rilis terakhir, urutkan dari terkini hingga terlama.<\/li>\n<li>Tampilkan lima buku pertama urut abjad.<\/li>\n<li>Tampilkan lima buku berikutnya.<\/li>\n<\/ol>\n<h3>Pembahasan<\/h3>\n<h4>1. Tampilkan daftar penulis, urut abjad, tanpa duplikat.<\/h4>\n<pre><code class=\"language-sql\">SELECT DISTINCT penulis\nFROM Buku\nORDER BY penulis ASC;\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>penulis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>&quot;Ahmad Fuadi&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Andrea Hirata&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Bacharuddin Jusuf Habibie&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Mochammad Ali&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Pidi Baiq&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Pramoedya Ananta Toer&quot;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Penulis &quot;Andrea Hirata&quot; dan &quot;Pramoedya Ananta Toer&quot; muncul beberapa kali di tabel, namun dengan <code>DISTINCT<\/code>, kita menghilangkan duplikat.<\/p>\n<h4>2. Tampilkan empat buku rilis terakhir, urutkan dari terkini hingga terlama.<\/h4>\n<pre><code class=\"language-sql\">SELECT judul, tahun\nFROM Buku\nORDER BY tahun DESC\nLIMIT 4;\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>judul<\/th>\n<th>tahun<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>&quot;Dilan 1990&quot;<\/td>\n<td>2014<\/td>\n<\/tr>\n<tr>\n<td>&quot;Edensor&quot;<\/td>\n<td>2011<\/td>\n<\/tr>\n<tr>\n<td>&quot;Habibie &amp; Ainun&quot;<\/td>\n<td>2010<\/td>\n<\/tr>\n<tr>\n<td>&quot;Negeri 5 Menara&quot;<\/td>\n<td>2009<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p>Ingat: ASC (ASZ: A sampai Z, 0 s.d. 9). Pengurutan berdasarkan rilis terkini hingga terlama berarti diurutkan dari tahun terbesar hingga terkecil.<\/p>\n<\/blockquote>\n<h4>3. Tampilkan lima buku pertama urut abjad.<\/h4>\n<p>SQL:<\/p>\n<pre><code class=\"language-sql\">SELECT judul\nFROM Buku\nORDER BY judul ASC\nLIMIT 5;\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>judul<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>&quot;Anak Semua Bangsa&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Bumi Manusia&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Dilan 1990&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Edensor&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Habibie &amp; Ainun&quot;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>4. Tampilkan lima buku berikutnya.<\/h4>\n<pre><code class=\"language-sql\">SELECT judul\nFROM Buku\nORDER BY judul ASC\nLIMIT 5 OFFSET 5;\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>judul<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>&quot;Laskar Pelangi&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Laskar Pelangi 2&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Negeri 5 Menara&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Rumah Kaca&quot;<\/td>\n<\/tr>\n<tr>\n<td>&quot;Senja di Jakarta&quot;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p>Ingat: OFFSET x = lewati x baris.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Redundansi adalah salah satu konsep penting dalam basis data. Data yang &quot;redundan&quot; berarti sebuah data dengan makna yang sama disimpan berulang dalam basis data. Konsep&hellip;<\/p>\n","protected":false},"author":1286,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-244","post","type-post","status-publish","format-standard","hentry","category-praktikum"],"_links":{"self":[{"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/posts\/244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/users\/1286"}],"replies":[{"embeddable":true,"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/comments?post=244"}],"version-history":[{"count":4,"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/posts\/244\/revisions"}],"predecessor-version":[{"id":248,"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/posts\/244\/revisions\/248"}],"wp:attachment":[{"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/media?parent=244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/categories?post=244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/notes.its.ac.id\/ruhendrawan\/wp-json\/wp\/v2\/tags?post=244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}