Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak połączyć dwa stoły w MySQL

W poprzedniej części tej serii MySQL pokazałem, jak można pobierać dane za pomocą klauzul MySQL. W tej części dowiemy się o funkcjach Joins w MySQL, dlaczego są one używane i jak z nich korzystać. Zaczynajmy.

Jak połączyć dwie tabele w MySQL

Połączenia MySQL umożliwiają dostęp do danych z wielu tabel. Złączenie MySQL jest wykonywane, gdy w instrukcji SQL są łączone co najmniej dwie tabele. Złączania MySQL obejmują:Złączenie wewnętrzne MySQL (znane również jako Złączenie proste), Złączenie lewe zewnętrzne (zwane również Złączeniem Lewym, zwraca pasujące rekordy z lewej tabeli), Złączenie prawe (zwraca pasujące rekordy z prawej tabeli) i Full Join (zwraca pasujące rekordy ze wszystkich tabel). Korzystając z połączeń MySQL JOIN, będziesz mógł dołączyć do więcej niż dwóch stołów.

W MySQL złącze wewnętrzne jest złączeniem domyślnym. W przypadku danych słów kluczowych w tym momencie wybiera wszystkie wiersze z obu tabel, o ile istnieje współrzędna między kolumnami w obu tabelach.

W przeciwieństwie do SQL, MySQL nie traktuje Outer Join jako oddzielnego typu Join. Aby uzyskać takie same wyniki, jak w przypadku połączenia zewnętrznego, musisz dołączyć do połączenia lewego i prawego zewnętrznego.

Ile tabel można połączyć w MySQL

Zgodnie z oficjalną dokumentacją MySQL 8.0, maksymalna liczba tabel w instrukcji JOIN to 61. Należy jednak pamiętać, że instrukcje JOIN mogą wymagać dużej ilości zasobów serwera, gdy liczba tabel rośnie. Jeśli tak jest w przypadku Twojego zapytania, zdecydowanie zalecam podzielenie go na wiele zapytań, aby zmniejszyć obciążenie serwera.

Zacznijmy od dodania nowej tabeli do naszej bazy, która będzie zawierała wiadomość wraz z identyfikatorem użytkownika, który wysłał tę wiadomość, nazwijmy ją wiadomościami. Schemat naszej tabeli to:

UTWÓRZ „wiadomości” TABELI (

 `id` int(11) NIE NULL,

 `message` varchar(255) NOT NULL

)

Będziemy używać tej samej funkcji selectdata które stworzyliśmy w naszym crud.php plik. Teraz zacznijmy od dołączenia do tych dwóch stołów. Możesz także wypełnić swój stół, aby móc go ćwiczyć.


Przestań marnować czas na serwery

Cloudways zajmuje się zarządzaniem serwerem za Ciebie, dzięki czemu możesz skupić się na tworzeniu świetnych aplikacji i dbaniu o zadowolenie klientów.

Rozpocznij bezpłatnie

Łączenie wewnętrzne

Inner Join łączy tabelę w taki sposób, że pokazuje tylko te wyniki, które pasują do podanego warunku i ukrywa inne. Struktura zapytań typu Inner Join to:

WYBIERZ nazwy kolumn

Z tabeli1

Tabela INNER JOIN2

ON table1.column_name=table2.column_name;

Połączenie wewnętrzne i połączenie proste są takie same. Możesz również napisać swoje zapytanie w ten sposób:

WYBIERZ nazwy kolumn

Z tabeli1

DOŁĄCZ do tabeli2

ON table1.column_name=table2.column_name;

Teraz pobierzmy nazwę i wiadomość z naszej bazy danych za pomocą złączenia wewnętrznego. Zapytanie będzie takie

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
INNER JOIN messages 
ON myguests.id = messages.id";

KONKAT Funkcja służy do łączenia dwóch kolumn ciągów w MySQL. Teraz otwórz swój index.php, który utworzyliśmy wcześniej, skopiuj do niego następujący kod.

<table>

	<tr>

		<td> &nbsp;&nbsp;Name</td>

		<td> &nbsp;&nbsp;Email</td>

		<td> &nbsp;&nbsp;Message</td>

		<!-- <td> &nbsp;&nbsp;Message</td>

		<td> &nbsp;&nbsp;Date</td>!-->

	</tr>

<?php

include 'crud.php';

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
		From myguests 
		INNER JOIN messages 
		ON myguests.id = messages.id";

