So sánh hai bảng trong SQL

So Sanh Hai Bang Trong Sql



So sánh dữ liệu trong SQL là một nhiệm vụ phổ biến mà mọi nhà phát triển cơ sở dữ liệu thỉnh thoảng sẽ gặp phải. May mắn thay, so sánh dữ liệu có nhiều định dạng khác nhau như so sánh theo nghĩa đen, so sánh Boolean, v.v.

Tuy nhiên, một trong những tình huống so sánh dữ liệu trong thế giới thực mà bạn có thể gặp phải là so sánh giữa hai bảng. Nó đóng một vai trò quan trọng trong các nhiệm vụ như xác thực dữ liệu, xác định lỗi, sao chép hoặc đảm bảo tính toàn vẹn dữ liệu.







Trong hướng dẫn này, chúng ta sẽ khám phá tất cả các phương pháp và kỹ thuật khác nhau mà chúng ta có thể sử dụng để so sánh hai bảng cơ sở dữ liệu trong SQL.



Thiết lập dữ liệu mẫu

Trước khi đi sâu vào từng phương pháp, chúng ta hãy thiết lập thiết lập dữ liệu cơ bản cho mục đích trình diễn.



Chúng tôi có hai bảng với dữ liệu mẫu như trong ví dụ.





Bảng mẫu 1:

Phần sau đây chứa các truy vấn để tạo bảng đầu tiên và chèn dữ liệu mẫu vào bảng:



TẠO BẢNG sample_tb1 (
nhân viên_id INT KHÓA CHÍNH AUTO_INCREMENT,
first_name VARCHAR ( năm mươi ) ,
họ_VARCHAR ( năm mươi ) ,
bộ phận VARCHAR ( năm mươi ) ,
lương thập phân ( 10 , 2 )
) ;

CHÈN VÀO sample_tb1 ( first_name, Last_name, bộ phận, mức lương )
GIÁ TRỊ
( 'Penelope' , 'Đuổi' , 'nhân sự' , 55000,00 ) ,
( 'Matthew' , 'Lồng' , 'NÓ' , 60000,00 ) ,
( 'Jeniffer' , 'Davis' , 'Tài chính' , 50000,00 ) ,
( 'Kirsten' , 'Fawce' , 'NÓ' , 62000.00 ) ,
( 'Cameron' , 'người tính phí' , 'Tài chính' , 48000.00 ) ;

Thao tác này sẽ tạo một bảng mới có tên “sample_tb1” với nhiều thông tin khác nhau như tên, bộ phận và mức lương.

Bảng kết quả như sau:

Bảng mẫu 2:

Hãy để chúng tôi tiến hành và tạo hai bảng mẫu. Giả sử rằng đây là bản sao lưu của bảng đầu tiên. Chúng ta có thể tạo bảng và chèn dữ liệu mẫu như sau:

TẠO BẢNG sample_tb2 (
nhân viên_id INT KHÓA CHÍNH AUTO_INCREMENT,
first_name VARCHAR ( năm mươi ) ,
họ_VARCHAR ( năm mươi ) ,
bộ phận VARCHAR ( năm mươi ) ,
lương thập phân ( 10 , 2 )
) ;
CHÈN VÀO sample_tb2 ( first_name, Last_name, bộ phận, mức lương )
GIÁ TRỊ
( 'Penelope' , 'Đuổi' , 'Nhân sự' , 55000,00 ) ,
( 'Matthew' , 'Lồng' , 'NÓ' , 60000,00 ) ,
( 'Jeniffer' , 'Davis' , 'Tài chính' , 50000,00 ) ,
( 'Kirsten' , 'Fawce' , 'NÓ' , 62000.00 ) ,
( 'Audrey' , 'Trưởng khoa' , 'Tài chính' , 48000.00 ) ;

Thao tác này sẽ tạo một bảng và chèn dữ liệu mẫu như được chỉ định trong truy vấn trước đó. Bảng kết quả như sau:

So sánh hai bảng bằng cách sử dụng ngoại trừ

Một trong những cách phổ biến nhất để so sánh hai bảng trong SQL là sử dụng toán tử EXCEPT. Điều này tìm thấy các hàng tồn tại trong bảng đầu tiên nhưng không có trong bảng thứ hai.

Chúng ta có thể sử dụng nó để thực hiện so sánh với các bảng mẫu như sau:

LỰA CHỌN *
TỪ mẫu_tb1
NGOẠI TRỪ
LỰA CHỌN *
TỪ mẫu_tb2;

Trong ví dụ này, toán tử EXCEPT trả về tất cả các hàng riêng biệt từ truy vấn đầu tiên (sample_tb1) không xuất hiện trong truy vấn thứ hai (sample_tb2).

So sánh hai bảng bằng cách sử dụng Union

Phương thức thứ hai mà chúng ta có thể sử dụng là toán tử UNION kết hợp với mệnh đề GROUP BY. Điều này giúp xác định các bản ghi tồn tại trong một bảng chứ không phải trong bảng kia, đồng thời bảo toàn các bản ghi trùng lặp.

Thực hiện truy vấn được thể hiện trong phần sau:

LỰA CHỌN
Mã hiệu công nhân,
tên đầu tiên,
họ,
phòng,
lương
TỪ
(
LỰA CHỌN
Mã hiệu công nhân,
tên đầu tiên,
họ,
phòng,
lương
TỪ
mẫu_tb1
ĐOÀN TẤT CẢ
LỰA CHỌN
Mã hiệu công nhân,
tên đầu tiên,
họ,
phòng,
lương
TỪ
mẫu_tb2
) NHƯ kết hợp_dữ liệu
NHÓM THEO
Mã hiệu công nhân,
tên đầu tiên,
họ,
phòng,
lương
ĐANG CÓ
ĐẾM ( * ) = 1 ;

Trong ví dụ đã cho, chúng tôi sử dụng toán tử UNION ALL để kết hợp dữ liệu từ cả hai bảng trong khi vẫn giữ các bản sao.

Sau đó, chúng tôi sử dụng mệnh đề GROUP BY để nhóm dữ liệu kết hợp theo tất cả các cột. Cuối cùng, chúng ta sử dụng mệnh đề HAVING để đảm bảo rằng chỉ những bản ghi có số lượng là một (không trùng lặp) mới được chọn.

Đầu ra:

Phương pháp này phức tạp hơn một chút nhưng nó cung cấp cái nhìn sâu sắc hơn nhiều khi bạn nhận được dữ liệu thực tế bị thiếu trong cả hai bảng.

So sánh hai bảng bằng INNER JOIN

Nếu bạn đang suy nghĩ, tại sao không sử dụng INNER JOIN? Bạn sẽ đúng. Chúng ta có thể sử dụng INNER JOIN để so sánh các bảng và tìm các bản ghi chung.

Lấy truy vấn sau đây làm ví dụ:

LỰA CHỌN
sample_tb1. *
TỪ
mẫu_tb1
INNER THAM GIA sample_tb2 BẬT
sample_tb1.employee_id = sample_tb2.employee_id;

Trong ví dụ này, chúng tôi sử dụng SQL INNER JOIN để tìm các bản ghi tồn tại trong cả hai bảng dựa trên một cột nhất định. Mặc dù cách này có tác dụng nhưng đôi khi nó có thể gây hiểu nhầm vì bạn không chắc liệu dữ liệu thực sự bị thiếu hay hiện diện trong cả hai bảng hay chỉ trong một bảng.

Phần kết luận

Trong hướng dẫn này, chúng ta đã tìm hiểu về tất cả các phương pháp và kỹ thuật mà chúng ta có thể sử dụng để so sánh hai bảng trong SQL.