Lệnh DELETE trong SQL Server (Transact-SQL) dùng để xóa một hoặc nhiều bản ghi từ một bảng trong SQL Server.
Cú pháp lệnh DELETE trong SQL Server
Cú pháp đơn giản của lệnh DELETE như sau.
DELETE FROM bang
[WHERE dieu_kien];
Cú pháp đầy đủ của lệnh DELETE như sau.
DELETE [TOP (gia_tri_dau) [PERCENT] ]
FROM bang
[WHERE dieu_kien];
Tham số
bang: Bảng cần xóa bản ghi.
WHERE dieu_kien: Tùy chọn. Điều kiện bản ghi phải thỏa mãn để bị xóa.
TOP (gia_tri_dau): Tùy chọn. Nếu chỉ định, sẽ xóa gia_tri_dau hàng đầu tiên trong tập kết quả. Ví dụ TOP (10) xóa 10 hàng đầu thỏa mãn điều kiện.
PERCENT: Tùy chọn. Nếu chỉ định, xóa phần trăm hàng đầu dựa trên gia_tri_dau của tập kết quả. Ví dụ TOP (10) PERCENT xóa 10% hàng đầu.
Lưu ý
Không cần liệt kê các trường trong lệnh DELETE vì bạn sẽ xóa toàn bộ hàng trong bảng.
Ví dụ – dùng 1 điều kiện
DELETE FROM nhanvien
WHERE ten = 'Sarah';
Lệnh này xóa tất cả bản ghi trong bảng có tên nhân viên là Sarah.
Nếu muốn kiểm tra số bản ghi sẽ bị xóa, chạy lệnh SELECT trước khi xóa.
SELECT count(*)
FROM nhanvien
WHERE ten = 'Sarah';
Ví dụ – dùng 2 điều kiện
DELETE FROM nhanvien
WHERE ho = 'Johnson'
AND nhanvien_id >= 80;
Lệnh này xóa tất cả bản ghi trong bảng nếu họ là Johnson và nhanvien_id lớn hơn hoặc bằng 80.
Để biết số dòng sẽ xóa, chạy lệnh SELECT sau trước khi chạy DELETE.
SELECT count(*)
FROM nhanvien
WHERE ho = 'Johnson'
AND nhanvien_id >= 80;
Ví dụ – dùng từ khóa TOP
DELETE TOP(3)
FROM nhanvien
WHERE ho = 'Johnson';
Lệnh này xóa 3 bản ghi đầu tiên trong bảng khi họ nhân viên là Johnson. Nếu có bản ghi khác cũng họ Johnson, chúng không bị ảnh hưởng.
Ví dụ – dùng mệnh đề EXISTS
Bạn có thể thực hiện lệnh xóa phức tạp hơn, ví dụ xóa bản ghi trong bảng dựa trên giá trị trong bảng khác. Vì không thể liệt kê nhiều bảng trong mệnh đề FROM của DELETE, có thể dùng mệnh đề EXISTS như sau.
DELETE FROM nhanvien
WHERE EXISTS
(SELECT *
FROM danhba
WHERE danhba.danhba_id = nhanvien.nhanvien_id
AND danhba.danhba_id < 100);
Lệnh DELETE này xóa tất cả bản ghi trong bảng nhanvien khi có bản ghi trong bảng danhba có danhba_id < 100 và danhba_id khớp nhanvien_id.
Nếu muốn xác định số dòng bị xóa, chạy lệnh SELECT trước khi xóa.
SELECT count(*)
FROM nhanvien
WHERE EXISTS
(SELECT *
FROM danhba
WHERE danhba.danhba_id = nhanvien.nhanvien_id
AND danhba.danhba_id < 100);