$result = selectdata($sql);

	if($result != "zero")

	{

		while($row = $result->fetch_assoc())

		{

			echo "<tr>";

			echo "<td>" . $row['name'] . "</td>";

			echo "<td>" . $row['email'] . "</td>";

			if($row['message'] === null){echo "<td>" . &nbsp;'null'. "</td>";} else { echo "<td>" . &nbsp;$row['message']. "</td>"; } ;

			echo "</tr>";

		}

	}

	else

		{

			echo $result;

	}

?>

</table>

?>

Po uruchomieniu tej strony na serwerze hostingowym PHP, wynik będzie wyglądał następująco:

Jak widać, zwrócił tylko te wyniki, które pasują do identyfikatora użytkownika i gdzie wiadomości nie jest pusta.

PRAWY DOŁĄCZ

RIGHT JOIN łączy dwie tabele w taki sposób, że zwraca całą wartość z prawej i dopasowaną wartość z lewej tabeli, a także zwraca wartość null z lewej tabeli, gdy nie znaleziono dopasowania. Struktura RIGHT JOIN to:

WYBIERZ nazwy kolumn

Z tabeli1

TABELA RIGHT JOIN2

ON table1.column_name=table2.column_name;

Teraz pobierzmy nazwę i wiadomość z naszej bazy danych, tworząc wiadomości w naszej prawej tabeli i moi goście w naszym lewym stole.

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
RIGHT JOIN messages 
ON messages.id = myguests.id";

Teraz otwórz index.php i zastąp $sql zapytanie z ww. Gdy go uruchomisz, Twój wynik będzie następujący:

Jeśli spojrzysz na wiadomości tabeli, zobaczysz kilka identyfikatorów, które nie będą pasować do żadnego identyfikatora użytkownika, dlatego to zapytanie zwraca wartość null w kolumnie nazwa i e-mail, gdzie nie znajdzie żadnego dopasowania w lewej kolumnie.

LEWO DOŁĄCZ

LEFT Joins łączy dwie tabele w taki sposób, że zwraca całą wartość z lewej i dopasowaną wartość z prawej tabeli, a także zwraca wartość null z prawej tabeli, gdy nie znaleziono dopasowania. Struktura LEFT JOIN to:

WYBIERZ nazwy kolumn

Z tabeli1

LEFT JOIN tabela2

ON table1.column_name=table2.column_name;

Teraz pobierzmy nazwę i wiadomość z naszej bazy danych, tworząc wiadomości w nasz odpowiedni stolik i moi goście w nasz lewy stół.

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
LEFT JOIN messages 
ON messages.id = myguests.id";

Teraz otwórz index.php i zapytaj w miejsce $sql z powyższym. Gdy go uruchomisz, Twój wynik będzie następujący:

Jeśli spojrzysz na wiadomości tabeli, znajdziesz identyfikatory, które nie będą pasować do żadnego identyfikatora użytkownika, dlatego to zapytanie zwraca wartość null w kolumnie Wiadomość, gdzie nie znajdzie żadnego dopasowania w prawej kolumnie.

ZWIĄZEK

UNION w MySQL służy do łączenia wielu kolumn z różnych tabel w jedną kolumnę. Struktura zapytania UNION do wybierania unikalnych wartości to:

SELECT nazwa(y) kolumn FROM tabela1

ZWIĄZEK

SELECT nazwa(y) kolumn FROM tabela2;

A do wybierania powtarzających się wartości z kolumn jest:

SELECT nazwa(y) kolumn FROM tabela1

ZŁĄCZ WSZYSTKIE

SELECT nazwa(y) kolumn FROM tabela2;

Teraz pobierzmy identyfikatory z naszych tabel.

$sql = "SELECT id FROM myguests 
UNION 
SELECT id FROM messages";

Teraz otwórz index.php i zastąp $sql zapytanie z ww. Po uruchomieniu Twój wynik będzie następujący:

Zapytanie dostarczyło nam wszystkich unikalnych identyfikatorów, które znajdują się w obu tabelach.

Dołączanie krzyżowe lub produkt kartezjański

Ten typ JOIN zwraca iloczyn kartezjański wierszy z tabel w Join. Zwróci tabelę składającą się z rekordów, które łączą każdy wiersz z pierwszej tabeli z każdym wierszem drugiej tabeli.

Składnia Cross JOIN to,

SELECT column-name-list

from table-name1

CROSS JOIN

table-name2;

Dołącz do siebie

Self JOIN to zwykłe łączenie, ale tabela jest łączona ze sobą.

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

