Tutorial Belajar MySQL Part 28: Menghapus Duplikasi Data dengan Query DISTINCT

Pada Tutorial Belajar MySQL kali ini kita akan membahas tentang query DISTINCT. Query ini bisa digunakan untuk menghapus atau mengeliminasi duplikasi dari hasil tampilan SELECT.

Sama seperti query AS, ORDER BY, dan LIMIT, query DISTINCT ini digunakan sebagai tambahan dari query utamanya, yakni SELECT.


Mempersiapkan Tabel Sample: daftar_dosen

Dikarenakan keperluan contoh tabel, saya akan mengupdate tabel daftar_dosen dengan data yang baru. Isi tabel daftar_dosen sekarang adalah:

Tabel daftar_dosen ver.2

NIP Nama Dosen No HP Alamat
0160436012 Sabrina Sari 0812349900 Pekanbaru
0260432002 Maya Ari Putri 0812342342 Palembang
0275430005 Susi Indriani 0812656532 Bogor
0480432066 Tia Santrini 0812451177 Padang
0576431001 M. Siddiq 0812979005 Jakarta
0770435006 Rubin Hadi 0812567678 Papua
0869437003 Mustalifah 0812338877 Aceh
1080432007 Arif Budiman 0812456345 Makasar
0785531001 Siswanto 0852878006 Padang
0867221006 Rudi Arwana 0823987598 Jakarta
0173551078 Aria Sulistya 0880743523 Jakarta
0360432014 Suci Syuhada 0812341122 Palembang

Jika anda ingin memakai data tabel yang sama, silahkan input ke dalam tabel_daftar dosen secara manual, atau bisa juga menggunakan query LOAD DATA INFILE di bawah ini. Untuk file txt dapat diperoleh dari sample data tabel dari link berikut: daftar_dosen ver.2.

mysql> TRUNCATE daftar_dosen;
Query OK, 0 rows affected (0.05 sec)

mysql> LOAD DATA INFILE 'D:\\MySQL\\daftar_dosen.txt'
INTO TABLE daftar_dosen
FIELDS TERMINATED BY ','  LINES TERMINATED BY '\r\n';
Query OK, 12 rows affected (0.04 sec)
Records: 12  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0173551078 | Aria Sulistya  | 0880743523 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812342342 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0360432014 | Suci Syuhada   | 0812341122 | Palembang |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0785531001 | Siswanto       | 0852878006 | Padang    |
| 0867221006 | Rudi Arwana    | 0823987598 | Jakarta   |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
12 rows in set (0.00 sec)

Cara Menggunakan Query DISTINCT Untuk Menghapus Duplikasi

Penekanan untuk judul diatas, query DISTINCT digunakan hanya untuk memanipulasi tampilan hasil dari tabel. Duplikasi yang dihapus adalah untuk tampilan data, bukan data asli yang ada di MySQL.

Misalkan dari tabel daftar_dosen kita ingin menampilkan asal kota dari seluruh dosen yang ada. Maka querynya adalah sebagai berikut:

mysql> SELECT alamat FROM daftar_dosen ORDER BY alamat;
+-----------+
| alamat    |
+-----------+
| Aceh      |
| Bogor     |
| Jakarta   |
| Jakarta   |
| Jakarta   |
| Makasar   |
| Padang    |
| Padang    |
| Palembang |
| Palembang |
| Papua     |
| Pekanbaru |
+-----------+
12 rows in set (0.00 sec)

Saya menambahkan perintah ORDER BY alamat agar tampilan lebih rapi (diurutkan berdasarkan alamat).

Dari hasil query, dapat dilihat bahwa nama kota yang sama akan tampil lebih dari sekali. Ini terjadi karena terdapat beberapa dosen yang beralamat di kota yang sama. Jika kita ingin setiap kota hanya muncul 1 kali saja, bisa menggunakan query DISTINCT.


Cara Penulisan Query DISTINCT MySQL

Berikut format dasar penulisan query DISTINCT:

SELECT DISTINCT nama_kolom FROM nama_tabel;
  • nama_kolom adalah nama kolom yang akan ditampilkan.
  • nama_tabel adalah nama tabel dari kolom yang akan ditampilkan.

