Jaka jest różnica między "złączem wewnętrznym" a "złączem zewnętrznym"?

Również jak LEFT JOIN, RIGHT JOIN i FULL JOIN pasuje?

Author: Matt Rowland, 2008-09-02

30 answers

Zakładając, że łączysz się na kolumnach bez duplikatów, co jest bardzo częstym przypadkiem:

  • Połączenie wewnętrzne A i B daje wynik przecięcia B, czyli wewnętrznej części diagramu Venna przecięcia.

  • Zewnętrzne połączenie A i B daje wyniki Unii B, tj. zewnętrznych części Unii diagramu Venna.

Przykłady

Załóżmy, że masz dwie tabele, z jedną kolumną każda, a dane jako "follows": {]}

A    B
-    -
1    3
2    4
3    5
4    6

Zauważ, że (1,2) są unikalne dla A, (3,4) są powszechne, a (5,6) są unikalne dla B.

Połączenie wewnętrzne

Połączenie wewnętrzne przy użyciu jednego z równoważnych zapytań daje przecięcie dwóch tabel, tzn. dwóch wierszy, które mają ze sobą wspólnego.

select * from a INNER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

Left outer join

Lewy zewnętrzny łącznik da wszystkie wiersze w A, plus wszystkie wspólne wiersze w B.

select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b(+);

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4

Złącze ZEWNĘTRZNE PRAWE

Prawe złącze zewnętrzne da wszystkie wiersze w B plus wszystkie wiersze wspólne w A.

select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a(+) = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

Pełne złącze zewnętrzne

Pełne zewnętrzne połączenie da ci połączenie A i B, tzn. wszystkie wiersze w A i wszystkie wiersze w B. Jeśli coś w A nie ma odpowiedniego punktu odniesienia w B, to część B jest null i odwrotnie.

select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5
 5506
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-28 19:52:04

Możesz również rozważyć następujący schemat dla różnych typów połączeń;

wizualne wyjaśnienie połączeń

Źródło: Visual-Representation-of-SQL-Joins wyjaśnione szczegółowo przez C. L. Moffatt

 2476
Author: Teoman shipahi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-06 14:12:27

Polecam Jeff ' s blog article . Najlepszy opis jaki widziałem, plus jest wizualizacja, np.:

Połączenie Wewnętrzne:

Tutaj wpisz opis obrazka

Pełne Połączenie Zewnętrzne:

Tutaj wpisz opis obrazka

 593
Author: ya23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-21 20:15:36

Diagramy Venna nie robią tego za mnie.

Nie wykazują rozróżnienia między łączeniem krzyżowym a łączeniem wewnętrznym, na przykład, lub bardziej ogólnie pokazują rozróżnienie między różnymi typami predykatu łącznika lub zapewniają ramy do rozumowania o tym, jak będą działać.

Nie ma substytutu dla zrozumienia logicznego przetwarzania i jest to stosunkowo proste do zrozumienia i tak.

  1. wyobraź sobie połączenie krzyżowe.
  2. Oceń on klauzula przed wszystkimi wierszami z kroku 1, zachowując te, w których predykat ocenia się na true
  3. (tylko dla złączeń zewnętrznych) Dodaj z powrotem w dowolnych zewnętrznych wierszach, które zostały utracone w Kroku 2.

(uwaga: w praktyce optymalizator zapytań może znaleźć bardziej efektywne sposoby wykonania zapytania niż opis czysto logiczny powyżej, ale wynik końcowy musi być taki sam)

Zacznę od animowanej wersji full outer join . Dalsze wyjaśnienie / align = "left" /

Tutaj wpisz opis obrazka


Wyjaśnienie

Tabele Źródłowe

wpisz opis linku tutaj

Pierwszy początek CROSS JOIN (Aka iloczyn kartezjański). Nie ma klauzuli ON i po prostu zwraca każdą kombinację wierszy z dwóch tabel.

Wybierz A. Kolor, B. Kolor z łącznika krzyżowego B

wpisz opis linku tutaj

Połączenia wewnętrzne i zewnętrzne mają predykat klauzuli "ON".

  • Inner Join. Oblicz warunek w klauzuli " ON " dla wszystkich wierszy w wyniku połączenia krzyżowego. If true zwraca połączony wiersz. W przeciwnym razie należy go wyrzucić.
  • / Align = "Left" / to samo co INNER join, wtedy dla dowolnych wierszy w lewej tabeli, które nie pasują do niczego, wyprowadza je z wartościami NULL dla prawej kolumny tabeli.
  • Prawy Zewnętrzny Łącznik. tak samo jak Inner join wtedy dla dowolnych wierszy w prawej tabeli, które nie pasują do niczego, wyprowadzaj te z wartościami NULL dla lewej tabeli kolumny.
  • Pełne Połączenie Zewnętrzne. tak samo jak wewnętrzne połączenie, a następnie zachowaj lewe niepasujące wiersze, jak w lewym zewnętrznym połączeniu i prawym niepasującym wierszu, jak w prawym zewnętrznym połączeniu.

Niektóre przykłady

Wybierz A. Kolor, B. Kolor Z połączenia wewnętrznego B NA A. Kolor = B. Kolor

Powyższe jest klasycznym połączeniem equi.

Złącze Wewnętrzne

Wersja Animowana

Tutaj wpisz opis obrazka

Wybierz A. Kolor, B. Kolor Z połączenia wewnętrznego B NA A. Kolor Nie w ('zielony','niebieski')

Wewnętrzny warunek join niekoniecznie musi być warunkiem równości i nie musi odwoływać się do kolumn z obu (lub nawet obu) tabel. Ewaluacja A.Colour NOT IN ('Green','Blue') w każdym wierszu krzyża join zwraca.

wewnętrzna 2

Wybierz A. Kolor, B. Kolor Z połączenia wewnętrznego B na 1 =1

