Komenda JOIN w bazach danych MYSQL - INNER JOIN - JOIN LEFT - JOIN RIGHT - NATURAL JOIN - EQUI JOIN - CROSS JOIN - LEFT JOIN - RIGHT JOIN - LEFT OUTER JOIN - RIGHT OUTER JOIN - FULL OUTER JOIN - SELF-JOIN - MERGE ROWS - OUTER JOINS
Mouser Electronics Poland   Przedstawicielstwo Handlowe Paweł Rutkowski   PCBWay  

Energetyka, Automatyka przemysłowa, Elektrotechnika

Dodaj firmę Ogłoszenia Poleć znajomemu Dodaj artykuł Newsletter RSS
strona główna BAZA WIEDZY Komenda JOIN w bazach danych MYSQL
drukuj stronę
poleć znajomemu

Komenda JOIN w bazach danych MYSQL

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` (
`nazwisko` varchar(25),
`ID_dzialu` int(4),
UNIQUE KEY `nazwisko` (`nazwisko`)
);
CREATE TABLE `dzial` (
`ID_dzialu` int(4),
`nazwa_dzialu` varchar(25),
UNIQUE KEY `ID_dzialu` (`ID_dzialu`)
);

INSERT INTO `pracownik` VALUES ('Kulikowski', 103);
INSERT INTO `pracownik` VALUES ('Choromański', 100);
INSERT INTO `pracownik` VALUES ('Szklanko', 102);
INSERT INTO `pracownik` VALUES ('Nowik', 103);
INSERT INTO `pracownik` VALUES ('Kowalski', 101);
INSERT INTO `pracownik` VALUES ('Zabielski', NULL);
INSERT INTO `dzial` VALUES (100, 'sprzedaz');
INSERT INTO `dzial` VALUES (101, 'inzynieria');
INSERT INTO `dzial` VALUES (102, 'marketing');
INSERT INTO `dzial` VALUES (103, 'administracja');

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.

INNER JOIN

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 

-------------------------------------------------------------------------------------------------

 

Equi-join

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

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

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

Otrzymuj wiadomości z rynku elektrotechniki i informacje o nowościach produktowych bezpośrednio na swój adres e-mail.

Zapisz się
Administratorem danych osobowych jest Media Pakiet Sp. z o.o. z siedzibą w Białymstoku, adres: 15-617 Białystok ul. Nowosielska 50, @: biuro@elektroonline.pl. W Polityce Prywatności Administrator informuje o celu, okresie i podstawach prawnych przetwarzania danych osobowych, a także o prawach jakie przysługują osobom, których przetwarzane dane osobowe dotyczą, podmiotom którym Administrator może powierzyć do przetwarzania dane osobowe, oraz o zasadach zautomatyzowanego przetwarzania danych osobowych.
Komentarze (9)
Dodaj komentarz:  
Twój pseudonim: Zaloguj
Twój komentarz:
dodaj komentarz
No avatar
Gość
Dobre ale mało. Co jest ? Jak wpisze * to mi wyświetli dobrze a jak tylko np. nazwisko i imie to wyrzuca błąd ?
No avatar
karol
Bardzo dziękuje za ładnie wytłumaczony poradnik na przykładzie.
No avatar
Gość
i zrobiłem kilka błędów przy okazji .... ;D ( nadomiast nalogicznie "
No avatar
Gość
Bardzo proste wytłumaczone i zobrazowane :D
Tego szukałem
pozdro dla Twórcy :D
No avatar
Jedrolo
DZIEKI! Wreszcie.
No avatar
elpe3k
Jeżeli do danych z tabeli przed słowem kluczowym LEFT lub RIGHT dokoptować z lewej lub prawej strony, zgodnie z nazwą słowa kluczowego zawartość drugiej tabeli , to zawsze wyświetlane są wszystkie dane z tabeli prawej z wartościami null, jeśli nie było polączenia w tabeli lewej.
Brak obrazka
czepiasz się drobnostek ;) . Ci co są w temacie ( Ja , Ty i reszta osób które to czytają dobrze wiedzą o co chodzi) , niemniej dziękuję za zwrócenie uwagi. pozdrawiam
No avatar
Roszo
Pierwsze zdanie i już wielka gafa :
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.
No avatar
Ostah
Bardzo przyjemnie wytłumaczone, dzięki :)

REKLAMA
REKLAMA
REKLAMA
REKLAMA
Koło naukowe programistów Koło naukowe programistów Koło naukowe poruszające zagadnienia związane z programowaniem w różnych językach: C/C++/C# , ...
Optoelektronicy Optoelektronicy Grupa zrzeszająca osoby, których pasją jest wykorzystanie niesamowitej natury promieniowania optycznego. ...
Elektrownie wiatrowe Elektrownie wiatrowe Grupa stworzona specjalnie dla tych których interesuje tematyka związana z pracą elektrowni i farm ...
PHP PHP PHP: problemy,porady,ciekawe rozwiązania
REKLAMA
Nasze serwisy:
elektrykapradnietyka.com
przegladelektryczny.pl
rynekelektroniki.pl
automatykairobotyka.pl
budowainfo.pl