FULL OUTER JOIN so với FULL JOIN


81

Chỉ chơi với các truy vấn và ví dụ để hiểu rõ hơn về các phép nối. Tôi nhận thấy rằng trong SQL Server 2008, hai truy vấn sau cho kết quả giống nhau:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

SELECT * FROM TableA
FULL JOIN TableB
ON TableA.name = TableB.name

Những điều này có thực hiện chính xác cùng một hành động để tạo ra cùng một kết quả hay tôi sẽ gặp phải các kết quả khác nhau trong một ví dụ phức tạp hơn? Đây chỉ là thuật ngữ thay thế cho nhau?


2
Có, cả hai truy vấn đều cho tôi kết quả giống nhau trong SQL Server 2008 R2.
CptSupermrkt

Câu trả lời:


102

Thực ra chúng giống nhau. LEFT OUTER JOINgiống như LEFT JOINRIGHT OUTER JOINgiống như RIGHT JOIN. Đó là cách nhiều thông tin hơn để so sánh INNER Join.

Xem bài viết Wikipedia này để biết chi tiết.


3
Hoàn hảo, cảm ơn. Rất nhiều hướng dẫn mà tôi đã xem qua sử dụng chúng theo phong cách riêng của chúng mà không cần lưu ý rằng chúng giống nhau.
CptSupermrkt

2
đại diện hình ảnh của gia nhập: codeproject.com/Articles/33052/...
Hawkeye Parker

36

Microsoft® SQL Server ™ 2000 sử dụng các từ khóa SQL-92 này cho các phép nối ngoài được chỉ định trong mệnh đề FROM:

  • THAM GIA BÊN NGOÀI TRÁI hoặc THAM GIA TRÁI

  • THAM GIA RIGHT OUTER hoặc THAM GIA ĐÚNG

  • THAM GIA ĐẦY ĐỦ OUTER hoặc THAM GIA ĐẦY ĐỦ

Của MSDN

Các full outer joinhoặc full jointrả về tất cả dòng từ hai bảng, kết hợp lên các hàng bất cứ nơi nào một trận đấu có thể được thực hiện và đặt NULLs trong những nơi không có hàng phù hợp với tồn tại.


11

Đúng là một số cơ sở dữ liệu nhận ra từ khóa OUTER. Một số không. Nơi nó được công nhận, nó thường là một từ khóa tùy chọn . Hầu như luôn luôn, FULL JOIN và FULL OUTER JOIN làm chính xác cùng một việc. (Tôi không thể nghĩ ra một ví dụ mà họ không làm. Có ai khác có thể nghĩ ra một ví dụ không?)

Điều này có thể khiến bạn tự hỏi, "Tại sao nó thậm chí sẽ là một từ khóa nếu nó không có nghĩa?" Câu trả lời nằm ở phong cách lập trình.

Ngày xưa, các lập trình viên cố gắng làm cho mã của họ càng nhỏ gọn càng tốt. Mỗi ký tự có nghĩa là thời gian xử lý lâu hơn. Chúng tôi đã sử dụng các biến 1, 2 và 3 chữ cái. Chúng tôi đã sử dụng năm 2 chữ số. Chúng tôi đã loại bỏ tất cả các khoảng trắng không cần thiết. Một số người vẫn lập trình theo cách đó. Nó không phải là về thời gian xử lý nữa. Nó thiên về mã hóa nhanh.

Các lập trình viên hiện đại đang học cách sử dụng nhiều biến mô tả hơn và đưa nhiều nhận xét và tài liệu vào mã của họ. Sử dụng các từ bổ sung như OUTER để đảm bảo rằng những người khác đọc mã sẽ dễ dàng hiểu nó hơn. Sẽ có ít sự mơ hồ hơn. Phong cách này dễ đọc hơn và tử tế hơn nhiều đối với những người trong tương lai, những người sẽ phải duy trì mã đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.