TOP

Lekcja SQL 10. Łączenie tabel (INNER JOIN)

Najpotężniejszą cechą języka SQL jest możliwość łączenia różnych tabel w pamięci RAM systemu DBMS podczas wykonywania zapytania. Sprzężenia są bardzo często wykorzystywane do analizy danych. Z reguły dane znajdują się w różnych tabelach, co pozwala na efektywniejsze ich przechowywanie (ponieważ informacje nie dublują się), upraszcza przetwarzanie danych i pozwala na skalowanie bazy danych (możliwość dodawania nowych tabel z dodatkowymi informacjami) .

Tabele bazy danych używane w DBMS MS Access są tabelami relacyjnymi, co oznacza, że wszystkie tabele można połączyć ze sobą za pomocą wspólnych pól.


1. Tworzenie kombinacji tabel (JOINS)

Łączenie tabel jest bardzo prostą procedurą. Konieczne jest określenie wszystkich tabel, które zostaną uwzględnione w kombinacji i „wyjaśnienie” SZBD, w jaki sposób będą one ze sobą powiązane. Połączenie jest nawiązywane za pomocą słowa WHERE, na przykład:

Run SQLSELECT DISTINCT Seller_name, Product 
FROM Sellers, Sumproduct 
WHERE Sellers.City = Sumproduct.City

Łącząc te dwie tabele, mogliśmy zobaczyć, jakie produkty sprzedaje każdy sprzedawca. Przyjrzyjmy się bliżej kodowi żądania, gdyż różni się on nieco od zwykłego żądania. Instrukcja SELECT rozpoczyna się od określenia kolumn, które chcemy wyświetlić, ale pola te znajdują się w różnych tabelach, klauzula FROM zawiera dwie tabele, które chcemy połączyć w instrukcji SELECT, tabele są łączone za pomocą słowa WHERE, które określa kolumny dołączyć. Należy podać pełną nazwę pola (Table.Field), gdyż w obu tabelach znajduje się pole City.

2. Kombinacja wewnętrzna (INNER JOIN)

W poprzednim przykładzie użyliśmy słowa WHERE do połączenia tabel, co spowodowało sprawdzenie równoważności dwóch tabel. Kombinacja tego typu nazywana jest także „kombinacją wewnętrzną”. Istnieje również inny sposób łączenia tabel, który wyraźnie wskazuje rodzaj kombinacji. Rozważ następujący przykład:

Run SQLSELECT DISTINCT Seller_name, Product 
FROM Sellers 
INNER JOIN Sumproduct 
ON Sellers.City = Sumproduct.City

W tym zapytaniu zamiast WHERE zastosowaliśmy konstrukcję INNER JOIN ... ON ..., która dała podobny wynik. Chociaż kombinacja z klauzulą WHERE jest krótsza, nadal lepiej jest użyć INNER JOIN, ponieważ jest bardziej elastyczna, co zostanie wyjaśnione bardziej szczegółowo w kolejnych sekcjach.