PEŁNE ZŁĄCZENIE ZEWNĘTRZNE

Słowo kluczowe FULL OUTER JOIN zwraca wszystkie rekordy, gdy istnieje dopasowanie w lewych (tabela1) lub prawych (tabela2) rekordach tabeli.

Uwaga:FULL OUTER JOIN może potencjalnie zwrócić bardzo duże zestawy wyników!

SELECT column_name(s)

FROM table1

FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

Dołącz do wielu tabel

Z poprzednich blogów dowiedziałeś się, jak łączyć ze sobą dwie tabele za pomocą różnych zapytań sprzężenia SQL. Ale jeśli pracujesz nad dużą aplikacją, tj. budujesz sklep e-commerce i tworzysz w nim wiele tabel, takich jak klienci, zamówienia i produkty, z pewnością może pojawić się złożoność łączenia tabel. Aby to rozwiązać, musisz zdobyć wszystkie produkty zamówione przez konkretnych klientów. Schemat jest taki sam, więc nie deklaruję go tutaj. Zobaczmy zapytanie:

SELECT * FROM table1

LEFT JOIN table2

ON table2.id = table1.id

LEFT JOIN table3

ON table3.id = table1.id

Najpierw łączymy tabelę 1 i tabelę 2, które dostarczają tabelę tymczasową z połączonymi danymi z tabeli 1 i 2, która jest w tym momencie połączona z tabelą 3. To równanie może być rozszerzone na więcej niż 3 tabele do N tabel. Musisz tylko upewnić się, że zapytanie SQL powinno zawierać instrukcję łączenia N-1, aby połączyć N tabel.

Powyższe zapytanie pozwoli dopasować wiersze z tabeli 1 (w każdym razie) do wierszy dwóch pozostałych tabel. Użycie LEFT JOIN pozwala połączyć tabelę 2 i 3 z tabelą 1 (nie tylko tabelę 2 z tabelą 1 i tabelę 3 z tabelą2).
Możesz również dodać warunki, takie jak WHERE, AND i ORDERBY

SELECT * FROM table1

LEFT JOIN table2

   ON table2.id = table1.id

LEFT JOIN table3

   ON table3.id = table2.id

WHERE month = 'numberHere'

   AND (table2.email IS NOT NULL OR table3.email IS NOT NULL)

ORDER BY submitdate DESC

Wniosek:

W tym samouczku dowiedzieliśmy się wiele o złączeniach, które są używane w relacyjnych bazach danych. Połączenia są używane nie tylko dla dwóch stołów, ale możesz połączyć więcej niż dwa stoły przy użyciu tej samej techniki. W ósmej i ostatniej części tej serii MySQL omówię, jak używać wyrażeń regularnych (REGEX) do pobierania i sortowania danych w MySQL. W tym celu zasubskrybuj nasz biuletyn na blogu, a także zapisz się do naszego zarządzanego stosu PHP i rozpocznij testowanie tych samouczków na naszych serwerach zoptymalizowanych pod kątem PHP.

Często Zadawane Pytania

P. Jak połączyć ze sobą dwa stoły?

Odp: Łączenie dwóch tabel w SQL można wykonać na cztery główne sposoby:Łączenie wewnętrzne (zwraca wiersze z pasującymi kolumnami), Łączenie lewe (WSZYSTKIE rekordy w lewej tabeli i pasujące rekordy w prawej tabeli), Łączenie prawe (WSZYSTKIE rekordy w prawej tabeli i pasujące rekordy w lewej tabeli) oraz Union (usuwa duplikaty).

P. Jakiego polecenia SQL możesz użyć, aby połączyć dwa stoły?

Odp: Dwie tabele można połączyć za pomocą instrukcji INNER JOIN, która zwraca pasujące rekordy z obu tabel.

P. Jak połączyć dwie tabele w SQL bez złączeń?

Odp: Możesz użyć poniższej instrukcji, aby połączyć tabele bez faktycznego używania instrukcji JOIN

SELECT *

FROM TableA a, TableB b


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać wiodące zera do liczby w MySQL?

  2. Virtualmin:nie masz dostępu do tej bazy danych MySQL po zmianie hasła

  3. MySQL REPLACE() – zamień wszystkie wystąpienia podciągu na inny ciąg

  4. Nie można przekonwertować obiektu klasy DateTime na ciąg

  5. Jak wykonać kopię zapasową i przywrócić bazę danych MySQL?