Xóa khỏi nhiều bảng SQL

câu trả lời được chấp nhận

  1. Người trợ giúp Olaf 25.726 Điểm danh tiếng

    2022-08-29T07. 49. 23. 963+00. 00

    xóa các hàng từ nhiều bảng trong một lần?

    Không, không thể, trong câu lệnh XÓA, bạn chỉ có thể giải quyết một bảng, không nhiều hơn
    Xem https. //học. Microsoft. com/en-us/sql/t-sql/statements/delete-transact-sql?view=sql-server-ver16

    1 Hiển thị nhận xét cho câu trả lời này Báo cáo

    Bài báo cáo

    1. Santosh 21 Điểm danh tiếng

      2022-08-29T08. 02. 50. 523+00. 00

      Cảm ơn người trợ giúp @Olaf

      Có rất nhiều bài viết gây hiểu lầm trong các diễn đàn khác nhưng không có bài viết nào phù hợp với tôi

      0 {count} phiếu bầu Báo cáo

      Bài báo cáo

Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh DELETE trong SQL để xóa một hoặc nhiều hàng trong bảng

Câu lệnh DELETE xóa vĩnh viễn một hoặc nhiều hàng trong bảng. Cú pháp của câu lệnh DELETE như sau

DELETE FROM table WHERE condition;

Để xóa một hoặc nhiều hàng trong bảng

  • Trước tiên, bạn chỉ định tên bảng mà bạn muốn xóa dữ liệu trong mệnh đề  DELETE FROM
  • Thứ hai, bạn đặt một điều kiện trong mệnh đề WHERE để chỉ định hàng nào cần xóa. Nếu bạn bỏ qua mệnh đề WHERE, câu lệnh sẽ xóa tất cả các hàng trong bảng

Nếu bạn muốn xóa tất cả các hàng trong một bảng lớn, bạn nên sử dụng câu lệnh TRUNCATE TABLE hiệu quả hơn câu lệnh DELETE

Các ví dụ XÓA SQL

Chúng ta hãy xem một số ví dụ về việc sử dụng câu lệnh DELETE

SQL DELETE – xóa một hàng trong bảng

Câu lệnh sau xóa nhân viên có id 3 khỏi bảng

DELETE FROM employees WHERE employeeID = 3;

0

DELETE FROM employees WHERE employeeID = 3;

SQL DELETE – xóa tất cả các hàng trong bảng

Để xóa tất cả các hàng trong bảng

DELETE FROM employees WHERE employeeID = 3;

0, bạn chỉ cần thực hiện truy vấn sau. [không được đề xuất và tạo bản sao lưu trước khi bạn thực hiện việc này]

DELETE FROM employees;

SQL DELETE – xóa các hàng liên quan trong nhiều bảng

Nó trở nên phức tạp hơn khi bạn muốn xóa một hàng trong bảng được liên kết với các hàng khác trong bảng khác

Ví dụ: mỗi nhân viên đang làm việc ở một hoặc nhiều lãnh thổ và mỗi lãnh thổ có nhiều nhân viên. Bảng

DELETE FROM employees WHERE employeeID = 3;

2 được sử dụng để lưu trữ mối quan hệ giữa nhân viên và vùng lãnh thổ

Khi bạn xóa một hàng trong bảng

DELETE FROM employees WHERE employeeID = 3;

0, bạn cũng phải xóa các hàng liên quan trong bảng

DELETE FROM employees WHERE employeeID = 3;

2. Để làm như vậy, bạn phải thực hiện hai câu lệnh DELETE như sau

DELETE FROM employees WHERE employeeID = 3;

DELETE FROM employeeterritories WHERE employeeID = 3

Hầu hết các hệ thống quản lý cơ sở dữ liệu đều cho phép bạn tạo ràng buộc khóa ngoại để nếu bạn xóa một hàng trong bảng, các hàng tương ứng trong bảng có liên quan cũng sẽ tự động bị xóa. Điều này đảm bảo tính toàn vẹn của dữ liệu. Trong trường hợp này, bạn chỉ cần thực hiện câu lệnh DELETE đầu tiên để xóa các hàng trong hai bảng

Trong trường hợp hệ thống quản lý cơ sở dữ liệu không hỗ trợ ràng buộc khóa ngoại, bạn phải thực hiện cả hai câu lệnh DELETE trong một giao dịch để đảm bảo rằng các câu lệnh thực thi ở chế độ được tất cả hoặc không có gì

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách sử dụng câu lệnh SQL DELETE để xóa một hoặc nhiều hàng trong bảng

