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

Wprowadzenie do złączeń SQL

Tradycyjnie pobierasz dane z dwóch lub więcej tabel za pomocą WHERE klauzula w zapytaniu. Ale w relacyjnym systemie baz danych (RDBMS) można to osiągnąć za pomocą jednego SELECT zapytanie. To jest prawdziwa moc systemów relacyjnych baz danych. W tym przewodniku poznasz połączenia SQL, potężny sposób porównywania i wybierania wierszy i tabel.

Co to jest złącze SQL?

W SQL join klauzula rozszerza możliwości porównywania i wybierania wierszy z tabel. Wykorzystuje algebraiczny proces łączenia wierszy z dwóch lub więcej tabel na podstawie powiązanej kolumny w tych tabelach. Zgodnie ze standardową definicją SQL ANSI, istnieje pięć typów złączeń — złącza krzyżowe , Łączenia wewnętrzne , Połączenia lewe (zewnętrzne) , Połączenia prawe (zewnętrzne) i Pełne (zewnętrzne) złączenia . Te połączenia są implementowane we wszystkich systemach relacyjnych baz danych i są omówione w poniższych sekcjach.

Uwaga Sprzężenia mogą być wykonywane na dowolnej liczbie tabel w danym zapytaniu. Dla zwięzłości i jasności ten przewodnik omawia sprzężenia zastosowane do dwóch tabel.

Ten przewodnik wykorzystuje dwie tabele, Employees i Address , aby zademonstrować łączenia SQL. Każda z tych tabel zawiera następujące definicje kolumn i dane:

  • Tabela pracowników

    Identyfikator pracownika Nazwa pracownika
    1 Jan
    2 Maryi
    3 Robert
  • Tabela adresowa

    Identyfikator Stan
    1 Nowy Jork
    2 New Jersey
    3 Idaho
    4 Hawaje
Uwaga O ile nie wspomniano inaczej, wszystkie polecenia w tym przewodniku działają dobrze zarówno na MySQL i PostgreSQL bazy danych.

Połączenia krzyżowe SQL

Znany również jako złącze kartezjańskie , Połączenia krzyżowe występują, gdy określisz wiele tabel jako źródło dla SELECT lista kolumn. W takim przypadku pomijasz WHERE wyrażenie sprzężenia klauzuli, aby dopasować wiersze. Zestaw wyników zawiera wiersz dla każdej kombinacji wierszy między tabelami. W scenariuszu z dwiema tabelami każdy wiersz w jednej tabeli jest sparowany z każdym wierszem w drugiej tabeli. Otrzymany produkt jest znany jako produkt kartezjański z dwóch tabel. Składnia łączenia krzyżowego jest następująca:

(# Rows in Table A) TIMES (# of Rows in Table B)
Uwaga

W teorii zbiorów iloczyn kartezjański jest operacją mnożenia, która generuje wszystkie uporządkowane pary danych zbiorów. Rozważmy na przykład ustawienie A z elementami {a,b} i ustaw B z elementami {1,2,3} . Produkt kartezjański A i B jest oznaczony przez AxB a wynik jest następujący:

AxB ={(a,1), (a,2), (a,3), (b,1), (b,2), (b,3)}

Składnia SQL dla łączenia krzyżowego jest następująca:

SELECT ColumnName_1,
       ColumnName_2,
       ColumnName_N
FROM [Table_1]
     CROSS JOIN [Table_2]

Z powyższej składni, Column_1 , Column_2 , Column_N reprezentują kolumny w tabeli, a CROSS JOIN klauzula służy do łączenia dwóch tabel, Table_1 i Table_2 . Z powyższych przykładowych tabel, jeśli chcesz wykonać połączenie krzyżowe na Employees i Address tabele, użyj następującego kodu SQL:

SELECT EmployeeName, State
FROM Employees
CROSS JOIN Address

Wynik powyższego kodu SQL jest podobny do następującego:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| John         |   New Jersey |
| John         |   Idaho      |
| John         |   Hawaii     |
| John         |   New York   |
| Mary         |   New York   |
| Mary         |   New Jersey |
| Mary         |   Idaho      |
| Mary         |   Hawaii     |
| Robert       |   New York   |
| Robert       |   New Jersey |
| Robert       |   Idaho      |
| Robert       |   Hawaii     |
+------------+----------------+

Połączenie wewnętrzne SQL

Sprzężenie wewnętrzne zwraca wiersze, które mają pasujące wartości w obu tabelach. Jeśli nie ma pasujących rekordów, w wynikach nie są zwracane żadne wiersze.

Składnia SQL dla Inner Join jest następująca:

SELECT ColumnName_1,
       ColumnName_2,
       ColumnName_N
FROM Table_1
INNER JOIN Table_2
ON Table_1.key = Table_2.key;

W powyższym przykładzie key jest odpowiednim kluczem w tabelach. Jeśli potrzebujesz wykonać wewnętrzne sprzężenie na Employees i Address tabele, użyj następującego kodu SQL:

SELECT EmployeeName, State
FROM Employees
INNER JOIN Address
ON Employees.EmployeeId = Address.Id

Wynik powyższego kodu SQL jest podobny do następującego:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
+------------+----------------+

Połączenie lewe (zewnętrzne) SQL

Left Join zwraca pełny zestaw wierszy z lewej tabeli wraz z pasującymi wierszami z prawej tabeli. Jeśli nie ma pasujących rekordów, to NULL wartości są zwracane z odpowiedniej tabeli.

Uwaga Niektóre implementacje relacyjnych baz danych używają słów kluczowych „Left Outer Join”, w przeciwieństwie do „Left Join”, ale są one funkcjonalnie równoważne.

Składnia SQL dla Left Join jest następująca:

SELECT * FROM Table_1
LEFT JOIN Table_2
ON Table_1.key = Table_2.key

W powyższym przykładzie key jest odpowiednim kluczem w tabelach. Jeśli potrzebujesz wykonać lewe dołączenie na Employees i Address tabele, użyj następującego kodu SQL:

SELECT EmployeeName, State
FROM Employees
LEFT JOIN Address
ON Employees.EmployeeId = Address.Id

Wynik powyższego kodu SQL jest następujący:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| Robert       |   NULL       |
+------------+----------------+

Połączenie prawe SQL (zewnętrzne)

Right Join zwraca pełny zestaw wierszy z prawej tabeli i pasujące wiersze z lewej tabeli. Jest to również znane jako prawe połączenie zewnętrzne. Jeśli nie ma pasujących rekordów, to NULL wartości są zwracane z prawej tabeli, dla odpowiednich wierszy w lewej tabeli.

Uwaga Niektóre implementacje relacyjnych baz danych używają słów kluczowych „Right Outer Join”, w przeciwieństwie do „Right Join”, ale są one funkcjonalnie równoważne.

Składnia SQL dla prawego łączenia jest następująca:

SELECT * FROM Table_1
RIGHT JOIN Table_2
ON Table_1.key = Table_2.key

Z powyższego kodu, key jest odpowiednim kluczem w tabelach. Jeśli potrzebujesz wykonać prawidłowe dołączenie na Employees i Address tabele, użyj następującego kodu SQL:

SELECT EmployeeName, State
FROM Employees
RIGHT JOIN Address
ON Employees.EmployeeId = Address.Id

Wynik powyższego kodu SQL jest następujący:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| NULL         |   Idaho      |
| NULL         |   Hawaii     |
+------------+----------------+

Pełne (zewnętrzne) łączenie SQL

Full Join zwraca wszystkie wiersze z lewej tabeli, wszystkie wiersze z prawej tabeli. Jest to również znane jako pełne połączenie zewnętrzne. Pełne złączenie zwraca również wszystkie pasujące rekordy z obu tabel, jeśli są dostępne. Jeśli nie ma pasujących rekordów, to NULL wartości są zwracane z lewej tabeli. Zwraca również NULL wartości z prawej tabeli.

Uwaga Niektóre implementacje relacyjnych baz danych używają słów kluczowych „Full Outer Join”, w przeciwieństwie do „Full Join”, ale są one funkcjonalnie równoważne.

Składnia SQL dla pełnego dołączenia jest następująca:

SELECT * FROM Table1
FULL JOIN Table2
ON Table1.key = Table2.key

W powyższym kodzie key jest odpowiednim kluczem w tabelach. Jeśli potrzebujesz wykonać pełne dołączenie na Employees i Address tabele, użyj następującego kodu SQL:

SELECT EmployeeName, State
FROM Employees
FULL JOIN Address
ON Employees.EmployeeId = Address.Id

Wynik powyższego kodu SQL jest następujący:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| Robert       |   NULL       |
| NULL         |   Idaho      |
| NULL         |   Hawaii     |
+------------+----------------+
Uwaga Podczas obliczeń Join, jeśli porównasz dane tabeli z NULL wartości, nie pasują do siebie. Stąd NULL wartości są zwracane tylko jako część wyników łączenia i są ignorowane podczas obliczeń łączenia.

Porównanie wydajności złączeń SQL

Biorąc pod uwagę powyższe tabele przykładowe, Inner Join jest zazwyczaj najszybszą z pięciu klauzul Join pod względem wydajności bazy danych. Lewe sprzężenie i prawe sprzężenie są najszybsze w zależności od rozmiaru dwóch tabel. Pełne łączenie jest zwykle wolniejsze niż lewe łączenie lub prawe łączenie. Połączenie krzyżowe, zależne od kartezjańskiego produktu obu tabel, jest zazwyczaj najwolniejsze pod względem wydajności bazy danych. Określona hierarchia wydajności może się różnić w zależności od długości kolumny tabeli, typu danych kolumny i definicji kluczy.

Wniosek

Użycie złączeń SQL rozszerza funkcjonalność możliwości porównywania wierszy tabeli w porównaniu z tradycyjnym WHERE zapytania klauzulowe. Sprzężenia są cennym mechanizmem do zastosowania logiki algebraicznej do dwóch lub więcej tabel.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyte instrukcje SELECT mają różną liczbę kolumn (REDUX!!)

  2. mysqli_fetch_array() oczekuje, że parametr 1 to mysqli_result, wartość logiczna podana w

  3. Jak usunąć z wielu tabel w MySQL?

  4. Dlaczego mysqli wyświetla błąd braku synchronizacji poleceń?

  5. Jak porównywać wartości zerowe w MySQL