Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Cara menghapus duplikat di SQL

Pengantar

  • Ada beberapa aturan khusus yang perlu diikuti saat membuat objek database. Untuk meningkatkan kinerja database, kunci utama, indeks berkerumun dan tidak berkerumun, dan batasan harus ditetapkan ke tabel. Meskipun kami mengikuti semua aturan ini, baris duplikat mungkin masih terjadi dalam tabel.
  • Itu selalu merupakan praktik yang baik untuk menggunakan kunci database. Menggunakan kunci database akan mengurangi kemungkinan mendapatkan catatan duplikat dalam tabel. Tetapi jika catatan duplikat sudah ada dalam tabel, ada cara khusus yang digunakan untuk menghapus catatan duplikat ini.

Cara menghapus Baris Duplikat

  • Penggunaan HAPUS GABUNG pernyataan untuk menghapus baris duplikat

Pernyataan DELETE JOIN disediakan di MySQL yang membantu menghapus baris duplikat dari tabel.

Pertimbangkan database dengan nama "studentdb". Kami akan membuat tabel siswa ke dalamnya.

mysql> USE studentdb;
Database changed
mysql> CREATE TABLE student (Stud_ID INT, Stud_Name VARCHAR(20), Stud_City VARCHAR(20), Stud_email VARCHAR(255), Stud_Age INT);
Query OK, 0 rows affected (0.15 sec)

Kami telah berhasil membuat tabel 'student' di database 'studentdb'.

Sekarang, kita akan menulis query berikut untuk memasukkan data ke tabel siswa.

mysql> INSERT INTO student VALUES (1, "Ankit", "Nagpur", "[email protected]", 32);
Query OK, 1 row affected (0.08 sec)


mysql> INSERT INTO student VALUES (2, "Soham", "Nanded", "[email protected]", 35);
Query OK, 1 row affected (0.08 sec)


mysql> INSERT INTO student VALUES (3, "Soham", "Nanded", "[email protected]", 26);
Query OK, 1 row affected (0.04 sec)


mysql> INSERT INTO student VALUES (4, "Ravi", "Chandigarh", "[email protected]", 19);
Query OK, 1 row affected (0.09 sec)


mysql> INSERT INTO student VALUES (5, "Ravi", "Chandigarh", "[email protected]", 19);
Query OK, 1 row affected (0.09 sec)


mysql> INSERT INTO student VALUES (6, "Shyam", "Dehradun", "[email protected]", 22);
Query OK, 1 row affected (0.09 sec)


mysql> INSERT INTO student VALUES (7, "Manthan", "Ambala", "[email protected]", 24);
Query OK, 1 row affected (0.08 sec)


mysql> INSERT INTO student VALUES (8, "Neeraj", "Noida", "[email protected]", 25);
Query OK, 1 row affected (0.04 sec)


mysql> INSERT INTO student VALUES (9, "Anand", "Kashmir", "[email protected]", 20);
Query OK, 1 row affected (0.07 sec)


mysql> INSERT INTO student VALUES (10, "Raju", "Shimla", "[email protected]", 29);
Query OK, 1 row affected (0.13 sec)


mysql> INSERT INTO student VALUES (11, "Raju", "Shimla", "[email protected]", 29);
Query OK, 1 row affected (0.08 sec)

Sekarang, kita akan mengambil semua record dari tabel siswa. Kami akan mempertimbangkan tabel dan database ini untuk semua contoh berikut.

mysql> SELECT *FROM student;
+---------+-----------+------------+-------------------------+----------+
| Stud_ID | Stud_Name | Stud_City  | Stud_email              | Stud_Age |
+---------+-----------+------------+-------------------------+----------+
|       1 | Ankit     | Nagpur     | [email protected]       |       32 |
|       2 | Soham     | Nanded     | [email protected]       |       35 |
|       3 | Soham     | Nanded     | [email protected]       |       26 |
|       4 | Ravi      | Chandigarh | [email protected]         |       19 |
|       5 | Ravi      | Chandigarh | [email protected]         |       19 |
|       6 | Shyam     | Dehradun   | [email protected]     |       22 |
|       7 | Manthan   | Ambala     | [email protected] |       24 |
|       8 | Neeraj    | Noida      | [email protected]   |       25 |
|       9 | Anand     | Kashmir    | [email protected]        |       20 |
|      10 | Raju      | Shimla     | [email protected]         |       29 |
|      11 | Raju      | Shimla     | [email protected]         |       29 |
+---------+-----------+------------+-------------------------+----------+
11 rows in set (0.00 sec)

Contoh 1:

Tulis kueri untuk menghapus baris duplikat dari tabel siswa menggunakan HAPUS GABUNG pernyataan.