Warunek join jest obliczany na true dla wszystkich wierszy w wyniku połączenia krzyżowego, więc jest to takie samo jak połączenie krzyżowe. Nie będę powtarzał obraz z 16 rzędów ponownie.

Wybierz A. Kolor, B. Kolor Z Lewej strony złącz B NA A. Kolor = B. Kolor

Złączenia zewnętrzne są logicznie obliczane tak samo jak złączenia wewnętrzne, z tym wyjątkiem, że jeśli wiersz z lewej tabeli (dla złączenia lewego) nie łączy się z żadnymi wierszami z prawej tabeli, to jest zachowywany w wyniku z wartościami NULL dla kolumn z prawej strony.

LOJ

SELECT A. Colour, B. Colour FROM a LEFT OUTER JOIN B ON A. Colour = B. Kolor, gdzie B. Kolor jest NULL

To po prostu ogranicza poprzedni wynik do zwracania tylko wierszy gdzie B.Colour IS NULL. W tym konkretnym przypadku będą to wiersze, które zostały zachowane, ponieważ nie miały dopasowania w tabeli po prawej stronie, a zapytanie zwraca Pojedynczy Czerwony wiersz nie dopasowany w tabeli B. Jest to znane jako anty pół join.

Ważne jest, aby wybrać kolumnę dla testu IS NULL, która nie jest nullable lub dla której warunek join zapewnia, że dowolne wartości NULL zostanie wykluczone, aby ten wzór działał poprawnie i uniknie przywracania wierszy, które mają wartość NULL dla tej kolumny oprócz dopasowanych wierszy.

loj jest null

Wybierz A. Kolor, B. Kolor Z prawej strony zewnętrznej połącz B NA A. Kolor = B. Kolor

Prawe złączenia zewnętrzne działają podobnie do lewych złączeń zewnętrznych, z wyjątkiem tego, że zachowują niepasujące wiersze z prawej tabeli, a null rozszerza kolumny lewej ręki.

ROJ

Wybierz A. Colour, B. Colour FROM a FULL OUTER JOIN B ON A. Colour = B. Colour

Pełne złączenia zewnętrzne łączą zachowanie lewego i prawego złączenia i zachowują niepasujące wiersze z lewej i prawej tabeli.

FOJ

SELECT A. Colour, B. Colour FROM a FULL OUTER JOIN B ON 1 = 0

Żadne wiersze w łączniku krzyżowym nie pasują do predykatu 1=0. Wszystkie wiersze z obu stron są zachowywane przy użyciu zwykłych reguł zewnętrznych z NULL w kolumnach z tabeli na z drugiej strony.

FOJ 2

SELECT COALESCE (A. Colour, B. Colour) AS Colour FROM a FULL OUTER JOIN B ON 1 = 0

Z drobną poprawką do poprzedniego zapytania można symulować UNION ALL z dwóch tabel.

UNIA WSZYSTKIE

Wybierz A. Kolor, B. Kolor Z Lewej strony złącz B NA A. Kolor = B. Kolor gdzie B. Kolor = 'Zielony'

Zauważ, że klauzula WHERE (jeśli istnieje) logicznie działa po połączeniu. Jednym z najczęstszych błędów jest wykonanie lewego połączenia zewnętrznego a następnie dołącz klauzulę WHERE z warunkiem na prawej tabeli, która kończy się wykluczeniem niepasujących wierszy. Powyższe kończy się wykonaniem połączenia zewnętrznego...

LOJ

... I wtedy działa klauzula "gdzie". NULL= 'Green' nie ocenia na true, więc wiersz zachowany przez zewnętrzne złącze zostaje odrzucony (wraz z Niebieskim) skutecznie konwertując złącze z powrotem na wewnętrzne.

LOJtoInner

Jeśli intencją było włączenie tylko wierszy z B, gdzie kolor jest zielone i wszystkie wiersze z A niezależnie od poprawnej składni będą

Wybierz A. Kolor, B. Kolor Z Lewej strony złącze B NA A. Kolor = B. Kolor I B. Kolor = 'Zielony'

Tutaj wpisz opis obrazka

SQL Fiddle

Zobacz te przykłady uruchom na żywo w SQLFiddle.com .

 545
Author: Martin Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 07:59:59

Poniższy artykuł został zaczerpnięty z artykułu" MySQL - LEFT JOIN and RIGHT JOIN, INNER JOIN and OUTER JOIN "Grahama Ellisa na swoim blogu horse' s Mouth.

W bazie danych, takiej jak MySQL, dane są podzielone na kilka tabel, które są następnie połączone (Joined) razem za pomocą JOIN w poleceniach SELECT do odczytu rekordów z wielu tabel. Przeczytaj ten przykład, aby zobaczyć, jak to działa.

Po pierwsze, niektóre przykładowe dane:

people
    mysql> select * from people;
    +------------+--------------+------+
    | name       | phone        | pid  |
    +------------+--------------+------+
    | Mr Brown   | 01225 708225 |    1 |
    | Miss Smith | 01225 899360 |    2 |
    | Mr Pullen  | 01380 724040 |    3 |
    +------------+--------------+------+
    3 rows in set (0.00 sec)

property
    mysql> select * from property;
    +------+------+----------------------+
    | pid  | spid | selling              |
    +------+------+----------------------+
    |    1 |    1 | Old House Farm       |
    |    3 |    2 | The Willows          |
    |    3 |    3 | Tall Trees           |
    |    3 |    4 | The Melksham Florist |
    |    4 |    5 | Dun Roamin           |
    +------+------+----------------------+
    5 rows in set (0.00 sec)

ZWYKŁE POŁĄCZENIE