Câu lệnh SQL DELETE cho phép bạn xóa các bản ghi khỏi một bảng. Tôi sẽ giải thích thêm về câu lệnh SQL DELETE trong bài viết này

Bài viết này đề cập đến Oracle, SQL Server, MySQL và PostgreSQL

 

Mục lục

Câu lệnh XÓA SQL là gì?

Câu lệnh SQL DELETE hoặc truy vấn xóa là một câu lệnh bạn có thể chạy để xóa các bản ghi khỏi một bảng

Mệnh đề WHERE được sử dụng để chỉ định tiêu chí và bất kỳ hàng nào khớp với các tiêu chí này sẽ bị xóa. Bạn có thể sử dụng nó để xóa một bản ghi, nhiều bản ghi hoặc tất cả các bản ghi trong một bảng

 

Làm cách nào tôi có thể viết truy vấn XÓA trong SQL?

Truy vấn DELETE trong SQL có một số cú pháp khá đơn giản

DELETE FROM [ table | [subquery] ] [alias]
[WHERE condition];

Hãy để tôi giải thích điều này thêm một chút

Bạn bắt đầu với XÓA TỪ. Không cần chỉ định các cột ở đây – chúng tôi đang xóa các hàng để các cột không quan trọng

Sau đó, bạn chỉ định một bảng hoặc một truy vấn con. Bảng ở đây có thể là bảng, dạng xem hoặc dạng xem cụ thể hóa

Sau đó, bạn có thể đặt bí danh cho bảng, để trợ giúp khi viết điều kiện WHERE của bạn

Sau này, bạn có thể viết WHERE sau đó là một điều kiện. Điều kiện cho phép bạn chỉ định hàng nào cần xóa. Nếu bạn chỉ muốn xóa một số hàng trong bảng, bạn sẽ cần điều kiện WHERE. Nếu bạn muốn xóa tất cả các hàng trong bảng, không sử dụng điều kiện WHERE

 

Ví dụ về Truy vấn XÓA SQL

Hãy xem một số ví dụ. Trước tiên, hãy xem một số dữ liệu mẫu mà chúng ta có thể chạy các câu lệnh DELETE SQL của mình trên

SELECT student_id, first_name, last_name
FROM student;
STUDENT_IDFIRST_NAMELAST_NAME1JohnSmith2SusanJohnson3TomCapper4MarkHolloway5StevenWebber6JulieArmstrong7MichelleRandall8AndrewCooper9RobertPickering10TanyaHall11JarradWinston12MaryTaylor100MarkAnderson102JohnRogers

 

Ví dụ 1 – Xóa đơn giản

Đây là một ví dụ về việc xóa một bản ghi

DELETE FROM student
WHERE student_id = 1;

Bản ghi có student_id là 1 sẽ bị xóa. Tất cả các hàng khác vẫn còn trong bảng

Ví dụ 2 – Sử dụng hai điều kiện

Ví dụ này sử dụng hai điều kiện trong mệnh đề WHERE

DELETE FROM student
WHERE enrolment_date > '10-JAN-2015'
AND fees_paid > 400;
1 row[s] deleted.

Như bạn có thể thấy, 1 hàng đã bị xóa vì 1 hàng phù hợp với điều kiện WHERE

 

Bạn có thể xóa khỏi nhiều bảng không?

Có, bạn có thể trong MySQL, nhưng không phải trong các cơ sở dữ liệu khác

 

Xóa MySQL khỏi nhiều bảng

Để xóa bản ghi khỏi nhiều bảng trong MySQL, bạn đề cập đến cả hai bảng trong câu lệnh Xóa của mình

Cú pháp trông như thế này

DELETE table1, table2
FROM table1
INNER JOIN table2 ON table1.field = table2.field
WHERE condition;

Thao tác này sẽ xóa các bản ghi khỏi cả hai bảng phù hợp với điều kiện của bạn

Hãy xem một ví dụ

Chúng tôi có hai bảng, người và công ty, chứa một vài bản ghi liên quan

CREATE TABLE person [
  firstname VARCHAR[100],
  company_id INT
];

CREATE TABLE company [
id INT,
company_name VARCHAR[100]
];

INSERT INTO person [firstname, company_id] VALUES
['John', 1], ['Sarah', 2], ['Mark', 1], ['Tania', 3];

INSERT INTO company [id, company_name] VALUES
[1, 'something'], [2, 'another co'], [3, 'west'], [4, 'northern'];

Đây là dữ liệu trông như thế nào

bảng người