mysql> DELETE s1 FROM student s1 INNER JOIN student s2 WHERE s1.Stud_ID < s2.Stud_ID AND s1.Stud_email = s2.Stud_email;

Kami telah menggunakan kueri DELETE dengan INNER JOIN. Untuk mengimplementasikan INNER JOIN pada satu tabel, kita telah membuat dua instance s1 dan s2. Kemudian, dengan bantuan klausa WHERE, kami telah memeriksa dua kondisi untuk mengetahui baris duplikat di tabel siswa. Jika id email di dua record yang berbeda adalah sama dan student id berbeda, maka akan diperlakukan sebagai record duplikat sesuai dengan ketentuan klausa WHERE.

Keluaran:

Query OK, 3 rows affected (0.20 sec)

Hasil query di atas menunjukkan bahwa ada tiga record duplikat yang ada di tabel siswa.

Kami akan menggunakan kueri SELECT untuk menemukan catatan duplikat yang telah dihapus.

mysql> SELECT *FROM student;
+---------+-----------+------------+-------------------------+----------+
| Stud_ID | Stud_Name | Stud_City  | Stud_email              | Stud_Age |
+---------+-----------+------------+-------------------------+----------+
|       1 | Ankit     | Nagpur     | [email protected]       |       32 |
|       3 | Soham     | Nanded     | [email protected]       |       26 |
|       5 | Ravi      | Chandigarh | [email protected]         |       19 |
|       6 | Shyam     | Dehradun   | [email protected]     |       22 |
|       7 | Manthan   | Ambala     | [email protected] |       24 |
|       8 | Neeraj    | Noida      | [email protected]   |       25 |
|       9 | Anand     | Kashmir    | [email protected]        |       20 |
|      11 | Raju      | Shimla     | [email protected]         |       29 |
+---------+-----------+------------+-------------------------+----------+
8 rows in set (0.00 sec)

Sekarang, hanya ada 8 catatan yang ada di tabel siswa karena tiga catatan duplikat dihapus dari tabel yang dipilih saat ini. Sesuai dengan kondisi berikut:

s1.Stud_ID < s2.Stud_ID AND s1.Stud_email = s2.Stud_email;

Jika id email dari dua catatan adalah sama, maka karena tanda kurang dari digunakan di antara id siswa, hanya catatan dengan ID karyawan yang lebih besar yang akan disimpan, dan catatan duplikat lainnya akan dihapus di antara dua catatan.

Contoh 2:

Tulis kueri untuk menghapus baris duplikat dari tabel siswa menggunakan pernyataan delete join sambil menyimpan catatan duplikat dengan id karyawan yang lebih rendah dan menghapus yang lain.

mysql> DELETE s1 FROM student s1 INNER JOIN student s2 WHERE s1.Stud_ID > s2.Stud_ID AND s1.Stud_email = s2.Stud_email;

Kami telah menggunakan kueri DELETE dengan INNER JOIN. Untuk mengimplementasikan INNER JOIN pada satu tabel, kita telah membuat dua instance s1 dan s2. Kemudian, dengan bantuan klausa WHERE, kami telah memeriksa dua kondisi untuk mengetahui baris duplikat di tabel siswa. Jika id email yang ada di dua record yang berbeda adalah sama dan student id berbeda, maka akan diperlakukan sebagai record duplikat sesuai dengan ketentuan klausa WHERE.

Keluaran:

Query OK, 3 rows affected (0.09 sec)

Hasil query di atas menunjukkan bahwa ada tiga record duplikat yang ada di tabel siswa.

Kami akan menggunakan kueri SELECT untuk menemukan catatan duplikat yang telah dihapus.

mysql> SELECT *FROM student;
+---------+-----------+------------+-------------------------+----------+
| Stud_ID | Stud_Name | Stud_City  | Stud_email              | Stud_Age |
+---------+-----------+------------+-------------------------+----------+
|       1 | Ankit     | Nagpur     | [email protected]       |       32 |
|       2 | Soham     | Nanded     | [email protected]       |       35 |
|       4 | Ravi      | Chandigarh | [email protected]         |       19 |
|       6 | Shyam     | Dehradun   | [email protected]     |       22 |
|       7 | Manthan   | Ambala     | [email protected] |       24 |
|       8 | Neeraj    | Noida      | [email protected]   |       25 |
|       9 | Anand     | Kashmir    | [email protected]        |       20 |
|      10 | Raju      | Shimla     | [email protected]         |       29 |
+---------+-----------+------------+-------------------------+----------+
8 rows in set (0.00 sec)

