câu trả lời được chấp nhận
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-ver161 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
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
0
DELETE FROM employees WHERE employeeID = 3;
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
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 WHERE employeeID = 3;
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
2 được sử dụng để lưu trữ mối quan hệ giữa nhân viên và vùng lãnh thổ
DELETE FROM employees WHERE employeeID = 3;
Khi bạn xóa một hàng trong bảng
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 FROM employees WHERE employeeID = 3;
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_idJohn1Sarah2Mark1Tania3bảng công ty
company_idcompany_name1something2another co3west4northernBạ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_idSarah2Tania3bảng công ty
company_idcompany_name2another co3west4northernLư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;
0Thao 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;
2Và, 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