• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[SQL] Kiedy tak właściwie używać JOIN ?

Object Storage Arubacloud
0 głosów
1,856 wizyt
pytanie zadane 21 marca 2016 w SQL, bazy danych przez aribike Nowicjusz (120 p.)
Znalazłem podobne pytanie tutaj na forum, jednak w dalszym ciągu nie do końca rozumiem, kiedy tak właściwie używać zapytania JOIN ?

Mam 3 tabele: uzytkownicy, dane, adres związane relacjami. Zaznaczyłem wszystko z tych tabel (gdzie id z tabeli użytkownicy jest takie jak id użytkownika zalogowanego), dwoma sposobami:

SELECT * FROM uzytkownicy, dane, adres WHERE uzytkownicy.iddane = dane.iddane AND dane.idadres = adres.idadres AND id=:id

oraz za pomocą JOIN:

SELECT * FROM `uzytkownicy` LEFT JOIN `dane` ON `uzytkownicy`.`iddane` = `dane`.`iddane` AND `dane`.`iddane` = `uzytkownicy`.`iddane` LEFT JOIN `adres` ON `dane`.`idadres` = `adres`.`idadres` AND `adres`.`idadres` = `dane`.`idadres` WHERE `id`=:id

Uzyskany efekt jest taki sam. Pierwsza opcja na pewno jest krótsza, ale jakie jeszcze są różnicę? Czy są takie przypadki, kiedy pierwszego sposobu nie da się użyć i pozostaje drugi? Albo na odwrót?

 

Przy okazji, czy jest jakaś różnica między górnym zapisem JOIN, a tym? Efekt również ten sam.

SELECT * FROM `uzytkownicy` LEFT JOIN `dane` ON `uzytkownicy`.`iddane` = `dane`.`iddane` LEFT JOIN `adres` ON `dane`.`idadres` = `adres`.`idadres` WHERE `id`=:id

1 odpowiedź

+4 głosów
odpowiedź 21 marca 2016 przez jeremus Maniak (59,720 p.)
najlepiej wyjaśnic to  na przykładzie :

np. mam tabele ludki  i samochody

ludki

idl   nazwisko

1 Kowalski

2 Nowak

3 Brzozowski

samochody

ids idl marka

1  1  Fiat

2  3 Mazda

select nazwisko,marka from ludki,samochody where ludki.idl=samochody.idl

zwróci :

Kowalski Fiat

Brzozowski Mazda

czyli pojawią sie tylko nazwisko ludków którzy mają samochody

a jeśłi chcesz aby były nazwiska wszystkich ludków ( nawet tych bez samochodu używasz left join )

a pytanie

select nazwisko, marka from ludki left join samochody on ludki.idl=samochody.idl

zwróci :

Kowalski Fiat

Nowak  NULL

Brzozowski Mazda

czyli podsumowując - left join służy do tego żeby wziąźć wszystkie rekordy tablicy ludki i te rekordy tablicy samochody co się łącza z tablica ludki ( jak nie ma to masz puste miejsce )

czy to jasne ?
komentarz 21 marca 2016 przez aribike Nowicjusz (120 p.)
Ok, rozjaśniłeś :) Mowa tu jednak o LEFT JOIN, a samo JOIN (czy tam INNER JOIN czy jeszcze coś podobnego) również zwróci tylko to co w podanym przez Ciebie pierwszym przykładzie. W takiej sytuacji nie ma więc większej różnicy?
komentarz 21 marca 2016 przez jeremus Maniak (59,720 p.)
tak samo join lub inner join to to samo  co podałem w pierwszym przykładzie

jest jeszcze right join ( działa podobnie jak left tylko weźmie wszystkie rekordy z drugiej tablicy )

w moim przykładzie jakby były samochody bez właściciela
komentarz 22 marca 2016 przez aribike Nowicjusz (120 p.)
No i o to mi chodziło. Reasumując - LEFT JOIN może się nieraz przydać bo daje inny efekt, natomiast JOIN lub INNER JOIN zwróci to samo co przy użyciu WHERE. Dzięks :)

Podobne pytania

0 głosów
2 odpowiedzi 618 wizyt
pytanie zadane 7 marca 2019 w SQL, bazy danych przez hiper007 Stary wyjadacz (11,270 p.)
0 głosów
0 odpowiedzi 168 wizyt
pytanie zadane 24 stycznia 2018 w SQL, bazy danych przez Anoonymous Obywatel (1,560 p.)
0 głosów
0 odpowiedzi 271 wizyt

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...