Sekarang, hanya ada 8 catatan yang ada di tabel siswa karena tiga catatan duplikat dihapus dari tabel yang dipilih saat ini. Sesuai dengan kondisi berikut:

s1.Stud_ID > s2.Stud_ID AND s1.Stud_email = s2.Stud_email;

Jika id email dari dua catatan sama karena tanda lebih besar dari digunakan di antara id siswa, hanya catatan dengan id karyawan yang lebih kecil yang akan disimpan, dan catatan duplikat lainnya akan dihapus di antara dua catatan.

  • Penggunaan tabel perantara untuk menghapus baris duplikat

Langkah-langkah berikut harus diikuti saat menghapus baris duplikat dengan bantuan tabel perantara.

  1. Tabel baru harus dibuat, yang akan sama dengan tabel sebenarnya.
  2. Tambahkan baris berbeda dari tabel yang sebenarnya ke tabel yang baru dibuat.
  3. Lepaskan tabel yang sebenarnya dan ganti nama tabel baru dengan nama yang sama dengan tabel yang sebenarnya.

Contoh:

Tulis kueri untuk menghapus rekaman duplikat dari tabel siswa dengan menggunakan tabel perantara.

Langkah 1:

Pertama, kita akan membuat tabel perantara yang akan sama dengan tabel karyawan.

mysql> CREATE TABLE temp_student LIKE student;
Query OK, 0 rows affected (0.14 sec)

Di sini, 'karyawan' adalah tabel asli dan 'temp_student' adalah tabel perantara.

Langkah 2:

Sekarang, kita hanya akan mengambil record unik dari tabel siswa dan memasukkan semua record yang diambil ke tabel temp_student.

mysql> INSERT INTO temp_student SELECT *FROM student GROUP BY Stud_email;
Query OK, 8 rows affected (0.12 sec)
Records: 8  Duplicates: 0  Warnings: 0

Di sini, sebelum memasukkan catatan yang berbeda dari tabel siswa ke temp_student, semua catatan duplikat difilter oleh Stud_email. Kemudian, hanya record dengan id email unik yang dimasukkan ke temp_student.

Langkah 3:

Kemudian, kita akan menghapus tabel siswa dan mengganti nama tabel temp_student menjadi tabel siswa.

mysql> DROP TABLE student;
Query OK, 0 rows affected (0.08 sec)
mysql> ALTER TABLE temp_student RENAME TO student;
Query OK, 0 rows affected (0.08 sec)

Tabel siswa berhasil dihapus, dan temp_student diganti namanya menjadi tabel siswa, yang hanya berisi catatan unik.

Kemudian, kita perlu memverifikasi bahwa tabel siswa sekarang hanya berisi catatan unik. Untuk memverifikasi ini, kami telah menggunakan kueri SELECT untuk melihat data yang ada di tabel siswa.

mysql> SELECT *FROM student;

Keluaran:

+---------+-----------+------------+-------------------------+----------+
| Stud_ID | Stud_Name | Stud_City  | Stud_email              | Stud_Age |
+---------+-----------+------------+-------------------------+----------+
|       9 | Anand     | Kashmir    | [email protected]        |       20 |
|       1 | Ankit     | Nagpur     | [email protected]       |       32 |
|       7 | Manthan   | Ambala     | [email protected] |       24 |
|       8 | Neeraj    | Noida      | [email protected]   |       25 |
|      10 | Raju      | Shimla     | [email protected]         |       29 |
|       4 | Ravi      | Chandigarh | [email protected]         |       19 |
|       6 | Shyam     | Dehradun   | [email protected]     |       22 |
|       2 | Soham     | Nanded     | [email protected]       |       35 |
+---------+-----------+------------+-------------------------+----------+
8 rows in set (0.00 sec)

Sekarang, hanya ada 8 catatan yang ada di tabel siswa karena tiga catatan duplikat dihapus dari tabel yang dipilih saat ini. Pada langkah 2, saat mengambil catatan yang berbeda dari tabel asli dan memasukkannya ke dalam tabel perantara, klausa GROUP BY digunakan di Stud_email, jadi semua catatan dimasukkan berdasarkan id email siswa. Di sini, hanya catatan dengan id karyawan yang lebih rendah yang disimpan di antara catatan duplikat secara default, dan yang lainnya dihapus.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Melacak CLR_MANUAL_EVENT yang tinggi menunggu

  2. Cara Membuat Model Database Dari Awal

  3. Pertanyaan Wawancara Insinyur Data Dengan Python

  4. SAP Lumira dan Jembatan JDBC-ODBC

  5. Logging Minimal dengan INSERT…PILIH ke dalam Tabel Heap