Perintah DELETE
📚 Pengenalan Perintah DELETE
Perintah DELETE digunakan untuk menghapus data dari tabel. Anda dapat menghapus satu baris, beberapa baris, atau semua baris dalam tabel.
Sintaks Dasar DELETE
Sintaks dasar perintah DELETE adalah:
DELETE FROM nama_tabel WHERE kondisi;
Peringatan: Jika Anda tidak menggunakan klausa WHERE dalam perintah DELETE, semua baris dalam tabel akan dihapus!
Contoh Penggunaan DELETE
Misalkan kita memiliki tabel 'pelanggan' dengan data berikut:
| id | nama | kota | usia | |
|---|---|---|---|---|
| 1 | John Doe | john@example.com | Jakarta | 30 |
| 2 | Jane Smith | jane@example.com | Bandung | 25 |
| 3 | Bob Johnson | bob@example.com | Jakarta | 35 |
| 4 | Alice Brown | alice@example.com | Surabaya | 28 |
Menghapus Satu Baris
Untuk menghapus pelanggan dengan id 2:
DELETE FROM pelanggan WHERE id = 2;
Menghapus Beberapa Baris
Untuk menghapus semua pelanggan dari Jakarta:
DELETE FROM pelanggan WHERE kota = 'Jakarta';
Menghapus Berdasarkan Beberapa Kondisi
Untuk menghapus pelanggan dari Jakarta yang usianya di atas 30:
DELETE FROM pelanggan WHERE kota = 'Jakarta' AND usia > 30;
DELETE dengan Subquery
Anda dapat menggunakan subquery dalam perintah DELETE:
-- Menghapus pelanggan yang tidak memiliki pesanan DELETE FROM pelanggan WHERE id NOT IN (SELECT DISTINCT pelanggan_id FROM pesanan);
DELETE dengan JOIN
Beberapa sistem database mendukung penggunaan JOIN dalam perintah DELETE:
-- Menghapus pelanggan yang tidak memiliki pesanan DELETE p FROM pelanggan p LEFT JOIN pesanan pe ON p.id = pe.pelanggan_id WHERE pe.pelanggan_id IS NULL;
Catatan: Sintaks untuk DELETE dengan JOIN mungkin berbeda tergantung pada sistem database yang digunakan.
DELETE dengan LIMIT
Beberapa sistem database memungkinkan Anda membatasi jumlah baris yang dihapus:
-- Menghapus hanya 2 pelanggan pertama DELETE FROM pelanggan LIMIT 2;
Catatan: Sintaks untuk DELETE dengan LIMIT mungkin tidak didukung di semua sistem database. Di SQL Server, Anda dapat menggunakan TOP:
DELETE TOP (2) FROM pelanggan;
Menghapus Semua Data
Untuk menghapus semua data dari tabel tetapi mempertahankan struktur tabel:
DELETE FROM pelanggan;
Atau menggunakan TRUNCATE TABLE yang lebih efisien untuk menghapus semua data:
TRUNCATE TABLE pelanggan;
Catatan: TRUNCATE TABLE lebih cepat daripada DELETE FROM tetapi memiliki beberapa perbedaan:
- TRUNCATE TABLE tidak dapat digunakan dengan WHERE
- TRUNCATE TABLE tidak mengaktifkan trigger
- TRUNCATE TABLE tidak dapat di-rollback dalam transaksi
- TRUNCATE TABLE me-reset nilai AUTO_INCREMENT
DELETE dan Foreign Key
Jika tabel memiliki foreign key, Anda mungkin perlu mempertimbangkan referential integrity:
-- Menghapus pesanan sebelum menghapus pelanggan DELETE FROM pesanan WHERE pelanggan_id = 1; DELETE FROM pelanggan WHERE id = 1;
Atau Anda dapat menggunakan ON DELETE CASCADE saat membuat foreign key:
CREATE TABLE pesanan (
id INT PRIMARY KEY,
pelanggan_id INT,
FOREIGN KEY (pelanggan_id) REFERENCES pelanggan(id)
ON DELETE CASCADE
);
Coba Sendiri
Anda dapat mencoba kode SQL di atas di editor berikut:
💡 Tips Perintah DELETE
Sebelum menjalankan perintah DELETE pada data penting, selalu buat backup terlebih dahulu. Anda juga dapat menjalankan perintah SELECT dengan klausa WHERE yang sama untuk melihat baris mana yang akan dihapus sebelum menjalankan perintah DELETE.