Jeśli zrobimy regularne JOIN( bez żadnego ze słów kluczowych INNER, OUTER, LEFT lub RIGHT), wtedy otrzymujemy wszystkie rekordy, które pasują w odpowiedni sposób w dwóch tabelach, A rekordy w obu przychodzących tabelach, które nie pasują, nie są zgłaszane:

mysql> select name, phone, selling 
from people join property 
on people.pid = property.pid;
+-----------+--------------+----------------------+
| name      | phone        | selling              |
+-----------+--------------+----------------------+
| Mr Brown  | 01225 708225 | Old House Farm       |
| Mr Pullen | 01380 724040 | The Willows          |
| Mr Pullen | 01380 724040 | Tall Trees           |
| Mr Pullen | 01380 724040 | The Melksham Florist |
+-----------+--------------+----------------------+
4 rows in set (0.01 sec)

LEFT JOIN

Jeśli wykonamy lewe połączenie, otrzymamy wszystkie rekordy, które pasują do siebie w ten sam sposób, a dodatkowo otrzymamy dodatkowy rekord dla każdego niezrównanego rekordu w lewej tabeli połączenia-zapewniając w ten sposób (w tym przykładzie), że każda osoba otrzyma wzmianka:

   mysql> select name, phone, selling 
    from people left join property 
    on people.pid = property.pid; 
    +------------+--------------+----------------------+
    | name       | phone        | selling              |
    +------------+--------------+----------------------+
    | Mr Brown   | 01225 708225 | Old House Farm       |
    | Miss Smith | 01225 899360 | NULL <<-- unmatch    |
    | Mr Pullen  | 01380 724040 | The Willows          |
    | Mr Pullen  | 01380 724040 | Tall Trees           |
    | Mr Pullen  | 01380 724040 | The Melksham Florist |
    +------------+--------------+----------------------+
    5 rows in set (0.00 sec)

RIGHT JOIN

Jeśli wykonamy poprawne JOIN, otrzymamy wszystkie rekordy, które pasują, a dodatkowo dodatkowy rekord dla każdego niezrównanego rekordu w prawej tabeli join - w moim przykładzie oznacza to, że każda właściwość dostaje wzmiankę, nawet jeśli nie mamy danych sprzedającego:

mysql> select name, phone, selling 
from people right join property 
on people.pid = property.pid;
+-----------+--------------+----------------------+
| name      | phone        | selling              |
+-----------+--------------+----------------------+
| Mr Brown  | 01225 708225 | Old House Farm       |
| Mr Pullen | 01380 724040 | The Willows          |
| Mr Pullen | 01380 724040 | Tall Trees           |
| Mr Pullen | 01380 724040 | The Melksham Florist |
| NULL      | NULL         | Dun Roamin           |
+-----------+--------------+----------------------+
5 rows in set (0.00 sec)

INNER JOIN wykonuje pełne join, tak jak w pierwszym przykładzie, a słowo OUTER może być dodane po słowie w lewo lub w prawo w dwóch ostatnich przykładach - jest przewidziane dla Kompatybilność ODBC i nie dodaje dodatkowych możliwości.

 294
Author: gtiwari333,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-05 11:21:45

Joins są używane do łączenia danych z dwóch tabel, w wyniku czego powstaje nowa, tymczasowa tabela. Połączenia są wykonywane na podstawie czegoś, co nazywa się predykatem, który określa warunek, którego należy użyć w celu wykonania połączenia. Różnica między łącznikiem wewnętrznym a łącznikiem zewnętrznym polega na tym, że łącznik wewnętrzny zwróci tylko wiersze, które rzeczywiście pasują do predykatu łącznika. Lets consider Employee and Location table:

Tutaj wpisz opis obrazka

Inner Dołącz:- INNER join tworzy nową tabelę wyników, łącząc wartości kolumn z dwóch tabel ( Employee i Location ) w oparciu o predykat join. Zapytanie porównuje każdy wiersz Employee z każdym wierszem Location, aby znaleźć wszystkie pary wierszy, które spełniają predykat join. Gdy predykat join jest spełniony przez dopasowanie wartości innych niż NULL, wartości kolumn dla każdej dopasowanej pary wierszy Employee i Location są połączone w wierszu wynikowym. Oto jak będzie wyglądał SQL dla połączenia wewnętrznego:

select  * from employee inner join location on employee.empID = location.empID
OR
select  * from employee, location where employee.empID = location.empID

Oto jak wyglądałby wynik uruchomienia tego SQL ' a: Tutaj wpisz opis obrazkaTutaj wpisz opis obrazka

Złącze Zewnętrzne: - Połączenie zewnętrzne nie wymaga, aby każdy rekord w dwóch połączonych tabelach miał pasujący rekord. Połączona tabela zachowuje każdy rekord-nawet jeśli nie istnieje żaden inny pasujący rekord. Połączenia zewnętrzne dzielą się dalej na połączenia ZEWNĘTRZNE LEWE I ZEWNĘTRZNE PRAWE, w zależności od wierszy tabeli są zachowane (w lewo lub w prawo).

Left Outer Join:- Wynik połączenia left outer join (lub po prostu left join) dla tabel Employee i Location zawsze zawiera wszystkie rekordy tabeli" left " (Employee ), nawet jeśli warunek join nie znajduje żadnego pasującego rekordu w tabeli "right" ( Location). Oto, jak wyglądałby SQL dla lewego zewnętrznego połączenia, używając powyższych tabel:

select  * from employee left outer join location on employee.empID = location.empID;
//Use of outer keyword is optional

Oto, co wynik uruchomienia tego SQL ' a wyglądałby następująco: Tutaj wpisz opis obrazkaTutaj wpisz opis obrazka

