Where, a INNER JOIN = to samo?

0

Cześć, nie rozumiem różnic między dodaniem warunku WHERE, a INNER JOIN.
przerabiam accessa, mam w bazie 3 tabele:
-klienci (imie,nazwisko, pesel)
-filmy (tytul, id_filmu)
-wypozyczenia(pesel, id_filmu)

wszystkie są połączone relacjami. i robiąc to za pomocą myszki (czyli klikając które pola mają być pokazane, itd) wychodzi w kodzie SQL z inner join:

 SELECT Klienci.Imie, Klienci.Nazwisko, Filmy.Tytul
FROM Klienci INNER JOIN (Filmy INNER JOIN Wypozyczenia ON Filmy.ID_filmu = Wypozyczenia.ID_filmu) ON Klienci.Pesel = Wypozyczenia.Pesel
GROUP BY Klienci.Imie, Klienci.Nazwisko, Filmy.Tytul;

A pisząc samemu używając WHERE

SELECT klienci.imie, klienci.nazwisko, filmy.tytul
FROM klienci, filmy, wypozyczenia
WHERE klienci.Pesel=wypozyczenia.Pesel AND wypozyczenia.ID_filmu=Filmy.ID_filmu
GROUP BY klienci.imie, klienci.nazwisko, filmy.tytul;

Wynik jest ten sam (tak mi się wydaje, bo tyle samo wyników ;))

Mógłby mi to ktoś prosto wyjaśnić - czemu używać inner join, a nie where, albo na odwrót?
czytałem trochę o "join" ale nie do końca rozumiem jego istoty (w tym przypadku)

0

inner join połączy dwie tabele przy spełnionym warunku - rekordów do przejrzenia będzie nie więcej niż liczba rekordów najmniejszej z tych tabel

wybieranie z kilku tabel po przecinku stworzy iloczyn kartezjański tych tabel czyli każdy z każdym - liczba rekordów do przejrzenia będzie iloczynem rekordów w tabeli1 * w tabeli2 * w tabeli3

różnica w wyniku żadna, ale w pierwszym wypadku przy dużej ilości danych zapytanie może trwać sekundę a w drugim kilka dni

0
FROM klienci, filmy, wypozyczenia

to też jest inner join, tylko tzw "implicit"
ZAWSZE kiedy wybierasz dane z więcej niż 1 tabeli następuje złączenie ;) (nawet jak masz podzapytanie to silnik bazy danych przerabia to sobie na złączenie)
http://en.wikipedia.org/wiki/Join_(SQL)#Inner_join

0

no ok, ale mogę sobie poradzić samym okresleniem warunków (where) i wybieraniem z kilku tabel naraz nie wpisując nigdzie żadnego join ;) ?

0

Możesz, ale jaka jest niby różnica? Tylko taka że łatwiej się pomylić i że nie widać od razu co robisz tym zapytaniem.

0

hmm sam nie wiem, po prostu przyzwyczaiłem się do wklepywania where długiego na 3 linijki jak nie wiedziałem o inner join.
a programistą nie jestem, tylko przygotowuję się do mat. z informatyki i w niektórych zadaniach męczy mnie klikanie "na chama" aż coś wyjdzie i wydaje mi się prostsze napisanie dłuższego where zamiast klikać te wszystkie pola :D
dzięki za odpowiedzi!

0

Proste: JOIN do łączenia, WHERE do filtrowania.
Wbrew pozorom jest różnica, czy warunek wpiszesz do WHERE czy do JOIN, ale dl INNER tego nie zobaczysz, dopiero dla LEFT/RIGHT.
Po wtóre łącząc tabele we WHERE nie osiągniesz tego samego co w LEFT/RIGHT JOIN

1 użytkowników online, w tym zalogowanych: 0, gości: 1