TableA LEFT OUTER JOIN TableB
tương đương với TableB RIGHT OUTER JOIN Table A
.
Trong Oracle, (+)
biểu thị bảng "tùy chọn" trong JOIN. Vì vậy, trong truy vấn đầu tiên của bạn, đó là P LEFT OUTER JOIN S
. Trong truy vấn thứ hai của bạn, đó là S RIGHT OUTER JOIN P
. Chúng tương đương về mặt chức năng.
Trong thuật ngữ, RIGHT hoặc LEFT chỉ định bên nào của phép nối luôn có bản ghi và bên kia có thể là rỗng. Vì vậy, trong một P LEFT OUTER JOIN S
, P
sẽ luôn có một bản ghi vì nó nằm trên LEFT
, nhưng S
có thể là rỗng.
Xem ví dụ này từ java2s.com để được giải thích thêm.
Để làm rõ, tôi đoán tôi đang nói rằng thuật ngữ không quan trọng, vì nó chỉ ở đó để giúp hình dung. Điều quan trọng là bạn hiểu khái niệm về cách nó hoạt động.
RIGHT so với LEFT
Tôi đã thấy một số nhầm lẫn về những gì quan trọng trong việc xác định RIGHT và LEFT trong cú pháp kết hợp ngầm định.
THAM GIA BÊN NGOÀI TRÁI
SELECT *
FROM A, B
WHERE A.column = B.column(+)
THAM GIA NGAY NGƯỜI RA ĐÚNG
SELECT *
FROM A, B
WHERE B.column(+) = A.column
Tất cả những gì tôi đã làm là hoán đổi các bên của các điều khoản trong mệnh đề WHERE, nhưng chúng vẫn tương đương về mặt chức năng. (Xem phần cao hơn trong câu trả lời của tôi để biết thêm thông tin về điều đó.) Vị trí của (+)
xác định RIGHT hoặc LEFT. (Cụ thể, nếu (+)
ở bên phải, đó là THAM GIA TRÁI. Nếu (+)
ở bên trái, đó là THAM GIA PHẢI.)
Các loại tham gia
Hai kiểu của JOIN là JOIN ngầm và THAM GIA rõ ràng . Chúng là các kiểu viết JOIN khác nhau, nhưng chúng tương đương nhau về mặt chức năng.
Xem câu hỏi SO này .
THAM GIA ngầm định chỉ cần liệt kê tất cả các bảng với nhau. Các điều kiện tham gia được chỉ định trong mệnh đề WHERE.
THAM GIA ngầm định
SELECT *
FROM A, B
WHERE A.column = B.column(+)
THAM GIA rõ ràng liên kết các điều kiện tham gia với bao gồm của một bảng cụ thể thay vì trong mệnh đề WHERE.
THAM GIA rõ ràng
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
Các lệnh này có thể khó đọc và hiểu hơn, và chúng cũng có một vài hạn chế vì các điều kiện kết hợp được trộn lẫn với các điều kiện WHERE khác. Do đó, các JOIN ngầm thường được khuyến nghị không sử dụng vì cú pháp rõ ràng.