W ogólności istnieje bardzo wiele różnych sposobów złączania dwóch zbiorów danych, tutaj ograniczymy się jednak do omówienia trzech najważniejszych:
Rekordy ze zbiorów złączane są na podstawie wartości zmiennych o jednakowych nazwach w obydwu zbiorach - jeśli wszystkie wspólne zmienne mają takie same wartości, wtedy rekordy uznawane są za pasujące do siebie.
Podsumowanie w. w. złączeń przedstawia tabela poniżej:
rodzaj złączenia | rekordy w zbiorze złączonym | wartości zmiennych w zbiorze złączonym |
---|---|---|
left_join | wszystkie ze zbioru A | Zmienne ze zbioru A - jak w zbiorze A Zmienne ze zbioru B - jak w zbiorze B, jeśli dany rekord dopasowano do zbioru A, braki danych w przeciwnym wypadku. |
inner_join | wspólne dla zbiorów A i B | Zmienne ze zbioru A - jak w zbiorze A Zmienne ze zbioru B - jak w zbiorze B |
full_join | wszystkie ze zbiorów A i B | Zmienne ze zbioru A - jak w zbiorze A, jeśli dany rekord dopasowano do zbioru B, braki danych w przeciwnym wypadku. Zmienne ze zbioru B - jak w zbiorze B, jeśli dany rekord dopasowano do zbioru A, braki danych w przeciwnym wypadku. |
Załóżmy, że posiadamy dwa zbiory danych:
Zbiór A
id_szkoly | rok | id_obserwacji | id_testu | wynik |
---|---|---|---|---|
10 | 2014 | 100 | 1 | 13 |
10 | 2014 | 101 | 1 | 15 |
11 | 2014 | 102 | 2 | 9 |
13 | 2014 | 103 | 2 | 8 |
Zbiór B
id_szkoly | rok | nazwa | adres |
---|---|---|---|
10 | 2014 | SP nr 1 | Szkolna 10 |
11 | 2014 | SP nr 2 | Kopernika 3 |
12 | 2014 | SP nr 3 | Konopnickiej 1 |
Chcemy złączyć informacje o uczniach z informacjami o adresach szkół. Stosując w. w. typy złączeń otrzymamy:
(na szaro zaznaczono kolumny wspólne pomiędzy obydwoma zbiorami danych - na ich podstawie zbiory są do siebie dopasowywane)
left_join(A, B)
id_obserwacji | id_testu | wynik | id_szkoly | rok | nazwa | adres |
---|---|---|---|---|---|---|
100 | 1 | 13 | 10 | 2014 | SP nr 1 | Szkola 10 |
101 | 1 | 15 | 10 | 2014 | SP nr 1 | Szkola 10 |
102 | 2 | 9 | 11 | 2014 | SP nr 2 | Kopernika 3 |
103 | 2 | 8 | 13 | 2014 |
inner_join(A, B)
id_obserwacji | id_testu | wynik | id_szkoly | rok | nazwa | adres |
---|---|---|---|---|---|---|
100 | 1 | 13 | 10 | 2014 | SP nr 1 | Szkola 10 |
101 | 1 | 15 | 10 | 2014 | SP nr 1 | Szkola 10 |
102 | 2 | 9 | 11 | 2014 | SP nr 2 | Kopernika 3 |
full_join(A, B)
id_obserwacji | id_testu | wynik | id_szkoly | rok | nazwa | adres |
---|---|---|---|---|---|---|
100 | 1 | 13 | 10 | 2014 | SP nr 1 | Szkola 10 |
101 | 1 | 15 | 10 | 2014 | SP nr 1 | Szkola 10 |
102 | 2 | 9 | 11 | 2014 | SP nr 2 | Kopernika 3 |
103 | 2 | 8 | 13 | 2014 | ||
12 | 2014 | SP nr 3 | Konopnickiej 1 |