Prawe Złącze Zewnętrzne:- Prawe złącze zewnętrzne (lub prawe złącze) bardzo przypomina lewe złącze zewnętrzne, z wyjątkiem traktowania tabel odwróconych. Każdy wiersz z" prawej " tabeli (Location ) pojawi się w połączonej tabeli co najmniej raz. Jeśli nie ma pasującego wiersza z tabeli" left " (Employee ), NULL pojawi się w kolumnach z Employee dla tych rekordów, które nie ma dopasowania w miejscu . Tak wygląda SQL:

select * from employee right outer join location  on employee.empID = location.empID;
//Use of outer keyword is optional

Korzystając z powyższych tabel, możemy pokazać, jak wyglądałby zestaw wynikowy prawego złączenia zewnętrznego:

Tutaj wpisz opis obrazkaTutaj wpisz opis obrazka

Pełne Połączenia Zewnętrzne: - Pełne złącze zewnętrzne lub Pełne złącze ma na celu zachowanie informacji niepasujących, włączając niepasujące wiersze w wynikach połączenia, użyj pełnego złącza zewnętrznego. Obejmuje wszystkie wiersze z obu tabel, niezależnie od tego, czy druga tabela ma pasująca wartość. Tutaj wpisz opis obrazka

Źródło Obrazu

MySQL 8.0 Reference Manual-Join Syntax

Oracle Join operations

 117
Author: ajitksharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-07 14:38:49

Inner Join

Pobiera tylko dopasowane wiersze, czyli A intersect B.

Tutaj wpisz opis obrazka

SELECT *
FROM dbo.Students S
INNER JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Left Outer Join

Wybierz wszystkie rekordy z pierwszej tabeli i wszystkie rekordy z drugiej stół pasujący do połączonych kluczy.

Tutaj wpisz opis obrazka

SELECT *
FROM dbo.Students S
LEFT JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Pełne Połączenie Zewnętrzne

Wybierz wszystkie rekordy z drugiej tabeli i wszystkie rekordy z pierwszej tabela pasująca do łączonych klucze.

Tutaj wpisz opis obrazka

SELECT *
FROM dbo.Students S
FULL JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Referencje

 115
Author: Tushar Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 15:38:32

W prostych słowach:

An inner join pobiera tylko dopasowane wiersze.

Natomiast zewnętrzne połączenie pobiera dopasowane wiersze z jednej tabeli i wszystkie wiersze z drugiej tabeli ....wynik zależy od tego, którego z nich używasz:

  • Left : dopasowane wiersze w prawej tabeli i wszystkie wiersze w lewej tabeli

  • Right: dopasowane wiersze w lewej tabeli i wszystkie wiersze w prawej tabeli lub

  • Full : wszystkie wiersze we wszystkich tabelach. Nie ma znaczenia czy jest dopasowanie czy nie

 101
Author: vidyadhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 15:35:37

Złącze wewnętrzne pokazuje wiersze tylko wtedy, gdy po drugiej (prawej) stronie złącza znajduje się pasujący rekord.

A (lewy) zewnętrzny łącznik pokazuje wiersze dla każdego rekordu po lewej stronie, nawet jeśli nie ma pasujących wierszy po drugiej (prawej) stronie łącznika. Jeśli nie ma pasującego wiersza, kolumny dla drugiej (prawej) strony będą pokazywały null.

 93
Author: 1800 INFORMATION,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-05 01:14:26

Połączenia wewnętrzne wymagają, aby w połączonej tabeli istniał rekord o powiązanym identyfikatorze.

Zewnętrzne połączenia zwrócą rekordy dla lewej strony, nawet jeśli dla prawej nie istnieje nic.

Na przykład, masz tabelę Orderdetails i Orderdetails. Są one związane przez "OrderID"

Zamówienia

  • OrderID
  • nazwa użytkownika

OrderDetails

  • OrderDetailID
  • OrderID
  • Nazwa produktu
  • Qty
  • cena

Żądanie

SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
 INNER JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

Zwróci tylko zamówienia, które również mają coś w tabeli OrderDetails.

Jeśli zmienisz go na Outer LEFT JOIN

SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
  LEFT JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

Wtedy zwróci rekordy z tabeli Orders nawet jeśli nie ma żadnych zapisów OrderDetails.

Możesz użyć tego, aby znaleźć zamówienia, które nie mają żadnych OrderDetails wskazujących możliwe osierocone zamówienie, dodając klauzulę where, taką jak WHERE OrderDetails.OrderID IS NULL.

 68
Author: Brian Boatright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-10 08:25:51

W prostych słowach:

INNER join - > pobiera tylko wspólne rekordy z tabel nadrzędnych i podrzędnych, gdzie klucz podstawowy tabeli nadrzędnej pasuje do klucza obcego w tabeli podrzędnej.

/ align = "Left" / ->

Pseudo kod

1.Take All records from left Table
2.for(each record in right table,) {
    if(Records from left & right table matching on primary & foreign key){
       use their values as it is as result of join at the right side for 2nd table.
    } else {
       put value NULL values in that particular record as result of join at the right side for 2nd table.
    }
  }

Right join : dokładnie odwrotnie niż left join . Umieść nazwę tabeli w lewym łączniku po prawej stronie w prawym łączniku, otrzymasz takie same wyniki jak w lewym łączniku.

Outer join : pokazuje wszystkie rekordy w obu tabelach No matter what. Jeśli rekordy w lewej tabeli nie pasują do prawej tabeli bazującej na głównym kluczu Forieign, użyj wartości NULL jako wyniku join .

Przykład:

Przykład

Załóżmy teraz dla 2 tabel

1.employees , 2.phone_numbers_employees

employees : id , name 

phone_numbers_employees : id , phone_num , emp_id   

Tutaj tabela pracowników jest tabelą nadrzędną, phone_numbers_employees jest tabelą podrzędną (zawiera emp_id jako klucz obcy, który łączy employee.id, a więc jego tabelę podrzędną.)

Połączenia wewnętrzne

