Złączenia JOIN w SQL Server

1. SQL JOIN – Czym są złączenia JOIN w SQL Server? 

Złączenia SQL JOIN to złączenia poziome. W poprzednim rozdziale poznaliśmy proste złączenie z relacją wprowadzaną w klauzuli WHERE. Przykład był jedynie uproszczeniem. Takie samo złączenie możemy wykonać korzystając ze złączeń JOIN. Profesjonalnie napisany kod SQL zawiera te właśnie złączenia. Złączenia JOIN możemy podzielić na dwie podstawowe grupy: wewnętrzne i zewnętrzne. Ogólna postać wszystkich złączeń JOIN jest następująca:

SELECT (KOLUMNY)
  FROM TABELA_1
  (RODZAJ ZŁĄCZENIA) JOIN TABELA_2
  on TABELA_1.ID = TABELA_2.ID
  go

Jak widzimy po frazie ON określamy relacje, za pomocą których łączymy ze sobą tabele lub widoki. JOIN w SQL Server daje nam możliwość łączenia tabel, widoków przechowywanych w różnych schematach, różnych bazach a także na różnych serwerach np za pomocą linków bazodanowych.

2. JOIN w SQL Server – Złączenie wewnętrzne INNER JOIN

Złączenie wewnętrzne to tzw. INNER JOIN. Jest to inna postać złączenia, którą opisaliśmy w poprzednim rozdziale kursu SQL. INNER JOIN zwraca wynik zapytania w postaci rekrodów, dla których w obu tabelach dopasowane są relację. Pokazuje część wspólną. Złączenie wewnętrzne (INNER) JOIN możesz zapisywać w kodzie SQL po prostu frazą JOIN. Wynik obu zapytań będzie taki sam.

Kurs SQL Server - SQL INNER JOIN
Kurs SQL Server – SQL INNER JOIN

Zapiszmy przykład z poprzedniego rozdziału za pomocą złączenia INNER JOIN. Samą relację w złączeniach JOIN określamy po wybraniu tabeli, którą dołączamy jako drugą. Relacja zapisywana jest po frazie ON. np. ON TABELA_1.ID = TABELA_2.ID

USE AdventureWorks2014
GO

SELECT *
  FROM AdventureWorks2014.Production.ProductCategory A
  INNER JOIN AdventureWorks2014.Production.ProductSubcategory B
  on A.ProductCategoryID = B.ProductCategoryID
  go

 

3. JOIN w SQL Server – Złączenie zewnętrzne LEFT OUTER JOIN

LEFT JOIN lub też zamiennie LEFT OUTER JOIN to złączenie zewnętrzne. Wynikiem zapytania będą wszystkie rekordy z tabeli 1 i tylko te rekordy z tabeli 2, które możemy dopasować. W przypadku, gdy rekord z tabeli 2 nie zostanie dopasowany, wyświetlona zostanie wartość NULL.

 

Kurs SQL Server - SQL LEFT OUTER JOIN
Kurs SQL Server – SQL LEFT OUTER JOIN

Zróbmy krótki przykład z użyciem LEFT JOIN. Połączmy ze sobą tabele SalesPerson i SalesTerritory. Obie tabele możemy połączyć ze sobą za pomocą kolumny TerritoryID. Najważniejsze jest to, że nie wszystkie rekordy z tabeli SalesTerritory można dopasować do tabeli SalesPerson.

USE AdventureWorks2014;
GO

SELECT a.BusinessEntityID,
b.CountryRegionCode
FROM
Sales.SalesPerson a
LEFT JOIN Sales.SalesTerritory b 
ON a.TerritoryID = b.TerritoryID 
;
Kurs SQL Server - SQL LEFT JOIN
Kurs SQL Server – SQL LEFT JOIN

4. JOIN w SQL Server – Złączenie zewnętrzne RIGHT OUTER JOIN

