Wielu z nas spotkało się z problemem polegającym na tym, że potrzebne nam dane rozmieszczone są w kilku tabelach bazay danych. Do wybierania danych, które rozstrzelone są po całej bazie w różnych tabelach i mają jeden czynnik wspólny służy komenda JOIN, która występuje w połączeniu z frazami LEFT, RIGHT, INNER i innymi. Poniższy wpis przybliży wam ich działanie.
Do demonstracji niezbędne będą 2 tabele w bazie danych, które będą posiadały jeden element wspólny. Jego nazwa może być identyczna bądź różna, jednak przy identycznym nazewnictwie mamy możliwość zastosowania szerszego wachlarza komend, za pomocą których można wybierać dane wspólne z obu tabel.
Tworzymy 2 tabele : pracownik i dział zawierające wspólny element 'ID_dzialu': | Wypełniam tabele przykładowymi danymi: |
CREATE TABLE `pracownik` ( | INSERT INTO `pracownik` VALUES ('Kulikowski', 103); |
efektem są 2 tabele postaci:
Teraz, gdy już mamy podstawę do ćwiczeń przedstawię zestaw komend za pomocą których wybierzemy dane na podstawie zawartości obu tabel. Pracownikom przypiszemy działy, departamentom pracowników w różnych wariantach.
Jest to najbardziej popularna operacja używana w operacjach. Efektem jest kombinacja wartości z 2 tabeli które mają wspólny element wspólny , wskazany w komendzie jako "łącznik" tabel.
Elementem wspólnym tabel , na podstawie którego wykonywane jest porównywanie jest "ID_dzialu". Elementy według których dokonywane są dopasowania nie muszą nazywać się identycznie, mozę to być równie dobrze ID_dzialu inp NR_pracownika. Nazewnictwo nie ma znaczenia, istotne natomiast są wartości aby były tego samego typu o były porównywalne.
Przy wskazywaniu elementu"łącznika" należy sprecyzować również tabele z której wartość pochodzi: pracownik.ID_dzialu ponieważ polecenie inner join pozwala na łaczenie więcej niż 2 tabel.
SELECT *FROM pracownik
INNER JOIN dzial
ON pracownik.ID_dzialu = dzial.ID_dzialu'
Efekt jest następujący:
Wiersze z tabel zostały dopasowane tak aby nazwisku o pewnym id był przypisany dział o identycznej wartości id.
Komendę możemy wzbogacić oczywiście o definicję warunków sortowań np:
SELECT *FROM pracownik INNER JOIN dzial ON pracownik.ID_dzialu = dzial.ID_dzialu where dzial.`ID_dzialu`<103 order by nazwisko DESC
efekt:
można również zastosować bardziej wyraźny zapis:
SELECT * FROM pracownik, dzial
WHERE pracownik.ID_dzialu = dzial.ID_dzialu
efekt tej komendy jest analogiczny jak efekt komendy pierwszej
-------------------------------------------------------------------------------------------------
Warto wiedzieć o istnieniu Equi-join znanego również jako equijoin, który jest specyficznym przypadkiem join'a używającego tylko równości w porównaniach. Używanie komparatorów innych niż "=" dyskwalifikuje join jako equi-join. Przykładem equi-join jest ostatni przykład:
SELECT * FROM pracownik, dzial
WHERE pracownik.ID_dzialu = dzial.ID_dzialu
SQL zapewnia opcjonalną skróconą wersję przewidzianą dla equi-join poprzez użycie konstrukcji:
SELECT *FROM pracownik
INNER JOIN dzial
USING (ID_dzialu)
efektem której jest również wynik postaci:
--------------------------------------------------------------------------------------------------------
Natural join oferuje dalszą specjalizację equi-join. "łącznik" tabel pojawia się automatycznie poprzez porównywanie kolumn obu tabel na podstawie nazw kolumn któe muszą być identyczne. np:
SELECT * FROM pracownik NATURAL JOIN dzial
--------------------------------------------------------------------------------------------------------
Cross join zwraca iloczyn zbiorów rekordów z obu tabel. Innymi słowy Cross join łączy każdy wiersz kolumny 1 z każdym wierszem kolumny 2.
SELECT * FROM pracownik CROSS JOIN dzial
cross join można również zastosować z postaci ukrytej,
przykład ukrytego cross join
SELECT * FROM pracownik, dzial;
efekt jak wyżej
|
REKLAMA |
REKLAMA |
REKLAMA |
REKLAMA |
REKLAMA |
Projektanci oświetlenia Grupa, w której poruszana jest tematyka dotycząca projektowania, użytkowania i konserwacji opraw ... |
Matematyka Grupa dla wszystkich miłośników "Matki wszystkich nauk" Dyskusje, cyferki, zdania - jednym ... |
Akty prawne, normy Akty prawne, normy i inne zagadnienia |
Sieci telekomunikacyjne Grupa stworzona dla teleinformatyków, osób tworzących, zarządzających różnymi typami sieci ... |
REKLAMA |
Tego szukałem
pozdro dla Twórcy :D
Wielu z nas spotkało się z problemem polegającym na tym, że potrzebne nam dane rozmieszczone są w kilku bazach danych.
Podejrzewam że chodziło o tabele w bazie danych.