Weź rekordy 2 tabel tylko wtedy, gdy klucz podstawowy tabeli pracowników (jej id) pasuje do klucza obcego tabeli podrzędnej phone_numbers_employees (emp_id) .

Więc zapytanie będzie:

SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Tutaj weź tylko pasujące wiersze na klucz podstawowy = klucz obcy, jak wyjaśniono powyżej.Tutaj niepasujące wiersze na klucz główny = klucz obcy są pomijane jako wynik połączenia.

Lewy joined :

LEFT join zachowuje wszystkie wiersze lewej tabeli, niezależnie od tego, czy wiersz pasuje do prawej stolik.

SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Złącza zewnętrzne :

SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Diagramatycznie wygląda to tak:

Diagram

 58
Author: Pratik C Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-19 05:11:56

Używasz INNER JOIN aby zwrócić wszystkie wiersze z obu tabel, w których występuje dopasowanie. tzn. w wynikowej tabeli wszystkie wiersze i kolumny będą miały wartości.

W OUTER JOIN wynikowa tabela może mieć puste kolumny. Złącze zewnętrzne może być LEFT lub RIGHT.

LEFT OUTER JOIN zwraca wszystkie wiersze z pierwszej tabeli, nawet jeśli w drugiej tabeli nie ma dopasowań.

RIGHT OUTER JOIN zwraca wszystkie wiersze z drugiej tabeli, nawet jeśli nie ma dopasowań w pierwszej tabeli.

 52
Author: vijikumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-09 03:21:07

To jest dobre wyjaśnienie dla joins

Jest to dobre diagramatyczne Wyjaśnienie dla wszelkiego rodzaju połączeń

Źródło: http://ssiddique.info/understanding-sql-joins-in-easy-way.html

 50
Author: Raghu K Nair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-18 18:48:59

INNER JOIN wymaga jest co najmniej mecz w porównaniu dwóch tabel. Na przykład tabela A I Tabela B, która implikuje a ٨ B (przecięcie B).

LEFT OUTER JOIN i LEFT JOIN są takie same. Daje wszystkie rekordy pasujące w obu tabelach i wszystkie możliwości lewej tabeli.

Podobnie, RIGHT OUTER JOIN i RIGHT JOIN są takie same. Daje wszystkie rekordy pasujące do obu tabel i wszystkie możliwości odpowiedniej tabeli.

FULL JOIN jest połączeniem LEFT OUTER JOIN i RIGHT OUTER JOIN bez duplikacja.

 48
Author: naga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-26 21:25:28

Odpowiedź jest w znaczeniu każdego z nich, więc w wynikach.

Uwaga:
W SQLite nie ma RIGHT OUTER JOIN ani FULL OUTER JOIN.
A także w MySQL nie ma FULL OUTER JOIN.

Moja odpowiedź opiera się na powyższej notce.

Gdy masz dwie tabele takie jak te:

--[table1]               --[table2]
id | name                id | name
---+-------              ---+-------
1  | a1                  1  | a2
2  | b1                  3  | b2

POŁĄCZENIE KRZYŻOWE / ZEWNĘTRZNE:
Możesz mieć wszystkie te tabele z CROSS JOIN lub po prostu z , Jak to:

SELECT * FROM table1, table2
--[OR]
SELECT * FROM table1 CROSS JOIN table2

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2
1  | a1   | 3  | b2
2  | b1   | 1  | a2
2  | b1   | 3  | b2

POŁĄCZENIE WEWNĘTRZNE:
Jeśli chcesz dodać filtr do powyższych wyników w oparciu o relację table1.id = table2.id możesz użyć INNER JOIN:

SELECT * FROM table1, table2 WHERE table1.id = table2.id
--[OR]
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2

LEFT [OUTER] JOIN:
Jeśli chcesz mieć wszystkie wiersze jednej z tabel w powyższym wyniku - z tą samą relacją - możesz użyć LEFT JOIN:
(For RIGHT JOIN just change place of tables)

SELECT * FROM table1, table2 WHERE table1.id = table2.id 
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
--[OR]
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id   | name 
---+------+------+------
1  | a1   | 1    | a2
2  | b1   | Null | Null

PEŁNE POŁĄCZENIE ZEWNĘTRZNE:
Gdy chcesz również mieć wszystkie wiersze z drugiej tabeli w wynikach można użyć FULL OUTER JOIN:

SELECT * FROM table1, table2 WHERE table1.id = table2.id
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
UNION ALL
SELECT Null, Null, * FROM table2 WHERE Not table2.id In (SELECT id FROM table1)
--[OR] (recommended for SQLite)
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
UNION ALL
SELECT * FROM table2 LEFT JOIN table1 ON table2.id = table1.id
WHERE table1.id IS NULL
--[OR]
SELECT * FROM table1 FULL OUTER JOIN table2 On table1.id = table2.id

--[Results:]
id   | name | id   | name 
-----+------+------+------
1    | a1   | 1    | a2
2    | b1   | Null | Null
Null | Null | 3    | b2

Cóż, jako swoje potrzeby wybierasz każdą, która pokrywa twoje potrzeby ;).

 37
Author: shA.t,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-12 08:50:33

Różnica polega na sposobie łączenia tabel, jeśli nie ma wspólnych rekordów.

  • JOIN jest taka sama jak {[2] } i oznacza wyświetlanie tylko rekordów wspólnych dla obu tabel. To, czy rekordy są wspólne, zależy od pól w klauzuli join. Na przykład:

    FROM t1
    JOIN t2 on t1.ID = t2.ID
    

    Oznacza wyświetlanie tylko rekordów, w których w obu tabelach istnieje ta sama wartość ID.

  • LEFT JOIN jest taka sama jak LEFT OUTER JOIN i oznacza wyświetlenie wszystkich rekordów z lewej tabeli (tj. tej, która poprzedza w SQL statement) niezależnie od istnienia pasujących rekordów w odpowiedniej tabeli.

  • RIGHT JOIN jest tym samym co RIGHT OUTER JOIN i oznacza przeciwieństwo LEFT JOIN, tzn. pokazuje wszystkie rekordy z drugiej (prawej) tabeli i tylko pasujące rekordy z pierwszej (lewej) tabeli.

