MySQL Dołącz: Wewnętrzny, Zewnętrzny, Lewy, Prawy, Krzyżowy

⚡ Inteligentne podsumowanie

MySQL JOINS łączą wiersze z dwóch lub więcej powiązanych tabel w jeden zestaw wyników. Ten materiał wyjaśnia JOINS CROSS, INNER, LEFT, RIGHT i OUTER z zapytaniami uruchamialnymi, przykładowymi danymi i przejrzystymi tabelami wyjściowymi do praktycznej pracy z bazami danych.

  • 🔗 Zasada główna: Połączenie JOIN dopasowuje wiersze w tabelach, wykorzystując relacje klucza podstawowego i klucza obcego.
  • Dlaczego jest to ważne: Jedno zapytanie JOIN wykorzystuje indeksowanie i zmniejsza liczbę cykli przesyłania danych między serwerami w porównaniu z kilkoma oddzielnymi zapytaniami.
  • ✖️. Zachowanie Cross JOIN: Każdy wiersz pierwszej tabeli łączy się z każdym wierszem drugiej tabeli, dając w efekcie iloczyn kartezjański.
  • 🎯 Zachowanie wewnętrzne JOIN: Zwracane są tylko wiersze spełniające warunek dopasowania w obu tabelach.
  • ↔️ Zachowanie zewnętrznego JOIN: Funkcje LEFT i RIGHT JOIN zwracają również niepasujące wiersze i wypełniają brakujące kolumny wartością NULL.
  • 🧩 WŁĄCZONY kontra UŻYWANY: USING wymaga identycznych nazw kolumn, natomiast ON obsługuje dowolne pasujące wyrażenie.

MySQL ŁĄCZY

Czym są DOŁĄCZENIA?

Złączenia pomagają w pobieraniu danych z dwóch lub więcej tabel bazy danych.

Tabele są ze sobą powiązane za pomocą kluczy podstawowych i obcych.

Uwaga: JOIN to najbardziej niezrozumiały temat wśród osób uczących się SQL. Dla uproszczenia i ułatwienia zrozumienia, do ćwiczenia przykładu użyjemy nowej bazy danych. Jak pokazano poniżej.

Każdy z poniższych przykładów wykorzystuje te dwie tabele. identyfikator_filmu kolumna w członkowie wskazuje na id kolumna w filmy — relacja, do której pasuje każde JOIN.

członkowie

id pierwsze imię nazwisko identyfikator_filmu
1 Adam Kowal 1
2 Ravi Kumar 2
3 Susan Davidson 5
4 Jenny Adrianna 8
5 Lee Pong 10

filmy

id tytuł kategoria
1 ASSASSIN'S CREED: EMBERS Animacje
2 Prawdziwa stal (2012) Animacje
3 Alvin i wiewiórki Animacje
4 Przygody Tin Tin Animacje
5 Bezpieczny (2012) Działania
6 Bezpieczny dom (2012) Działania
7 GIA 18 +
8 Termin 2009 18 +
9 Brudny obrazek 18 +
10 Marley i ja Romans

Dlaczego powinniśmy używać połączeń JOIN?

Zanim przyjrzymy się poszczególnym typom połączeń JOIN, warto wiedzieć, dlaczego połączenie JOIN jest lepszym rozwiązaniem niż wykonywanie kilku zapytań.

Teraz możesz pomyśleć, dlaczego używamy JOIN, skoro możemy wykonać to samo zadanie, uruchamiając zapytania. Zwłaszcza jeśli masz pewne doświadczenie w programowaniu baz danych, wiesz, że możemy uruchamiać zapytania jedno po drugim i wykorzystywać dane wyjściowe każdego z nich w kolejnych zapytaniach. Oczywiście, że jest to możliwe. Ale używając JOIN, możesz wykonać całą pracę, używając tylko jednego zapytania z dowolnymi parametrami wyszukiwania. Z drugiej strony MySQL może osiągnąć lepszą wydajność z JOINami, ponieważ może korzystać z indeksowania. Po prostu użycie pojedynczego zapytania JOIN zamiast uruchamiania wielu zapytań zmniejsza obciążenie serwera. Zamiast tego używaj wielu zapytań, co prowadzi do większej liczby transferów danych między MySQL i aplikacje (oprogramowanie). Ponadto wymaga to większej manipulacji danymi również po stronie aplikacji.

