Câu hỏi LEFT JOIN và LEFT OUTER JOIN trong SQL Server


Sự khác biệt giữa LEFT JOIN và LEFT OUTER JOIN?


1231
2018-01-02 08:30


gốc


Không ai! Các OUTER từ khóa là tùy chọn. - jarlh
Những câu trả lời này đều tốt đẹp, nhưng nhận xét của @jarlh là tất cả những gì cần thiết. Cảm ơn! :) - rinogo


Các câu trả lời:


Theo tài liệu: FROM (Transact-SQL):

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

Từ khóa OUTER được đánh dấu là tùy chọn (được đặt trong dấu ngoặc vuông) và điều này có nghĩa là trong trường hợp này là liệu bạn có chỉ định hay không tạo ra sự khác biệt. Lưu ý rằng mặc dù các phần tử khác của mệnh đề nối cũng được đánh dấu là tùy chọn, để lại họ tất nhiên sẽ tạo ra sự khác biệt.

Ví dụ, toàn bộ loại-phần của JOIN mệnh đề là tùy chọn, trong trường hợp mặc định là INNER nếu bạn chỉ định JOIN. Nói cách khác, điều này là hợp pháp:

SELECT *
FROM A JOIN B ON A.X = B.Y

Dưới đây là danh sách các cú pháp tương đương:

A LEFT JOIN B            A LEFT OUTER JOIN B
A RIGHT JOIN B           A RIGHT OUTER JOIN B
A FULL JOIN B            A FULL OUTER JOIN B
A INNER JOIN B           A JOIN B

Ngoài ra hãy xem câu trả lời tôi còn lại trên câu hỏi SO khác này: SQL trái tham gia vs nhiều bảng trên dòng FROM?.

enter image description here


1799
2018-01-02 08:51



Chuẩn xác. OUTER được cho phép tương thích ANSI-92. - Sean Reilly
@ LasseV.Karlsen sẽ không tốt hơn nếu có INNER JOIN bên phải và chỉ JOIN ở bên trái trong danh sách tương đương? - nawfal
@ LasseV.Karlsen Tôi chỉ có nghĩa là phía bên trái có dạng súc tích và phía bên phải có dạng mở rộng. Tôi nghĩ rằng nó sẽ làm cho nó mạch lạc nếu bạn theo cùng một cho JOINs là tốt. - nawfal
@Outlier Đó là đặc quyền của bạn, nhưng rõ ràng 451 người khác nghĩ rằng câu trả lời là tốt. Thành thật mà nói, nếu một câu trả lời cho biết X và câu trả lời khác nói rằng X và tham khảo tài liệu, cũng như sao chép các phần tài liệu có liên quan vào câu trả lời, phiếu bầu của tôi sẽ được trả lời thứ hai và đó là lý do tại sao tôi viết câu trả lời Tôi làm. Đó là ai đó tuyên bố X không tốt. Nếu bạn có thể chứng minh X, đó là tốt hơn (không để câu trả lời của sactiw nhẹ). Nhưng, đặc quyền của bạn để suy nghĩ bất cứ điều gì bạn muốn. Tôi hỏi tại sao bạn nghĩ rằng nó là vô nghĩa mặc dù, là câu trả lời sai trong bất kỳ cách nào? - Lasse Vågsæther Karlsen
@Outlier Và thành thật mà nói, nếu bạn không thích đọc câu trả lời "dài" của tôi, thì câu trả lời của tôi không dành cho bạn. Đó là vì những người khác đến đây tự hỏi về điều tương tự và muốn có một số lý do tại sao đó là, và nơi để tìm thêm thông tin, vv Rõ ràng bạn là loại người muốn câu trả lời này: "Không", nhưng tiếc là điều này không phải là một câu trả lời hợp pháp ở đây trên Stack Overflow, cũng không nên. - Lasse Vågsæther Karlsen


Để trả lời câu hỏi của bạn không có sự khác biệt giữa LEFT JOIN   và LEFT OUTER JOIN, chúng giống hệt nhau mà nói...

Ở cấp cao nhất có 3 loại tham gia chính:

  1. BÊN TRONG
  2. OUTER
  3. VƯỢT QUA

  1. INNER JOIN - tìm nạp dữ liệu nếu có trong cả hai bảng.

  2. OUTER JOIN là của 3 loại:

    1. LEFT OUTER JOIN - tìm nạp dữ liệu nếu có trong bảng bên trái.
    2. RIGHT OUTER JOIN - tìm nạp dữ liệu nếu có trong bảng bên phải.
    3. FULL OUTER JOIN - tìm nạp dữ liệu nếu có ở một trong hai bảng.
  3. CROSS JOIN, như tên cho thấy, không [n X m] tham gia mọi thứ với mọi thứ.
    Tương tự như kịch bản mà chúng tôi chỉ liệt kê các bảng để tham gia (trong FROM mệnh đề của SELECT ), sử dụng dấu phẩy để tách chúng.


Các điểm cần lưu ý:

  • Nếu bạn chỉ đề cập đến JOIN sau đó theo mặc định nó là một INNER JOIN.
  • An OUTER tham gia phải LEFT | RIGHT | FULL bạn không thể đơn giản nói OUTER JOIN.
  • Bạn có thể thả OUTER từ khóa và chỉ nói LEFT JOIN hoặc là RIGHT JOIN hoặc là FULL JOIN.