Źródło: Jaka jest różnica między lewą, prawą, wewnętrzną, zewnętrzną, połączoną?

 28
Author: Aldee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-18 07:33:10

Połączenie wewnętrzne.

Join jest połączeniem wierszy z dwóch tabel. Połączenie wewnętrzne próbuje dopasować dwie tabele na podstawie kryteriów podanych w zapytaniu i zwraca tylko te wiersze, które pasują. Jeśli wiersz z pierwszej tabeli w join pasuje do dwóch wierszy w drugiej tabeli, wtedy w wynikach zostaną zwrócone dwa wiersze. Jeśli w pierwszej tabeli znajduje się wiersz, który nie pasuje do wiersza w drugiej, nie jest zwracany; podobnie, jeśli w drugiej jest wiersz tabela, która nie pasuje do pierwszego rzędu, nie jest zwracana.

Zewnętrzne Połączenie.

A left join próbuje znaleźć dopasowanie wierszy z pierwszej tabeli do wierszy z drugiej tabeli. Jeśli nie może znaleźć dopasowania, zwróci kolumny z pierwszej tabeli i pozostawi kolumny z drugiej tabeli puste (null).

 28
Author: Kanwar Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 11:14:00

Nie widzę wiele szczegółów na temat wydajności i optymalizacji w innych odpowiedziach.

Czasami dobrze jest wiedzieć, że tylko INNER JOIN jest asocjacyjny, co oznacza, że optymalizator ma najwięcej opcji do zabawy. Może zmienić kolejność połączeń, aby szybciej utrzymać ten sam wynik. Optymalizator może korzystać z większości trybów łączenia.

Ogólnie dobrą praktyką jest używanie INNER JOIN zamiast różnego rodzaju połączeń. (Oczywiście jeśli jest to możliwe biorąc pod uwagę oczekiwane wynik ustawiony.)

Jest tu kilka dobrych przykładów i wyjaśnień na temat tego dziwnego asocjacyjnego zachowania:

 22
Author: Lajos Veres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:48

Różnica polega na sposobie łączenia tabel, jeśli nie ma wspólnych rekordów.

JOIN jest taka sama jak {[2] } i oznacza wyświetlanie tylko rekordów wspólnych dla obu tabel. To, czy rekordy są wspólne, zależy od pól w klauzuli join.

Na przykład:

SELECT * 
FROM t1
JOIN t2 on t1.ID = t2.ID

Oznacza wyświetlanie tylko rekordów, w których w obu tabelach istnieje ta sama wartość ID.

LEFT JOIN jest taki sam jak LEFT OUTER JOIN i oznacza wyświetlenie wszystkich rekordów z lewej tabeli (tzn. tej, która poprzedza w poleceniu SQL) niezależnie od istnienia pasujących rekordów w prawej tabeli.

RIGHT JOIN jest taka sama jak RIGHT OUTER JOIN i oznacza przeciwieństwo LEFT JOIN, tzn. pokazuje wszystkie rekordy z drugiej (prawej) tabeli i tylko pasujące rekordy z pierwszej (lewej) tabeli.

 21
Author: Rahul Parit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-15 04:41:04

Skrytykowawszy uwielbiany czerwony diagram Venna, uznałem, że słuszne jest opublikowanie własnej próby.

Chociaż odpowiedź @ Martin Smith jest najlepsza z tej grupy przez długi czas, jego tylko pokazuje kolumnę klucza z każdej tabeli, podczas gdy myślę, że najlepiej kolumny bez klucza powinny być pokazane.

Najlepsze co mogłem zrobić w ciągu pół godziny, nadal uważam, że nie pokazuje to odpowiednio, że null są tam z powodu braku kluczowych wartości w TableB lub że {[1] } jest rzeczywiście Unią zamiast łącznika:

Tutaj wpisz opis obrazka

 18
Author: onedaywhen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-22 15:23:20

Precyzyjny algorytm dla INNER JOIN, LEFT/RIGHT OUTER JOIN są następujące:

  1. weź każdy wiersz z pierwszej tabeli: a
  2. rozważmy wszystkie wiersze z drugiej tabeli obok: (a, b[i])
  3. Oceń klauzulę ON ... dla każdej pary: ON( a, b[i] ) = true/false?
    • gdy warunek zostanie obliczony na true, zwróć ten połączony wiersz (a, b[i]).
    • gdy osiągniesz koniec drugiej tabeli bez dopasowania, a jest to Outer Join, zwróć (virtual) parę używając Null dla wszystkich kolumn inne tabele: (a, Null) dla lewego złączenia zewnętrznego lub {[11] } dla prawego złączenia zewnętrznego. Ma to na celu zapewnienie istnienia wszystkich wierszy pierwszej tabeli w wynikach końcowych.

Uwaga: warunek określony w klauzuli ON może być dowolny, nie jest wymagane używanie kluczy podstawowych (i nie musisz zawsze odwoływać się do kolumn z obu tabel)! Na przykład:

Złącze wewnętrzne vs. lewe złącze zewnętrzne


Tutaj wpisz opis obrazka

Uwaga: Left Join = Left Outer Join, Right Join = Right Outer Join.

 16
Author: S.Serpooshan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-11 14:16:16

Inner Join INNER join skupia się na podobieństwie między dwoma stołami. Podczas korzystania z połączenia wewnętrznego, muszą istnieć co najmniej pewne pasujące dane między dwoma (lub więcej) tabelami, które są porównywane. Połączenie wewnętrzne przeszukuje tabele w poszukiwaniu pasujących lub nakładających się danych. Po znalezieniu, połączenie wewnętrzne łączy i zwraca informacje w jednej nowej tabeli.

