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!
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:
- Menggunakan ruang penyimpanan yang sia-sia
- Dapat menyebabkan perhitungan dan laporan yang salah
- 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