Đối với những người muốn hình dung chúng theo cách tốt hơn, hãy truy cập liên kết này: Giải thích trực quan về các kết nối SQL


621
2017-12-09 18:05



Câu trả lời rất hay. Sẽ rõ ràng hơn nếu bạn nói "LEFT OUTER JOIN - tìm nạp tất cả dữ liệu từ bảng bên trái với dữ liệu phù hợp từ bên phải, nếu được đặt trước". cho 2.1 (và thay đổi tương tự cho 2.2) - ssh
Ngoài ra, bạn có thể tham gia chéo bằng cách đơn giản 'chọn * từ TableA, TableB' - om471987
Xin lỗi nếu tôi necrobumping, nhưng là CROSS JOIN giống như FULL JOIN? - TechnicalTophat
@RhysO no, CROSS JOIN là một sản phẩm Cartesian nghĩa là CROSS JOIN của một bảng, có n hàng, với một bảng, có các hàng m, sẽ luôn cung cấp các hàng (n * m) trong khi FULL OUTER JOIN của một bảng, có n hàng, với một bảng, có m hàng, sẽ cho tối đa (n + m) hàng - sactiw


Sự khác biệt giữa tham gia trái và tham gia bên ngoài bên trái là gì?

Không có gì. LEFT JOIN và LEFT OUTER JOIN tương đương.


274
2018-01-02 08:31



erm xin chào! ai đã bỏ phiếu này xuống? LEFT JOIN tương tự như LEFT OUTER JOIN. - Mitch Wheat
Đây là trường hợp trong Microsoft SQL Server và bất kỳ RDBMS tuân thủ SQL nào khác. - Bill Karwin
Sẽ tốt hơn nếu bạn thêm một tham chiếu hoặc giải thích về lý do tại sao OUTER Là tùy chọn. - Zero3
nó là tùy chọn vì nó không cần thiết! - Mitch Wheat
Làm thế nào về MySQL? Chúng tương đương với? - stack


Đọc thêm tại Visual đại diện của SQL tham gia

Visual Representation of SQL Joins


117
2017-10-28 23:02



Tôi thích đồ thị, nhưng nó có một lỗ hổng. Tại sao họ sẽ sử dụng OUTER trong FULL JOINS nhưng không sử dụng trong LEFT và RIGHT JOINS? Đây là nguyên nhân gây ra toàn bộ sự nhầm lẫn với OUTER - việc sử dụng hỗn hợp của nó. Hoặc là sử dụng 'OUTER' trong tất cả các truy vấn, hoặc không phải là tất cả. Hãy nhất quán! - goku_da_master
-1 thậm chí không giải quyết các câu hỏi thực tế mà chỉ để nhắc nhở bạn là "sự khác biệt giữa tham gia trái và tham gia bên ngoài bên trái là gì?" - Martin Smith
Không trả lời câu hỏi (đó là về LEFT JOIN và LEFT OUTER JOIN). LEFT OUTER JOIN không được hiển thị trong hình ảnh đẹp - DaveBoltman


Tôi là một DBA PostgreSQL, theo như tôi có thể hiểu được sự khác biệt giữa sự khác biệt bên ngoài hoặc bên ngoài tham gia là một chủ đề có thảo luận đáng kể trên toàn internet. Cho đến hôm nay tôi chưa bao giờ thấy sự khác biệt giữa hai người đó; Vì vậy, tôi đã đi xa hơn và tôi cố gắng tìm sự khác biệt giữa những thứ đó. Cuối cùng tôi đọc toàn bộ tài liệu về nó và tôi tìm thấy câu trả lời cho điều này,

Vì vậy, nếu bạn nhìn vào tài liệu (ít nhất là trong PostgreSQL), bạn có thể tìm thấy cụm từ này:

"Từ INNER và OUTER là tùy chọn trong tất cả các biểu mẫu. INNER là mặc định; LEFT, RIGHTFULL ngụ ý tham gia bên ngoài. " 

Nói cách khác,

LEFT JOIN và LEFT OUTER JOIN GIỐNG NHAU

RIGHT JOIN và RIGHT OUTER JOIN GIỐNG NHAU

Tôi hy vọng nó có thể là một đóng góp cho những người vẫn đang cố gắng tìm câu trả lời.


52
2017-08-30 02:33





Không có gì để nói trong các từ bên cạnh điều này:enter image description here


44
2017-08-12 22:05



cách thuận tiện mà các truy vấn loại trừ bên trong bị bỏ qua ... - a20
visualization: "hiếm khi được sử dụng", đẹp - Thomas Mulder


Left Join và Left Outer Join là một và tương tự. Trước đây là viết tắt của thứ hai. Điều tương tự cũng có thể nói về Right Join và Right Outer Join mối quan hệ. Cuộc biểu tình sẽ minh họa cho sự bình đẳng. Ví dụ hoạt động của từng truy vấn đã được cung cấp qua SQL Fiddle. Công cụ này sẽ cho phép thực hiện thao tác truy vấn.

Được

enter image description here

Chỗ nối bên trái và Tham gia bên ngoài bên trái

enter image description here

Các kết quả

enter image description here


Tham gia ngay và Tham gia bên ngoài bên phải

enter image description here

Các kết quả

enter image description here


37
2018-05-22 17:09



Trình bày dễ dàng - vibs2006
Trình diễn tốt. - Naveen Kumar V