Złącze Zewnętrzne Zewnętrzne złącze zwraca zestaw rekordów (lub wierszy), które zawierają to, co wewnętrzne złącze zwróci, ale także zawierają inne wiersze, dla których w drugiej tabeli nie znaleziono odpowiedniego dopasowania.

Istnieją trzy rodzaje złączy zewnętrznych:

Left Outer Join (lub Left Join) Right Outer Join (lub Right Join) Pełne połączenie zewnętrzne (lub pełne połączenie) Każde z tych zewnętrznych złączeń odnosi się do części danych, które są porównywane, łączone i zwracane. Czasami null będą tworzone w tym procesie, ponieważ niektóre dane są współdzielone, a inne nie.

 15
Author: Sumudu De Zoysa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-07 10:53:13

Najprostsze Definicje

Inner Join: zwraca dopasowane rekordy z obu tabel.

Full Outer Join: zwraca dopasowane i niepasowane rekordy z obu tabel z null dla niepasowanych rekordów z obu tabel.

Left Outer Join: zwraca dopasowane i niedopasowane rekordy tylko z tabeli Left Side .

Right Outer Join: zwraca dopasowane i niedopasowane rekordy tylko z tabeli na Right Strona .

In-Short

Dopasowane + Lewy Niezrównany + Prawy Niezrównany = Pełne Zewnętrzne Połączenie

Dopasowany + Lewy Niezrównany = Lewy Zewnętrzny Join

Dopasowany + Prawy Niezrównany = Prawy Zewnętrzny Łącznik

Matched = Inner Join

 15
Author: Akshay Khale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-28 09:10:48

POŁĄCZENIE WEWNĘTRZNE

Połączenie wewnętrzne tworzy zestaw wyników, który jest ograniczony do wierszy, w których istnieje dopasowanie w obu tabelach dla tego, czego szukamy. Jeśli nie wiesz, jakiego rodzaju dołączyć trzeba, to zazwyczaj będzie najlepszym rozwiązaniem.

LEFT OUTER JOIN

Lewy zewnętrzny łącznik lub lewy łącznik powoduje, że wszystkie wiersze z pierwszej lub lewej strony tabeli są zachowane. Wiersze z drugiej lub prawej strony tabeli pojawiają się tylko wtedy, gdy mają mecz z wierszami z pierwszej tabeli. W przypadku, gdy są wartości z lewej tabeli, ale nie z prawej, tabela odczyta wartość null, co oznacza, że wartość nie została ustawiona.

RIGHT OUTER JOIN

Prawe złącze zewnętrzne lub prawe złącze jest takie samo jak lewe złącze, z tym że role są odwrócone. Wszystkie wiersze z tabeli po prawej stronie wyświetlają się w wyniku, ale wiersze z tabeli po lewej stronie są tam tylko wtedy, gdy pasują do tabeli na racja. Puste spacje są null, podobnie jak w przypadku lewego łącznika.

PEŁNE ZŁĄCZE ZEWNĘTRZNE

Pełne zewnętrzne połączenie, lub po prostu zewnętrzne połączenie, tworzy zestaw wyników ze wszystkimi wierszami obu tabel, niezależnie od tego, czy są jakieś dopasowania. Podobnie jak lewy i prawy łącznik, puste przestrzenie nazywamy null.

Więcej

 12
Author: AVI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-20 01:30:53

Tutaj wpisz opis obrazka

  • INNER JOIN najbardziej typowe połączenie dla dwóch lub więcej tabel. Zwraca dopasowanie danych zarówno w tabeli w relacji primarykey, jak i forignkey.
  • {[2] } jest taki sam jak INNER JOIN, ale zawiera również dane NULL na ResultSet.
    • LEFT JOIN = INNER JOIN + niezrównane dane lewej tabeli z Null match na prawej tabeli.
    • RIGHT JOIN = INNER JOIN + niezrównane dane prawej tabeli z NULL match na lewej tabeli.
    • FULL JOIN = INNER JOIN + niezrównane dane zarówno po prawej, jak i pozostawione tabele z NULL matches.
  • SELF join nie jest słowem kluczowym w SQL, gdy tabela odwołuje się do danych jako self join. Używając INNER JOIN i OUTER JOIN możemy pisać własne zapytania join.

Na przykład:

SELECT * 
FROM   tablea a 
       INNER JOIN tableb b 
               ON a.primary_key = b.foreign_key 
       INNER JOIN tablec c 
               ON b.primary_key = c.foreign_key 
 12
Author: Premraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-25 07:34:09

Jaka jest różnica między "wewnętrznym połączeniem" a "zewnętrznym połączeniem"?

Są to najczęściej używane operatory egzystencjalne w SQL, gdzie {[8] } jest używane dla 'exists' i LEFT OUTER JOIN jest używane dla 'does not exist'.

Rozważ te zapytania:

users who have posted and have votes
users who have posted but have no badges

Osoby szukające rozwiązań opartych na zestawach (termin branżowy) rozpoznają odpowiednie zapytania jako: {28]}

users who have posted INTERSECT users who have votes
users who have posted MINUS users who have badges

Tłumaczenie ich na standardowy SQL:

SELECT UserId FROM Posts
INTERSECT 
SELECT UserId FROM Votes;

SELECT UserId FROM Posts
EXCEPT 
SELECT UserId FROM Badges;

Inni pomyślą podobne linie włączenia zestawu:

users who have posted and IN the set of users who have votes
users who have posted and NOT IN the set of users who have badges

Tłumaczenie ich na standardowy SQL:

SELECT UserId 
  FROM Posts
 WHERE UserId IN ( SELECT UserId FROM Votes );

