Tham gia nội bộ vs Tham gia bên ngoài
Tham gia bên trong và Tham gia ngoài là hai trong số các phương thức nối SQL được sử dụng trong xử lý truy vấn cho cơ sở dữ liệu. Chúng thuộc về gia đình của các mệnh đề tham gia (hai thứ khác là Joins Left và Right). Tuy nhiên, có một Self Join có thể được sử dụng cho các tình huống chuyên biệt. Mục đích của Tham gia là kết hợp các trường bằng cách sử dụng các giá trị chung cho hai bảng. Các phép nối này kết hợp các bản ghi từ nhiều bảng trong cơ sở dữ liệu. Nó tạo các tập kết quả, có thể được lưu dưới dạng bảng khác.
Tham gia nội bộ là gì?
Hoạt động SQL Join được sử dụng phổ biến nhất là Internal Join. Nó có thể được coi là loại tham gia mặc định được sử dụng trong các ứng dụng. Tham gia bên trong sử dụng vị ngữ tham gia để kết hợp hai bảng. Giả sử hai bảng là A và B, thì vị từ nối sẽ so sánh các hàng của A và B để tìm ra tất cả các cặp thỏa mãn vị ngữ. Các giá trị cột của tất cả các hàng thỏa mãn của bảng A và B được kết hợp để tạo kết quả. Nó có thể được xem như là lần đầu tiên tham gia chéo (sản phẩm của Cartesian) của tất cả các bản ghi và sau đó chỉ trả lại các bản ghi thỏa mãn vị từ tham gia. Tuy nhiên, trên thực tế, sản phẩm của Cartesian không được tính toán vì nó rất kém hiệu quả. Thay vào đó, tham gia băm hoặc hợp nhất sắp xếp được sử dụng.
Tham gia bên ngoài là gì?
Không giống như, Tham gia bên trong, tham gia bên ngoài giữ tất cả các bản ghi ngay cả khi không thể tìm thấy bản ghi phù hợp. Điều đó có nghĩa là kết nối bên ngoài không cần một bản ghi để tìm một bản ghi phù hợp để nó xuất hiện trong kết quả. Thay vào đó, nó sẽ trả về tất cả các bản ghi, nhưng các bản ghi chưa từng có sẽ có giá trị null. Tham gia bên ngoài được chia thành ba loại phụ. Họ tham gia bên ngoài bên trái, tham gia bên ngoài bên phải và tham gia bên ngoài đầy đủ. Sự khác biệt này dựa trên hàng nào của bảng (bảng bên trái, bảng bên phải hoặc cả hai bảng) được giữ lại khi tìm thấy các bản ghi chưa từng có. Các kết nối bên ngoài bên trái (còn được gọi là tham gia bên trái đơn giản) giữ lại tất cả các bản ghi của bảng bên trái. Điều đó có nghĩa là, ngay cả khi các bản ghi khớp số bằng 0, thì nó vẫn sẽ có các bản ghi trong bảng kết quả, nhưng sẽ có giá trị null cho tất cả các cột của B. Nói cách khác, tất cả các giá trị từ bảng bên trái được trả về với các giá trị khớp từ bên phải bảng (hoặc giá trị null khi chưa từng có). Nếu các giá trị từ nhiều hàng từ bảng bên trái được khớp với một hàng từ bảng bên phải, hàng từ bảng bên phải sẽ được lặp lại theo yêu cầu. Tham gia bên ngoài bên phải khá giống với tham gia bên ngoài bên trái, nhưng điều trị các bảng được tôn trọng. Điều đó có nghĩa là kết quả sẽ có tất cả các hàng của bảng bên phải ít nhất một lần với các giá trị bảng bên trái được khớp (và các giá trị null cho các giá trị bên phải chưa từng có). Tham gia bên ngoài đầy đủ là toàn diện hơn cả tham gia bên ngoài bên trái và bên phải. Kết quả là kết hợp hiệu quả của việc áp dụng cả bên trái và bên phải kết hợp với nhau.
Sự khác biệt giữa Tham gia bên trong và Tham gia bên ngoài là gì?
Kết nối bên trong không giữ các hàng chưa từng có trong kết quả, nhưng kết nối bên ngoài sẽ giữ tất cả các bản ghi từ ít nhất một bảng (tùy thuộc vào tham gia bên ngoài nào đã được sử dụng). Vì vậy, hành vi không có thông tin hiện diện trên các hàng chưa từng có trong bảng kết quả là không mong muốn, bạn cần luôn luôn sử dụng một trong các phép nối ngoài (thay cho phép nối bên trong). Tham gia bên trong có thể không tạo ra kết quả nếu không tìm thấy kết quả khớp. Nhưng tham gia bên ngoài sẽ luôn tạo ra một bảng kết quả, thậm chí không có hàng phù hợp. Tham gia bên trong sẽ luôn trả về các bảng có giá trị (nếu được trả về). Nhưng các phép nối ngoài có thể dẫn đến các bảng có giá trị null.