Wiadomo, że stać nas na więcej MySQL i wydajność aplikacji przy użyciu połączeń JOIN.

Rodzaje połączeń JOIN

MySQL Obsługuje kilka typów JOIN, z których każdy odpowiada na inne pytanie dotyczące tych samych dwóch tabel. Poniższa tabela je porównuje; następnie każdy typ jest zaprezentowany za pomocą zapytania i jego wyniku.

Typ JOIN Zwrócono wiersze Czy w wyniku są wartości NULL? Typowe zastosowanie
KRZYŻ DOŁĄCZ Każdy wiersz tabeli A sparowany z każdym wierszem tabeli B Nie Generowanie wszystkich możliwych kombinacji
INNER JOIN Tylko wiersze spełniające warunek w obu tabelach Nie Członkowie, którzy faktycznie wypożyczyli film
LEFT JOIN Wszystkie wiersze z lewej tabeli, plus dopasowania z prawej Tak, po prawej stronie Wszystkie filmy, nawet te nigdy nie wypożyczane
WŁAŚCIWE DOŁĄCZENIE Wszystkie wiersze z prawej tabeli, plus dopasowania z lewej Tak, po lewej stronie Wszystkie filmy, nawet bez przypisanego członka

KRZYŻ DOŁĄCZ

Cross JOIN to najprostsza forma JOIN, która dopasowuje każdy wiersz z jednej tabeli bazy danych do wszystkich wierszy drugiej.

Innymi słowy, daje nam kombinacje każdego wiersza pierwszej tabeli ze wszystkimi rekordami w drugiej tabeli.

Załóżmy, że chcemy uzyskać zestawienie wszystkich rekordów członków ze wszystkimi rekordami filmów. Możemy użyć skryptu pokazanego poniżej, aby uzyskać pożądane rezultaty.

Rodzaje złączeń

SELECT * FROM `movies` CROSS JOIN `members`

Wykonanie powyższego skryptu w MySQL Workbench daje nam następujące wyniki.

id title id first_name last_name movie_id
1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1
1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2
1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5
1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8
1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10
2 Real Steel(2012) Animations 1 Adam Smith 1
2 Real Steel(2012) Animations 2 Ravi Kumar 2
2 Real Steel(2012) Animations 3 Susan Davidson 5
2 Real Steel(2012) Animations 4 Jenny Adrianna 8
2 Real Steel(2012) Animations 6 Lee Pong 10
3 Alvin and the Chipmunks Animations 1 Adam Smith 1
3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2
3 Alvin and the Chipmunks Animations 3 Susan Davidson 5
3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8
3 Alvin and the Chipmunks Animations 6 Lee Pong 10
4 The Adventures of Tin Tin Animations 1 Adam Smith 1
4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2
4 The Adventures of Tin Tin Animations 3 Susan Davidson 5
4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8
4 The Adventures of Tin Tin Animations 6 Lee Pong 10
5 Safe (2012) Action 1 Adam Smith 1
5 Safe (2012) Action 2 Ravi Kumar 2
5 Safe (2012) Action 3 Susan Davidson 5
5 Safe (2012) Action 4 Jenny Adrianna 8
5 Safe (2012) Action 6 Lee Pong 10
6 Safe House(2012) Action 1 Adam Smith 1
6 Safe House(2012) Action 2 Ravi Kumar 2
6 Safe House(2012) Action 3 Susan Davidson 5
6 Safe House(2012) Action 4 Jenny Adrianna 8
6 Safe House(2012) Action 6 Lee Pong 10
7 GIA 18+ 1 Adam Smith 1
7 GIA 18+ 2 Ravi Kumar 2
7 GIA 18+ 3 Susan Davidson 5
7 GIA 18+ 4 Jenny Adrianna 8
7 GIA 18+ 6 Lee Pong 10
8 Deadline(2009) 18+ 1 Adam Smith 1
8 Deadline(2009) 18+ 2 Ravi Kumar 2
8 Deadline(2009) 18+ 3 Susan Davidson 5
8 Deadline(2009) 18+ 4 Jenny Adrianna 8
8 Deadline(2009) 18+ 6 Lee Pong 10
9 The Dirty Picture 18+ 1 Adam Smith 1
9 The Dirty Picture 18+ 2 Ravi Kumar 2
9 The Dirty Picture 18+ 3 Susan Davidson 5
9 The Dirty Picture 18+ 4 Jenny Adrianna 8
9 The Dirty Picture 18+ 6 Lee Pong 10
10 Marley and me Romance 1 Adam Smith 1
10 Marley and me Romance 2 Ravi Kumar 2
10 Marley and me Romance 3 Susan Davidson 5
10 Marley and me Romance 4 Jenny Adrianna 8
10 Marley and me Romance 6 Lee Pong 10