SELECT UserId 
  FROM Posts
 WHERE UserId NOT IN ( SELECT UserId FROM Badges );

Niektórzy będą myśleć w kategoriach "egzystencji" w ramach zbiorów, np.

users who have posted and EXIST in the set of users who have votes
users who have posted and do NOT EXIST in the set of users who have badges

Tłumaczenie ich na standardowy SQL (Uwaga musimy teraz użyć zmiennych zakresu tj. p, v, b):

SELECT p.UserId 
  FROM Posts p
 WHERE EXISTS ( SELECT *
                  FROM Votes v
                 WHERE v.UserId = p.UserId );

SELECT p.UserId 
  FROM Posts p
 WHERE NOT EXISTS ( SELECT *
                      FROM Badges b
                     WHERE b.UserId = p.UserId );

Jednak odkryłem, że "standardem branżowym" jest wyłącznie używanie połączeń. Nie wiem o co tu chodzi (prawo instrumentu ? przedwczesny optymalizacja ?), więc przejdę od razu do składni:

SELECT p.UserId 
  FROM Posts p
       INNER JOIN Votes v ON v.UserId = p.UserId;

SELECT p.UserId 
  FROM Posts p
       LEFT JOIN Badges b ON b.UserId = p.UserId
 WHERE b.UserId IS NULL;

Rzeczy do zapamiętania:

  • jedyna projekcja jest z {[13] } ale wciąż potrzebujemy tych wszystkich zmiennych zakresowych(p, v, b) dla warunków wyszukiwania.
  • UserId IS NULL warunek wyszukiwania 'należy' do OUTER JOIN, ale jest odłączony w zapytaniu.
  • LEFT jest standardem branżowym: profesjonaliści przepiszą zapytanie, aby uniknąć używania RIGHT!
  • słowo kluczowe OUTER z LEFT OUTER JOIN to pominięte.

Uwagi końcowe:

Czasami łączniki są używane w zapytaniach wyłącznie w celu określenia, czy wartości istnieją lub nie istnieją w innym zbiorze. Naucz się uważnie patrzeć na wyświetlane atrybuty( kolumny w klauzuli SELECT): jeśli nie ma żadnych z połączonej tabeli, są one po prostu używane jako operatory egzystencjalne. Dodatkowo w przypadku połączenia zewnętrznego poszukaj instancji <key_column> IS NULL w klauzuli WHERE.

 9
Author: onedaywhen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-19 12:48:44
  • Inner join - An inner join używając jednego z równoważnych zapytań daje przecięcie dwóch tabel , tzn. dwóch wspólnych wierszy.

  • Left outer join - A LEFT outer join Da wszystkie wiersze w A, plus wszystkie wspólne wiersze w B.

  • Full outer join - A full outer join da ci połączenie A i B, tzn. wszystkie wiersze w A i wszystkie wiersze w B. Jeśli coś w A nie ma odpowiedniego punktu odniesienia w B, wtedy część B jest null, a vice versay

 4
Author: Sandesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-23 13:55:57

W Prostych Słowach,

1.INNER JOIN lub EQUI JOIN: zwraca zestaw wyników, który pasuje Tylko do warunku w obu tabelach.

2.OUTER JOIN: zwraca zestaw wynikowy wszystkich wartości z obu tabel, nawet jeśli warunek jest zgodny lub nie.

3. LEFT JOIN: zwraca zestaw wynikowy wszystkich wartości z lewej tabeli i tylko wierszy, które pasują do warunku w prawej tabeli.

4.RIGHT JOIN: zwraca zestaw wyników wszystkich wartości z prawej tabeli i tylko wiersze, które pasują do warunku w lewej tabeli.

5.FULL JOIN: Full Join i Full outer Join są takie same.

 4
Author: Anands23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-13 09:04:54

1.Inner Join: nazywany również Join. Zwraca wiersze obecne zarówno w lewej tabeli, jak i w prawej tabeli tylko , jeśli istnieje dopasowanie . W przeciwnym razie zwraca zero rekordów.

Przykład:

SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
INNER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id

output1

2.pełne połączenie zewnętrzne: nazywane również pełnym połączeniem. Zwraca wszystkie wiersze obecne zarówno w lewej, jak i prawej tabeli.

Przykład:

SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
FULL OUTER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id

output2

3.LEFT Outer join: Or po prostu nazywa się Left Join. Zwraca wszystkie wiersze obecne w lewej tabeli i pasujące wiersze z prawej tabeli (jeśli istnieją).

4.Right Outer Join: nazywane również jako Right Join. Zwraca pasujące wiersze z lewej tabeli (jeśli istnieją) oraz wszystkie wiersze obecne w prawej tabeli.

dołącza

Zalety łączenia

  1. wykonuje się szybciej.
 3
Author: Laxmi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-28 04:17:49

Różnica między złączem wewnętrznym a zewnętrznym jest następująca:

  1. inner join to join, który łączy tabele oparte na dopasowanych krotkach, podczas gdy outer join to join, który łączy tabelę opartą na dopasowanych i niedopasowanych krotkach.
  2. inner join łączy dopasowany wiersz z dwóch tabel, gdzie niepasowany wiersz jest pominięty, podczas gdy zewnętrzne join łączy wiersze z dwóch tabel i niepasowane wiersze wypełniają wartością null.
  3. połączenie wewnętrzne jest jak operacja przecięcia, podczas gdy zewnętrzne dołączenie jest jak operacja związkowa.
  4. Złącze wewnętrzne to dwa typy, podczas gdy złącze zewnętrzne to trzy typy.
  5. Połączenie wewnętrzne jest wolniejsze, podczas gdy połączenie zewnętrzne jest szybsze niż połączenie wewnętrzne.
 1
Author: rashedcs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-17 12:25:56