[SQLServer] Bài 15: Lệnh DELETE trong SQL Server

Lệnh Delete dùng để xóa bản ghi khỏi 1 bảng trong cơ sở dữ liệu.

Khi thực hiện lệnh xóa bản ghi (record) trong bảng chúng ta chỉ cần quan tâm đến tên bảng, và mệnh đề WHERE để lọc bản ghi đó (nếu có).

Cú pháp:

DELETE FROM <Tên_bảng> WHERE <Điều_kiện>

Trong đó:

  • Where giống như các mệnh đề Where trong câu lệnh SELECT, UPDATE hay INSERT.
  • Điều kiện có thể là phép toán giữa các cột và giá trị, nhưng cũng có thể giá trị là kết quả trả về từ một phát biểu SELECT khác.

Chú ý: Không có khái niệm xóa giá trị trong một cột, vì xóa giá trị một cột đồng nghĩa với cập nhật cột đó bằng giá trị rỗng (NULL)

Ví dụ 1: Xóa nhân viên có mã nhân viên là 8

DELETE FROM [NhanVien] WHERE MaNhanVien = 8

Kết quả:

Delete with where condition
Hình 1. Lệnh Delete với điều kiện where

Chú ý: Trong trường hợp có ràng buộc về quan hệ của dữ liệu, thì xóa bản ghi phải tuân thủ theo quy tắc: xóa bản ghi con trước rồi mới xóa bản ghi cha.

Ví dụ 2: Trường hợp có 2 bảng: Đơn hàng (DONHANG) và Đơn hàng chi tiết (DONHANGCHITIET). Để xóa một đơn hàng bạn cần xóa các bản ghi trong bảng Đơn hàng chi tiết trước rồi mới đến các bản ghi trong bảng Đơn hàng.

Trước khi thực hiện lệnh DELETE:

SELECT TOP 100 * FROM [dbo].[DonHang] WHERE MaDonHang = 4
SELECT TOP 100 * FROM [dbo].[DonHangChiTiet] WHERE MaDonHang = 4

Sau khi thực hiện lệnh DELETE:

–Xóa bản ghi từ bảng con
DELETE FROM [dbo].[DonHangChiTiet]
WHERE MaDonHang = 4

–Xóa bản ghi từ bảng cha
DELETE FROM [dbo].[DonHang]
WHERE MaDonHang = 4

Kết quả: Tổng số 3 bản ghi từ 2 bảng được xóa.

Delete from table
Hình 2. Xóa các bản ghi có quan hệ giữa các bảng

Ví dụ 3: Xóa các đơn hàng chi tiết trong bảng DONHANGCHITIET nếu các sản phẩm không còn bán tại bảng SANPHAM

DELETE FROM [dbo].[DonHangChiTiet]
WHERE MaSanPham IN (SELECT MaSanPham FROM SanPham b WHERE b.HoatDong = 0)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.