firstnamecompany_idJohn1Sarah2Mark1Tania3

bảng công ty

company_idcompany_name1something2another co3west4northern

Bạn có thể xóa tất cả hồ sơ công ty và cá nhân phù hợp với một công ty cụ thể bằng câu lệnh này

DELETE person, company
FROM person
INNER JOIN company ON person.company_id = company.id
WHERE company.id = 1;

Các bản ghi được so khớp giữa hai bảng và được lọc theo nơi company_id = 1;

Sau khi câu lệnh này được chạy, đây là kết quả của các bảng

bảng người

firstnamecompany_idSarah2Tania3

bảng công ty

company_idcompany_name2another co3west4northern

Lưu ý cách ID công ty của 1 bị xóa và tất cả bản ghi người với công ty của 1 đã bị xóa

Xóa khỏi nhiều bảng trong cơ sở dữ liệu khác

Trong cơ sở dữ liệu không phải MySQL, câu lệnh này sẽ không hoạt động. Muốn xóa từ nhiều bảng cần viết nhiều câu lệnh DELETE

DELETE from student
WHERE student_id = 1;

DELETE from student_subject
WHERE student_id = 1;

 

Bạn có thể xóa dữ liệu dựa trên dữ liệu trong một bảng khác không?

Vâng, bạn có thể

Hãy giải thích những gì tôi muốn nói

Ví dụ, bạn có bảng học sinh. Và giả sử bạn muốn xóa tất cả hồ sơ sinh viên không thuộc bất kỳ môn học nào. Tuy nhiên, dữ liệu này nằm trong bảng student_subject, liên kết sinh viên với các môn học

Tuy nhiên, chúng ta không thể chỉ định nhiều hơn một bảng trong câu lệnh XÓA SQL, phải không?

Trên thực tế, bạn có thể. Bạn không thể xóa từ nhiều bảng cùng một lúc

Bạn có thể làm điều đó bằng cách sử dụng phép nối hoặc sử dụng truy vấn con. Phương pháp bạn sử dụng có thể phụ thuộc vào nhà cung cấp

  • tiên tri. Chỉ truy vấn phụ, không hỗ trợ tham gia
  • Máy chủ SQL. Truy vấn phụ hoặc tham gia
  • mysql. Truy vấn phụ hoặc tham gia
  • PostgreSQL. Truy vấn phụ hoặc tham gia

 

Xóa SQL bằng truy vấn con

Hãy xem làm thế nào chúng ta có thể làm điều này

DELETE FROM student
WHERE student_id NOT IN [
  SELECT student_subject.student_id
  FROM student_subject
];

Truy vấn này trước tiên tra cứu giá trị student_id trong bảng student_subject. Sau đó, nó xóa các bản ghi khỏi bảng sinh viên mà student_id không có trong danh sách đó

Phương pháp sử dụng truy vấn con để giới hạn giá trị hoạt động theo cách tương tự như truy vấn CHỌN. Bạn có thể sử dụng IN, EXISTS và NOT EXISTS theo cùng một cách [đọc thêm về các toán tử này tại đây]

 

Xóa SQL bằng cách tham gia

Để xóa khỏi một bảng dựa trên dữ liệu trong một bảng khác, bạn có thể xóa bằng phép nối. Điều này sẽ hoạt động trong MySQL, PostgreSQL và SQL Server

Bạn có thể nối hai bảng với nhau giống như cách bạn làm với câu lệnh SELECT, nhưng bạn chỉ cần chỉ định tên của bảng cần xóa khỏi

SELECT student_id, first_name, last_name
FROM student;
0

Thao tác này sẽ xóa tất cả các bản ghi sinh viên có bản ghi student_subject với subject_id là 1

Bạn cũng có thể sử dụng bí danh bảng để đọc và viết truy vấn dễ dàng hơn

SELECT student_id, first_name, last_name
FROM student;
1

Điều này sẽ cho bạn kết quả tương tự

 

Tôi có thể xem những gì tôi đang xóa trước khi nó bị xóa không?

Vâng, bạn có thể

Nếu muốn chắc chắn rằng bạn đang xóa đúng bản ghi, bạn có thể kiểm tra những gì bạn xóa trước khi thực sự xóa bản ghi

Để thực hiện điều này, chỉ cần sao chép câu lệnh DELETE và chạy nó dưới dạng câu lệnh SELECT trước – với cùng mệnh đề WHERE và mọi thứ

Ví dụ: nếu chúng tôi muốn xóa các sinh viên không đăng ký môn học [giống như ví dụ trước], trước tiên chúng tôi có thể kiểm tra xem chúng tôi đang xóa đúng bản ghi

