Bài MySQL 32: Lệnh DELETE JOIN trong MySQL

0
180

Xin chào các bạn, trong bài học ngày hôm nay mình sẽ hướng dẫn các bạn sử dụng câu lệnh DELETE JOIN để xóa dữ liệu từ nhiều bảng.

Giới thiệu

Trong bài học hôm trước trước, các bạn đã học cách xóa các hàng của nhiều bảng bằng cách sử dụng:

  • Một câu lệnh DELETE duy nhất trên nhiều bảng.
  • Một câu lệnh DELETE duy nhất trên nhiều bảng có quan hệ với nhau mà bảng con có tính năng ON DELETE CASCADE giành cho cho khóa ngoại.

Bài viết này sẽ giới thiệu cho bạn một cách linh hoạt hơn để xóa dữ liệu từ nhiều bảng bằng mệnh đề INNER JOIN hoặc LEFT JOIN với câu lệnh DELETE.

DELETE JOIN với INNER JOIN

MySQL cũng cho phép bạn sử dụng mệnh đề INNER JOIN trong câu lệnh DELETE để xóa các hàng khỏi một bảng hoặc các hàng phù hợp trong một bảng khác.

Ví dụ, để xóa các hàng từ cả hai bảng T1 và T2 đáp ứng một điều kiện xác định, bạn sử dụng câu lệnh sau:

Lưu ý rằng bạn phải đặt các tên bảng T1T2 giữa các từ khóa DELETEFROM. Nếu bạn bỏ qua bảng T1, câu lệnh DELETE chỉ xóa các hàng trong bảng T2. Tương tự, nếu bạn bỏ qua bảng T2, câu lệnh DELETE sẽ chỉ xóa các hàng trong bảng T1.

Biểu thức T1.key = T2.key chỉ định điều kiện cho các hàng phù hợp giữa các bảng T1 và T2 sẽ bị xóa.

Điều kiện trong câu lệnh WHERE xác định các hàng trong T1 và T2 sẽ bị xóa.

Ví dụ: Giả sử, chúng ta có hai bảng t1 và t2 với các cấu trúc và dữ liệu như sau:

Câu lệnh sau sẽ xóa hàng có id là 1 trong bảng t1 và cũng xóa hàng ref = 1 trong bảng t2:

bạn sẽ nhận được một thông báo xóa thành công:

DELETE JOIN với LEFT JOIN

Chúng ta thường sử dụng lệnh LEFT JOIN trong câu lệnh SELECT để tìm các hàng trong bảng bên trái có hoặc không có các hàng phù hợp trong bảng bên phải.

Chúng ta cũng có thể sử dụng mệnh đề LEFT JOIN trong câu lệnh DELETE để xóa các hàng trong một bảng (bảng bên trái) mà không có các hàng phù hợp trong bảng khác (bảng bên phải).

Cú pháp sau đây minh họa cách sử dụng câu lệnh DELETE với mệnh đề LEFT JOIN để xóa các hàng từ bảng T1 không có các hàng tương ứng trong bảng T2:

và nó cũng trả về thông báo xóa thành công:

Kết luận

Như vậy trong bài học ngày hôm nay mình đã hướng dẫn các bạn sử dụng câu lệnh DELETE JOIN để xóa dữ liệu từ nhiều bảng. Trong bài học tiếp theo chúng ta sẽ tìm hiểu về tính năng ON DELETE CASCADE trong MySQL.

Chúc các bạn học tập tốt!

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây