SQL - Menguruskan Duplikat: Panduan untuk Pemula

Hai sana, para ahli SQL masa depan! Hari ini, kita akan melihat dunia yang menarik tentang menguruskan duplikat dalam SQL. Jangan khawatir jika Anda belum pernah menulis baris kode sebelumnya - saya akan menjadi panduan ramah Anda dalam perjalanan ini, dan kita akan berjalan langkah demi langkah. Pada akhir panduan ini, Anda akan menguruskan duplikat seperti seorang pro!

SQL - Handling Duplicates

Mengapa Menguruskan Duplikat dalam SQL Penting?

Bayangkan Anda mengatur sebuah pesta dan Anda punya daftar tamu. Anda tentu tidak mau orang yang sama terdaftar dua kali, kan? Itu tepatnya mengapa menguruskan duplikat dalam SQL sangat penting. Dalam dunia basis data, data duplikat dapat menyebabkan berbagai masalah:

  1. Menggunakan ruang penyimpanan yang sia-sia
  2. Dapat menyebabkan perhitungan dan laporan yang salah
  3. Menyulitkan pemeliharaan data

Biarkan saya share cerita singkat. Pada hari-hari awal saya sebagai administrator basis data, saya pernah melihat beberapa duplikat di dalam basis data pelanggan. Hasilnya? Tim pemasaran kami mengirimkan email promosi yang sama ke beberapa pelanggan beberapa kali. Tak perlu dikatakan, pelanggan-pelanggan itu tidak senang, dan saya belajar lesuannya secara keras!

Mencegah Masukan Duplikat

Cara terbaik untuk menguruskan duplikat adalah mencegah mereka memasuki basis data Anda dari awal. Berikut adalah beberapa metode untuk mencapai ini:

1. Menggunakan Kunci Primer (Primary Key)

Kunci primer adalah kolom (atau kombinasi kolom) yang secara unik mengidentifikasi setiap baris dalam tabel. Dalam definisinya, itu tidak dapat mengandung duplikat.

CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);

Dalam contoh ini, StudentID adalah kunci primer kami. SQL secara otomatis akan mencegah setiap nilai StudentID duplikat dari dimasukkan.

2. Menggunakan Batasan Unik (Unique Constraint)

Batasan unik mirip dengan kunci primer tapi dapat diterapkan pada kolom yang bukan kunci primer.

CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Email VARCHAR(100) UNIQUE,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);

Di sini, kita menambahkan batasan unik pada kolom Email. Hal ini memastikan bahwa tidak ada dua karyawan yang memiliki alamat email yang sama.

3. Menggunakan INSERT IGNORE

Jika Anda menggunakan MySQL, Anda dapat menggunakan pernyataan INSERT IGNORE untuk diam-diam mengabaikan masukan duplikat:

INSERT IGNORE INTO Students (StudentID, FirstName, LastName)
VALUES (1, 'John', 'Doe');

Jika sudah ada siswa dengan StudentID 1, pernyataan ini tidak akan melempar kesalahan - ia hanya akan mengabaikan masukan duplikat.

Menghitung dan Mengidentifikasi Duplikat

kadang-kadang, duplikat menyusup ke dalam data meskipun kita berusaha keras. Mari belajar bagaimana mencarinya!

Menghitung Duplikat

Untuk menghitung duplikat, kita dapat menggunakan klausa GROUP BY bersamaan dengan klausa HAVING:

SELECT FirstName, LastName, COUNT(*) as Count
FROM Students
GROUP BY FirstName, LastName
HAVING Count > 1;

Kueri ini mengelompokkan siswa berdasarkan nama pertama dan nama belakang, kemudian menunjukkan hanya kelompok yang memiliki lebih dari satu entri. Itu seperti mengatakan, "Tampilkankan semua nama yang muncul lebih dari sekali, dan berapa kali mereka muncul."

Mengidentifikasi Duplikat Spesifik

Untuk melihat baris duplikat yang sebenarnya, kita dapat menggunakan self-join:

SELECT s1.*
FROM Students s1
JOIN Students s2 ON
s1.FirstName = s2.FirstName AND
s1.LastName = s2.LastName AND
s1.StudentID > s2.StudentID;

Kueri ini membandingkan setiap catatan siswa dengan setiap catatan siswa lainnya. Jika ia menemukan dua catatan dengan nama yang sama tapi ID yang berbeda, ia akan menunjukkan catatan dengan ID yang lebih tinggi. Itu seperti mengatakan, "Tampilkankan semua siswa yang memiliki nama yang sama seperti siswa lain, tapi hanya tunjukkan yang memiliki nomor ID yang lebih tinggi."

Menghapus Duplikat dari Tabel

Sekarang kita telah menemukan duplikat, mari membersihkannya!

1. Menggunakan DISTINCT

Kata kunci DISTINCT adalah cara paling sederhana untuk menghapus duplikat dari hasil kueri:

SELECT DISTINCT FirstName, LastName
FROM Students;

Kueri ini akan menunjukkan setiap kombinasi unik nama pertama dan nama belakang, terlepas dari berapa kali itu muncul dalam tabel.

2. Menggunakan GROUP BY

GROUP BY juga dapat digunakan untuk menghapus duplikat:

SELECT FirstName, LastName
FROM Students
GROUP BY FirstName, LastName;

Kueri ini memberikan hasil yang sama seperti DISTINCT, tetapi dapat lebih fleksibel saat Anda memerlukan fungsi agregat.

3. Menghapus Duplikat Secara Permanen

Jika Anda perlu menghapus baris duplikat dari tabel Anda, Anda dapat menggunakan subquery:

DELETE s1 FROM Students s1
INNER JOIN Students s2
WHERE
s1.FirstName = s2.FirstName AND
s1.LastName = s2.LastName AND
s1.StudentID > s2.StudentID;

Kueri ini menghapus semua siswa duplikat, menjaga hanya siswa dengan StudentID terendah. Hatikan dengan baik saat menggunakan ini - tidak ada tombol undo dalam SQL!

Berikut adalah tabel yang menggabungkan metode yang telah kita diskusikan:

Metode kasus Contoh
Kunci Primer Mencegah duplikat CREATE TABLE Students (StudentID INT PRIMARY KEY, ...);
Batasan Unik Mencegah duplikat dalam kolom tertentu CREATE TABLE Employees (Email VARCHAR(100) UNIQUE, ...);
INSERT IGNORE Diam-diam mengabaikan duplikat (MySQL) INSERT IGNORE INTO Students ...
COUNT(*) dengan GROUP BY Menghitung duplikat SELECT ..., COUNT(*) ... GROUP BY ... HAVING Count > 1;
Self-Join Mengidentifikasi duplikat spesifik SELECT s1.* FROM Students s1 JOIN Students s2 ON ...
DISTINCT Menghapus duplikat dari hasil kueri SELECT DISTINCT FirstName, LastName FROM Students;
DELETE dengan Self-Join Menghapus duplikat secara permanen DELETE s1 FROM Students s1 INNER JOIN Students s2 WHERE ...

Dan begitu saja! Anda sekarang dilengkapi pengetahuan untuk menguruskan duplikat seperti seorang pro. Ingat, dengan kekuatan yang besar datang tanggung jawab yang besar - selalu periksa kueri Anda sebelum menjalankan, terutama saat menghapus data. Semoga basis data Anda selalu bebas dari duplikat!

Credits: Image by storyset