Truy vấn CHỌN ở đây

SELECT student_id, first_name, last_name
FROM student;
2

Và, truy vấn Oracle DELETE để làm điều đó ở đây

DELETE FROM student
WHERE student_id NOT IN [
  SELECT student_subject.student_id
  FROM student_subject
];

Như bạn có thể thấy, tôi vừa thay thế XÓA bằng CHỌN *

 

Câu lệnh DELETE của Mysql quá chậm

Bạn đang cố xóa dữ liệu khỏi bảng nhưng tốc độ quá chậm?

Vâng, có một vài điều bạn có thể làm

Đầu tiên, nếu bạn đang xóa tất cả dữ liệu trong bảng, tốt hơn nên sử dụng câu lệnh TRUNCATE TABLE. Thao tác này nhanh hơn [vì nó không ghi vào nhật ký và cho phép khôi phục], nhưng bạn không thể hoàn tác thao tác này, vì vậy bạn cần chắc chắn. Bạn cũng không thể chỉ định điều kiện WHERE bằng câu lệnh TRUNCATE TABLE

Nếu không thể sử dụng TRUNCATE, bạn có thể thử lọc dữ liệu của mình theo cách khác hoặc sử dụng các chỉ mục trên bảng của mình

Một phương pháp khác thực sự là tạo một bảng mới với dữ liệu bạn muốn giữ lại. Bạn có thể làm điều này bằng cách

  • Viết một phương thức CREATE TABLE AS SELECT và sau đó chỉ định mệnh đề WHERE cho các bản ghi mà bạn muốn giữ lại
  • Xóa bảng gốc
  • Đổi tên bảng mới thành bảng cũ

 

Tóm tắt sự khác biệt giữa các nhà cung cấp

Có một số khác biệt giữa cách hoạt động của câu lệnh DELETE với từng nhà cung cấp

Tiêu chíOracleSQL ServerMySQLPostgreSQLBasic DELETETuân theo tiêu chuẩnTuân thủ tiêu chuẩnTuân thủ tiêu chuẩnTuân theo tiêu chuẩnXóa bằng truy vấn phụĐược phépCho phépĐược phépCho phépCho phépXóa có tham giaKhông được phépCho phépĐược phépĐược phép

 

Phần kết luận

Vì vậy, đó là cách bạn chạy câu lệnh Oracle DELETE SQL. Bạn có thể xóa một hàng, nhiều hàng hoặc toàn bộ bảng bằng cách sử dụng các điều kiện WHERE có thể bao gồm các truy vấn con

Cuối cùng, nếu bạn thích thông tin và lời khuyên nghề nghiệp mà tôi đã cung cấp, hãy đăng ký nhận bản tin của tôi bên dưới để cập nhật các bài viết của tôi. Bạn cũng sẽ nhận được một phần thưởng tuyệt vời. Thanks

Tôi có thể XÓA khỏi nhiều bảng SQL không?

Cú pháp cũng hỗ trợ xóa hàng khỏi nhiều bảng cùng lúc . Để xóa các hàng khỏi cả hai bảng có giá trị id khớp, hãy đặt tên cho cả hai hàng sau từ khóa DELETE. XÓA t1, t2 TỪ t1 INNER JOIN t2 TRÊN t1. id = t2. Tôi;

Làm cách nào để xóa dữ liệu từ 3 bảng trong SQL?

Xóa dữ liệu khỏi bảng .
Sử dụng câu lệnh DELETE mà không chỉ định mệnh đề WHERE. Với các không gian bảng được phân đoạn, việc xóa tất cả các hàng của bảng rất nhanh. .
Sử dụng câu lệnh TRUNCATE. Câu lệnh TRUNCATE có thể cung cấp các ưu điểm sau so với câu lệnh DELETE. .
Sử dụng câu lệnh DROP TABLE

Làm cách nào tôi có thể XÓA dữ liệu khỏi hai bảng?

Chúng ta thường sử dụng mệ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ó hàng khớ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] không có các hàng phù hợp trong một bảng khác [bảng bên phải].

Làm cách nào để xóa từ 2 bảng cùng một lúc trong MySQL?

Bạn có thể xóa khỏi nhiều bảng [không thiết lập khóa ngoại] bằng một truy vấn nếu bạn tạo bảng đó bằng cú pháp sau. XÓA một. *, b. * TỪ [bảng1] là a, [bảng2] là b WHERE a.

Chủ Đề