RIGHT OUTER JOIN lub zamiennie RIGHT JOIN jest dokładną odwrotnością złączenia LEFT. W przypadku łączenia kolejno tabeli 1 i tabeli 2, zostają zwrócone wszystkie rekordy z tabeli 2 i tylko te rekordy z tabeli 1, które możemy dopasować. Podobnie jak w przypadku poprzedniego przykładu, rekordy niedopasowane otrzymają wartość NULL.

Kurs SQL Server - SQL RIGHT OUTER JOIN
Kurs SQL Server – SQL RIGHT OUTER JOIN

Zróbmy krótki przykład i stwórzmy złączenie RIGHT JOIN podobnie jak w poprzednim punkcie:

USE AdventureWorks2014;
GO

SELECT 
A.ProductReviewID,
B.Name
FROM Production.ProductReview A
RIGHT OUTER JOIN 
Production.Product B
ON B.ProductID = A.ProductID;
Kurs SQL Server - SQL RIGHT JOIN
Kurs SQL Server – SQL RIGHT JOIN

5. JOIN w SQL Server – Warunek w klauzuli FROM

Wiemy już, że warunki w kodzie SQL możemy wprowadzać w klauzuli WHERE. Warunki dla danych z tabeli możemy wprowadzać także w klauzuli FROM zaraz za relacją pomiędzy tabelami. Jedyne, co musimy zrobić, to dopisać frazę AND po relacji między tabelami. Same warunki wprowadzamy analogicznie jak w klauzuli WHERE. Poniżej przykład. Dane z tabeli Production.ProductCategory ograniczamy w kolumnie Name do wartości „Bikes”. Warunki w klauzuli FROM i WHERE możemy stosować jednocześnie.

USE AdventureWorks2014;
GO

SELECT a.Name, b.Name FROM 
Production.ProductSubcategory A
LEFT JOIN Production.ProductCategory B
ON A.ProductCategoryID = B.ProductCategoryID
AND B.Name = 'Bikes'
Kurs SQL Server - SQL JOIN - Warunek w JOIN
Kurs SQL Server – SQL JOIN – Warunek w JOIN

6. JOIN w SQL Server – Złączenie zewnętrzne FULL OUTER JOIN

FULL OUTER JOIN lub w skrócie FULL JOIN to złączenie które nie tylko pokazuje wszystkie dopasowane dane z obydwu tabel, ale także dane niedopasowane. W miejscu niedopasowania zapytanie zwróci nam wartość NULL.

Kurs SQL Server - SQL FULL OUTER JOIN
Kurs SQL Server – SQL FULL OUTER JOIN
USE AdventureWorks2014;
GO

SELECT a.Name, b.Name FROM 
Production.ProductSubcategory A
FULL JOIN Production.ProductCategory B
ON A.ProductCategoryID = B.ProductCategoryID
AND B.Name = 'Bikes'
and A.Name = 'Mountain Bikes'

Jak widzisz, w poprzednim punkcie poznaliśmy warunek zapisywany w klauzuli JOIN. Właśnie w takich przypadkach możemy ten warunek wykorzystać.

Kurs SQL Server - SQL FULL JOIN
Kurs SQL Server – SQL FULL JOIN

7. JOIN w SQL Server – Złączenie krzyżowe CROSS JOIN – złączenie kartezjańskie

Złączenie kartezjańskie CROSS JOIN poznaliśmy już w poprzednim rozdziale szkolenia SQL. Wtedy wykonaliśmy złączenie w klauzuli WHERE bez użycia JOIN’a. Ten sam skrypt możemy zapisać z użyciem złączenia CROSS JOIN. Wynikiem zapytania będą wszystkie rekordy z tabeli 1 połączone ze wszystkimi rekordami z tabeli 2. W przypadku tego złączenia nie określamy relacji. Wszystkie rekordy i tak zostaną w tym wypadku połączone.

USE AdventureWorks2014;
GO

SELECT *
  FROM AdventureWorks2014.Production.ProductCategory A
  CROSS JOIN AdventureWorks2014.Production.ProductSubcategory B
  go

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

3 komentarze “Złączenia JOIN w SQL Server”