Złączenia PostgreSQL

Podsumowanie: W tym tutorialu poznasz różne rodzaje złączeń PostgreSQL, w tym złączenie wewnętrzne, złączenie lewe, złączenie prawe oraz pełne złączenie zewnętrzne.

Złączenie PostgreSQL służy do łączenia kolumn z jednej (self-join) lub wielu tabel na podstawie wartości wspólnych kolumn pomiędzy powiązanymi tabelami. Kolumny te są zazwyczaj kolumnami klucza głównego pierwszej tabeli oraz kolumnami klucza obcego drugiej tabeli.

PostgreSQL obsługuje złączenie wewnętrzne, złączenie lewe, złączenie prawe, pełne złączenie zewnętrzne, złączenie krzyżowe, złączenie naturalne oraz specjalny rodzaj złączenia zwany self-join.

Ustawianie przykładowych tabel

Załóżmy, że posiadasz dwie tabele o nazwach basket_a oraz basket_b, które przechowują owoce:

Tabele te mają pewne wspólne owoce, takie jak apple i orange.

Poniższa instrukcja zwraca dane z tabeli basket_a:

A poniższe zestawienie zwraca dane z tabeli basket_b:

PostgreSQL inner join

Poniższa instrukcja łączy pierwszą tabelę (basket_a) z drugą tabelą (basket_b) poprzez dopasowanie wartości w kolumnach fruit_a i fruit_b:

Złączenie wewnętrzne bada każdy wiersz w pierwszej tabeli (basket_a). Porównuje wartość w kolumnie fruit_a z wartością w kolumnie fruit_b każdego wiersza w drugiej tabeli (basket_b). Jeśli te wartości są równe, to złączenie wewnętrzne tworzy nowy wiersz, który zawiera kolumny z obu tabel i dodaje ten nowy wiersz do zbioru wyników.

Poniższy diagram Venn ilustruje wewnętrzne złączenie:

PostgreSQL left join

Następująca instrukcja wykorzystuje klauzulę złączenia lewego (ang. instrukcja używa klauzuli złączenia lewego do dołączenia do tabeli basket_a z tabelą basket_b. W kontekście złączenia lewego, pierwsza tabela jest nazywana lewą tabelą, a druga tabela jest nazywana prawą tabelą.

Złączenie lewe rozpoczyna wybieranie danych z lewej tabeli. Porównuje wartości w kolumnie fruit_a z wartościami w kolumnie fruit_b w tabeli basket_b.

Jeśli te wartości są równe, lewy join tworzy nowy wiersz, który zawiera kolumny z obu tabel i dodaje ten nowy wiersz do zbioru wyników. (zobacz wiersz #1 i #2 w zbiorze wyników).

W przypadku, gdy wartości nie są równe, lewe złączenie również tworzy nowy wiersz, który zawiera kolumny z obu tabel i dodaje go do zbioru wyników. Jednakże, wypełnia on kolumny prawej tabeli (basket_b) wartością null. (zobacz wiersz #3 i #4 w zestawie wyników).

Następujący diagram Venn ilustruje lewe złączenie:

Aby wybrać wiersze z lewej tabeli, które nie mają pasujących wierszy w prawej tabeli, używamy lewego złączenia z klauzulą WHERE. Na przykład:

Wynikiem jest:

Zauważ, że klauzula LEFT JOIN jest taka sama jak klauzula LEFT OUTER JOIN, więc możesz ich używać zamiennie.

Poniższy diagram Venn ilustruje złączenie lewe, które zwraca wiersze z lewej tabeli, które nie posiadają pasujących wierszy z prawej tabeli:

Złączenie prawe PostgreSQL

Złączenie prawe jest odwróconą wersją złączenia lewego. Złączenie prawe rozpoczyna wybieranie danych z prawej tabeli. Porównuje każdą wartość w kolumnie fruit_b każdego wiersza w prawej tabeli z każdą wartością w kolumnie fruit_a każdego wiersza w tabeli fruit_a.

Jeśli wartości te są równe, prawe złączenie tworzy nowy wiersz zawierający kolumny z obu tabel.

W przypadku, gdy wartości te nie są równe, prawe złączenie również tworzy nowy wiersz zawierający kolumny z obu tabel. Wypełnia on jednak kolumny w lewej tabeli wartością NULL.

Poniższe wyrażenie wykorzystuje złączenie prawe do połączenia tabeli basket_a z tabelą basket_b:

Oto dane wyjściowe:

Następujący diagram Venna ilustruje właściwe złączenie:

Podobnie można uzyskać wiersze z prawej tabeli, które nie mają pasujących wierszy z lewej tabeli, dodając klauzulę WHERE w następujący sposób:

Klauzule RIGHT JOIN i RIGHT OUTER JOIN są takie same dlatego można ich używać zamiennie.

Następujący diagram Venn ilustruje prawe złączenie, które zwraca wiersze z prawej tabeli, które nie mają pasujących wierszy w lewej tabeli:

PostgreSQL pełne złączenie zewnętrzne

Pełne złączenie zewnętrzne lub pełne złączenie zwraca zestaw wyników, który zawiera wszystkie wiersze z lewej i prawej tabeli, z pasującymi wierszami z obu stron, jeśli są dostępne. W przypadku braku dopasowania, kolumny tabeli zostaną wypełnione wartością NULL.

Wyjście:

Poniższy diagram Venn ilustruje pełne złączenie zewnętrzne:

Aby zwrócić wiersze w tabeli, które nie mają pasujących wierszy w drugiej tabeli, używamy pełnego złączenia z klauzulą WHERE w taki sposób:

Oto wynik:

Następujący diagram Venn ilustruje pełne złączenie zewnętrzne, które zwraca wiersze z tabeli, które nie mają odpowiadających im wierszy w drugiej tabeli:

Następujący rysunek przedstawia wszystkie złączenia PostgreSQL, które do tej pory omówiliśmy wraz ze szczegółową składnią:

W tym tutorialu dowiedziałeś się, jak używać różnych rodzajów złączeń PostgreSQL do łączenia danych z wielu powiązanych tabel.

  • Czy ten tutorial był pomocny ?
  • TakNie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *