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 email 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.