INNER JOIN

CROSS JOIN zwraca wszystkie możliwe pary, co rzadko jest pożądane. INNER JOIN zawęża wynik do par, które są faktycznie powiązane.

Wewnętrzne JOIN służy do zwracania wierszy z obu tabel spełniających podany warunek.

Załóżmy, że chcesz uzyskać listę członków, którzy wypożyczyli filmy, wraz z tytułami wypożyczonych przez nich filmów. Możesz w tym celu po prostu użyć połączenia INNER JOIN, które zwróci wiersze z obu tabel spełniające zadane warunki.

INNER JOIN

SELECT members.`first_name` , members.`last_name` , movies.`title`
FROM members ,movies
WHERE movies.`id` = members.`movie_id`

Wykonanie powyższego skryptu Give

first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me

Należy pamiętać, że powyższy skrypt wyników można również zapisać w następujący sposób, aby osiągnąć te same wyniki.

SELECT A.`first_name` , A.`last_name` , B.`title`
FROM `members` AS A
INNER JOIN `movies` AS B
ON B.`id` = A.`movie_id`

Zewnętrzne ŁĄCZENIA

Połączenie INNER JOIN automatycznie usuwa wiersze, które nie mają partnera. Gdy te niepasujące wiersze mają znaczenie, połączenie OUTER JOIN jest właściwym wyborem.

MySQL Połączenia zewnętrzne JOIN zwracają wszystkie rekordy pasujące do obu tabel.

Może wykryć rekordy, które nie pasują do połączonej tabeli. To powraca NULL wartości rekordów połączonej tabeli, jeśli nie znaleziono dopasowania.

Brzmi zagmatwanie? Przyjrzyjmy się przykładowi –

LEFT JOIN

Załóżmy teraz, że chcesz uzyskać tytuły wszystkich filmów wraz z nazwiskami członków, którzy je wypożyczyli. Wiadomo, że niektórych filmów nikt nie wypożyczał. Możemy po prostu skorzystać LEFT JOIN w celu.

Zewnętrzne ŁĄCZENIA

LEFT JOIN zwraca wszystkie wiersze z tabeli po lewej stronie, nawet jeśli w tabeli po prawej nie znaleziono żadnych pasujących wierszy. Jeżeli w tabeli po prawej stronie nie znaleziono żadnych dopasowań, zwracana jest wartość NULL.

SELECT A.`title` , B.`first_name` , B.`last_name`
FROM `movies` AS A
LEFT JOIN `members` AS B
ON B.`movie_id` = A.`id`

Wykonanie powyższego skryptu w MySQL Workbench podaje wynik. W zwróconym wyniku, który jest wymieniony poniżej, widać, że dla filmów, które nie są wypożyczone, pola nazw członków mają wartości NULL. Oznacza to, że nie znaleziono tabeli członków pasującej do tego konkretnego filmu.

title first_name last_name
ASSASSIN'S CREED: EMBERS Adam Smith
Real Steel(2012) Ravi Kumar
Safe (2012) Susan Davidson
Deadline(2009) Jenny Adrianna
Marley and me Lee Pong
Alvin and the Chipmunks NULL NULL
The Adventures of Tin Tin NULL NULL
Safe House(2012) NULL NULL
GIA NULL NULL
The Dirty Picture NULL NULL
Note: Null is returned for non-matching rows on right