Sehingga untuk menampilkan seluruh kota 1 kali saja bisa menggunakan query:

mysql> SELECT DISTINCT alamat FROM daftar_dosen ORDER BY alamat;
+-----------+
| alamat    |
+-----------+
| Aceh      |
| Bogor     |
| Jakarta   |
| Makasar   |
| Padang    |
| Palembang |
| Papua     |
| Pekanbaru |
+-----------+
8 rows in set (0.00 sec)

Dengan penambahan perintah DISTINCT di awal query SELECT, maka hanya data yang unik saja yang akan tampil. Seandainya hasil query terdapat data yang sama lebih dari 1 kali tampil, perintah DISTINCT hanya akan menampilkannya 1 kali saja.

Namun jika kita menambah kolom nama_dosen, efeknya menjadi berbeda:

mysql> SELECT DISTINCT nama_dosen,alamat FROM daftar_dosen 
ORDER BY alamat;
+----------------+-----------+
| nama_dosen     | alamat    |
+----------------+-----------+
| Mustalifah     | Aceh      |
| Susi Indriani  | Bogor     |
| Aria Sulistya  | Jakarta   |
| M. Siddiq      | Jakarta   |
| Rudi Arwana    | Jakarta   |
| Arif Budiman   | Makasar   |
| Siswanto       | Padang    |
| Tia Santrini   | Padang    |
| Maya Ari Putri | Palembang |
| Suci Syuhada   | Palembang |
| Rubin Hadi     | Papua     |
| Sabrina Sari   | Pekanbaru |
+----------------+-----------+
12 rows in set (0.06 sec)

Terlihat MySQL tetap menampilkan seluruh isi tabel tanpa ada yang dieliminasi. Ini disebabkan query DISTINCT hanya mengeliminasi query yang unik secara baris per baris (per record).

Dengan mengombinasikan nama_dosen dengan alamat, maka setiap baris dianggap unik, kecuali terdapat nama dosen dan alamat yang persis sama.


Query SELECT … DISTINCT yang kita pelajari kali ini cocok dipakai untuk laporan atau menampilkan sebagian data dari tabel MySQL.

Tutorial selanjutnya akan membahas tentang pengelolaan user, yang dimulai dari Mengenal Superuser root dan Pengertian Privileges MySQL.

47 Comments

  1. Nasir usman
    04 Sep 13
    • Andre
      03 Oct 13
  2. yudi
    15 Dec 13
    • Andre
      17 Dec 13
  3. emi
    02 Jun 14
    • Andre
      03 Jun 14
  4. alung
    20 Jun 14
    • Andre
      21 Jun 14
      • alung
        23 Jun 14
        • alung
          25 Jun 14
        • Anonymous
          10 Dec 14
        • bantu
          04 Sep 17
  5. Imran
    01 Aug 15
  6. yohana
    24 Oct 15
    • Andre
      26 Oct 15
  7. oscar
    28 Oct 15
    • Andre
      29 Oct 15
      • oscar
        30 Oct 15
        • Andre
          30 Oct 15
  8. Lolman
    10 Nov 15
    • Andre
      12 Nov 15
      • Lolman
        12 Nov 15
      • Andre
        12 Nov 15
  9. budi prihanto
    18 Feb 16
    • Andre
      20 Feb 16
      • Ihwani
        23 May 16
        • Andre
          26 May 16
  10. aeron sebagai nick
    01 Jun 16
    • Andre
      03 Jun 16
  11. maskholil
    18 Jun 16
    • Andre
      18 Jun 16
  12. Pati
    03 Jan 17
  13. Riyan Risky
    26 Jan 17
  14. fakhrul
    12 Aug 17
  15. Jejen Juanda
    21 Sep 17
    • Andre
      22 Sep 17
  16. Anonymous
    11 Jan 18
    • Andre
      11 Jan 18
  17. bowo
    11 Jan 18
  18. Agung Chan
    24 Aug 18
  19. Syarif
    07 Dec 18
  20. mazmur
    29 Mar 23
    • Andre
      29 Mar 23
  21. hafidz
    22 Jun 23
    • Andre
      22 Jun 23
  22. dana
    20 Aug 23

Add Comment