Różnica między JOIN i LEFT JOIN
Operacja złączenia JOIN
Operacja złączenia wewnętrzego JOINPełna nazwa to INNER JOIN, ale jest to operacja tak popularna, że rozsądne było skrócenie tego do jednego tylko słowa kluczowego JOIN. Reasumując: INNER JOIN to to samo co JOIN. w algebrze relacyjnej odpowiada tzw. złączeniom Theta (θ). Wynikiem złącznia dwóch zbiorów A(a1, a2,...,an) i B(b1, b2,...,am), jest zbiór wszystkich par, C, zawierający każdy atrybut z obu zbiorów wejściowych, C(a1, a2,...,an, b1, b2,...,am) i spełniających predykat złączeniaPredykat należy rozumieć jako warunek złączenia, podawany w sekcji ON i mogący zwierać praktycznie dowolne warunki logiczne..
Można takie złączenie zdefiniować nieco inaczej, programistycznie. Złączenie A JOIN B ON W, gdzie A, B to zbiory wejściowe, W to dowolny warunek, możemy wyliczyć następująco:
Dla każdego wiersza (a1, a2,...,an) ze zbioru A: Dla każdego wiersza (b1, b2,...,am) ze zbioru B: Jeżeli spełniony jest warunek W(A, B) Zwróć (a1, a2,...,an, b1, b2,...,am)
Powyższy algorytm jest raczej fizyczną implementacją niż definicją, ale pomaga zrozumieć ogólną zasadęJest to jedna z najprostszych metod implementacji, tzw. LOOP JOIN. Dwa inne popularne algorytmy to HASH JOIN i MERGE JOIN..
Jeszcze inną metodą pokazania złączenia jest konkretny przykład. Jest to jednocześnie moja ulubiona metoda. Popatrzmy na przykładowe dwie tabele reprezentujące pracownika i przypisane do niego zadania:
CREATE TABLE Employee ( ID int CONSTRAINT PK_Employee_ID PRIMARY KEY, FirstName nvarchar(20) NOT NULL, LastName nvarchar(20) NOT NULL ) INSERT Employee VALUES (1, 'Jan', 'Byk'), (2, 'Anna', 'Kot'), (3,'Ewa','Lis') CREATE TABLE Task ( ID int IDENTITY CONSTRAINT PK_Task_ID PRIMARY KEY, Name nvarchar(20) NOT NULL, Assignment int CONSTRAINT FK_Task_Employee FOREIGN KEY REFERENCES Employee(ID) ) INSERT Task VALUES ('Fix issue', 1),('Eat something',1),('Handle data', 3),('Do some stuff', NULL)
Oraz na złączenie:
SELECT E.FirstName, E.LastName, E.ID, T.Assignment, T.Name FROM Employee E JOIN Task T ON T.Assignment=E.ID
Wynikiem pokazanej operacji będzie taka oto tabela:
FirstName | LastName | ID | Assignment | Name |
---|---|---|---|---|
Jan | Byk | 1 | 1 | Fix issue |
Jan | Byk | 1 | 1 | Eat something |
Ewa | Lis | 3 | 3 | Handle data |
Celowo pokazałem dwie kolumny złączenia obok siebie. Na nich operuje predykat. Jeżeli są równe, mamy dopasowanie. Anna Kot nie jest wyświetlana, bo nie ma zadania wskazującego na numer 2. Do some stuff również nie ma wskazania na żadniego z pracowników i też jest odrzucone. Jan Byk ma dwa dopasowania, dlatego dwa wiersze z Janem Bykiem pojawiły się w zbiorze wynikowym.
Zobacz cały wpis: Różnica między JOIN i LEFT JOIN
Kategoria:SQL Server
;)