Dla pokazania zagadnienia łączenia tabel wymyśliłem dwie tabele. Pola tabel oraz pełna ich zawartość jest przestawiona na pierwszym, poniższym rysunku.
Tabelę UCZNIOWIE i SZKOLENIA można połączyć ze sobą wykorzystując pola:
- ID w tabeli UCZNIOWIE oraz
- ID_UCZESTNIKA w tabeli SZKOLENIA.
Pole ID_UCZESTNIKA nie może przyjąć innej wartości niż NULL (pole niewypełnione) lub dowolna wartość jaka występuje w tabeli UCZNIOWIE w polu pole ID. Ja wiem Marcinie, iż z punktu widzenia zasad tworzenia relacyjnych baz danych występuje tu istotny feler. Powinny być trzy tabele, UCZNIOWIE tj. wykaz uczniów, SZKOLENIA tj. wykaz dostępnych szkoleń i LISTY_OBECNOSCI, tj. spisy przeprowadzonych szkoleń z informacją, kto uczestniczył i jakie to szkolenia było, pamiętaj o tym. Przykład, jaki skonstruowałem i tu używam jest do pokazania idei złączeń :-) Jak już ją zrozumiesz, to pokażę Ci jak to powinno być z użyciem trzech tabel.
Kontynuujmy zatem Marcinie. By cokolwiek złączyć - muszą być tabele, co najmniej dwie (więcej nie jest polecane) i trzeba wskazać warunki-zasady łączenia (o kartezjanach, tj. złączeniach każdy z każdym w ogóle nie myśl). Warunków łączenia musi być n-1 gdzie n to liczba łączonych tabel.
Ponieważ w sekcji pomiędzy SELECT a FROM trzeba wymieniać precyzyjnie, które pola i z której tabeli chcesz wyświetlać musisz podawać nazwę tabeli oraz po kropce nazwę pola. Jak pracujesz na jednej tabeli, to ten problem nie występuje. Zatem przy łączeniach, gdzie będziesz miał w obróbce więcej niż jedną tabelę wygodnie jest zatem nadać aliasy i zamiast nazwy tabeli podawać krótki, jednoliterowy lub dwuliterowy alias, a po kropce nazwę pola. To w przykładach jest doskonale widoczne :-)
Złączenie wewnętrzne – dotyczy jak najbardziej dwóch tabel, jeżeli jednej to byłoby to samozłączenie.
Sformułowanie „Wewnętrzne” oznacza, iż w wyniku zapytania ze złączeniem tabel wystąpią jedynie te rekordy, dla których nastąpiło złączenie. Słowo „wewnętrznie” jest tu stosowane dla odróżnienia od dokładania wierszy, dla których nie występuje złączenie, czyli od złączenie zewnętrznego.
Jeszcze raz:
- wewnętrzne złączenie, w wyniku tylko te rekordy, dla których następuje łączenie w obu tabelach,
- zewnętrzne lewe, tabela po lewej traktowana jako większa, uboższa ta po prawej, w zależności od notacji należy napisać LEFT OUTER JOIN lub postawić plusik przy uboższej tabeli, po prawej,
- zewnętrzne prawe, tabela po prawej traktowana jako większa, uboższa ta po lewej, w zależności od notacji należy napisać RIGHT OUTER JOIN lub postawić plusik przy uboższej tabeli, po lewej,
- zewnętrzne, lewo i prawo, nie ma notacji z plusikiem, jest tylko FULL OUTOR JOIN.
Zmęczyłem się opisywaniem, zatem dla kolejne obrazki koniecznie zobaczyć, pokazują one to co wyżej napisałem plus extra obrazek opisujący używanie notacji z JOIN.
Może i wcześniej powinienem objaśnić co to jest notacja z plusikiem, a co ta z JOIN, skucha… Po prostu notacja, sposób łączenia „z plusikiem” działa na bazie ORACLE, a notacja z „JOIN” to standard ANSI SQL 1999 w zakresie składni tworzenia złączeń. Uwaga: bazy Oracle przed wersją 9i nie obsługują standardu z „JOIN” a od 9i w górę możliwe są obie. Notacja „z plusikiem” nie zadziała na innych bazach niż Oracle.
Dla przećwiczenia, wykorzystania:
- skrypcik tworzący i zasilający tabele UCZNIOWIE I SZKOLENIA,
- kwerendy w obu standardach łączenia, złączenia wewnętrzne i zewnętrzne,
- kwerendy w obu standardach, wyniki zapytań, wszystko pokolorowane w excel.
Pozdrawiam,
W.
Brak komentarzy:
Prześlij komentarz