WŁAŚCIWE DOŁĄCZENIE

PRAWE DOŁĄCZENIE jest oczywiście przeciwieństwem LEWEGO DOŁĄCZENIA. RIGHT JOIN zwraca wszystkie kolumny z tabeli po prawej stronie, nawet jeśli w tabeli po lewej stronie nie znaleziono pasujących wierszy. Jeżeli w tabeli po lewej stronie nie znaleziono żadnych dopasowań, zwracana jest wartość NULL.

W naszym przykładzie załóżmy, że musisz uzyskać nazwiska członków i wypożyczone przez nich filmy. Teraz mamy nowego członka, który nie wypożyczył jeszcze żadnego filmu

WŁAŚCIWE DOŁĄCZENIE

SELECT A.`first_name` , A.`last_name`, B.`title`
FROM `members` AS A
RIGHT JOIN `movies` AS B
ON B.`id` = A.`movie_id`

Wykonanie powyższego skryptu w MySQL workbench daje następujące wyniki.

first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me
NULL NULL Alvin and the Chipmunks
NULL NULL The Adventures of Tin Tin
NULL NULL Safe House(2012)
NULL NULL GIA
NULL NULL The Dirty Picture
Note: Null is returned for non-matching rows on left

Klauzule „ON” i „USING”.

Wszystkie dotychczasowe zapytania dopasowały wiersze do klauzuli ON. MySQL oferuje krótszą alternatywę, gdy dopasowane kolumny mają tę samą nazwę.

W powyższych przykładach zapytań JOIN użyliśmy klauzuli ON w celu dopasowania rekordów pomiędzy tabelami.

Klauzula USING może być również użyta w tym samym celu. Różnica z ZA POMOCĄ jest to musi mieć identyczne nazwy dopasowanych kolumn w obu tabelach.

W tabeli „filmy” dotychczas używaliśmy jej klucza podstawowego o nazwie „id”. Odnosiliśmy się do tego w tabeli „członkowie” pod nazwą „movie_id”.

Zmieńmy nazwę pola „id” tabel „filmy” na „id_filmu”. Robimy to, aby mieć identyczne, dopasowane nazwy pól.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

Następnie użyjmy USING z powyższym przykładem LEFT JOIN.

SELECT A.`title` , B.`first_name` , B.`last_name`
FROM `movies` AS A
LEFT JOIN `members` AS B
USING ( `movie_id` )

Oprócz użycia ON oraz UŻYWANIE z połączeniami możesz użyć wielu innych MySQL klauzule jak GRUPUJ WEDŁUG, GDZIE a nawet działa jak SUMA, AVG, itp.

FAQ

Połączenie JOIN łączy kolumny z dwóch tabel obok siebie, dopasowując wiersze do klucza. Połączenie UNION łączy wyniki dwóch zapytań w pionie i wymaga dopasowania liczby i typów kolumn.

Tak. Połącz dodatkowe klauzule JOIN, każdą z własnym warunkiem ON. MySQL łączy pierwsze dwie tabele, a następnie łączy wynik pośredni z następną tabelą i tak dalej.

SELF JOIN łączy tabelę z samą sobą za pomocą dwóch aliasów. Porównuje wiersze w jednej tabeli, na przykład dopasowując wiersz pracownika do wiersza jego menedżera.

Tak. Asystenci AI wbudowani w edytory, takie jak MySQL Workbench Potrafi tworzyć zapytania JOIN z poziomu komunikatu w języku zrozumiałym. Zawsze sprawdzaj wygenerowane warunki ON, ponieważ niepoprawny klucz generuje błędne wyniki.

Częściowo. Doradcy AI sugerują indeksy i lepszą kolejność łączenia, co często skraca czas wykonania. Optymalizator nadal wybiera ostateczny plan, więc poprawne indeksowanie kluczy łączenia pozostaje najważniejszym czynnikiem.

Podsumuj ten post następująco: