Czy JOIN może być dokładnie zastąpiony przez WHERE ?

0

Cz wyszukanie na dwóch powiązanych tabelach za pomocą INNER JOIN może być zastąpione (jest identyczne) z pewnym zapytaniem opartym na WHERE?
np. mamy tabele Customer i Order. Order posiada foreign key z Customer (Customer.id = foreign key w Order o nazwie: cust_id)

czy to:


SELECT Customer.name, Order.numer
FROM Customer
INNER JOIN Order
ON Customer.id = Order.cust_id
WHERE Order.numer > 520;


to będzie zawsze to samo co to (pod względem wyniku):


SELECT Customer.name, Order.numer
FROM Customer, Order 
WHERE Customer.id = Order.cust_id
AND
WHERE Order.numer > 520;

0

to jest to samo

0

Różnica jest gdy użyjesz LEFT JOIN na przykład

0

Dzięki za odpowiedź. Mam jeszcze jedno pytanko z tym związane. Czy można używać INNER JOIN do sięgania (w jednym zapytaniu) przez kilka tabel po rekordy z ostatniej tabeli powiązane z rekordami z pierwszej tabeli?
Przykład hipotetyczny: tabele: Klienci(K), Zamówienia(Z), Produkty(P), Producenci(F). Czy mogę w jednym zapytaniu dla danego Klienta wybrać od razu Producentów których produkty sprzedałem temu klientowi np tak:

SELECT F.name 
FROM F
INNER JOIN (K, Z, P, F)    // nie wiem czy musi być nawias?
ON (K.id = Z.id_klienta AND Z.id_produktu = P.id AND P.id_producenta = F.id)      // i czy tu też nawias ?
WHERE K.name = 'Justin Biber';
 

Wygląda trochę dziwnie.
I jeżeli to powyżej jest dobrze to czy identyczna pod względem działania (Selectowania) konstrukcja oparta na WHERE jest możliwa tylko z wieloma Selctami i IN


 SELECT F.name 
 FROM F
 WHERE  F.id IN (
             SELECT P.id_producenta 
             FROM P
             WHERE  P.id IN (  
                           SELECT id_produktu FROM Z
                           WHERE Z.id_klienta IN (
                                          SELECT id FROM K
                                          WHERE name = 'Justin Biber' )  

                        )
                         );  // nie jestem pewien czy znak ";" nie powinien być na końcu każdego zagłębionego Selecta czy też nie ?

Czy da radę to z "WHERE IN" zrobić prościej?

0

Wszystko jest w dokumentacji.

SELECT ... 
FROM t1, t2, t3
WHERE t1.b = t2.b AND t2.c = t3.c AND t1.a = t3.a;

Nawiasy nie są konieczne.

Te zapytanie z "WHERE IN" można zastąpić zapytaniem ze zwykłymi JOIN-ami.

Zapytanie SQL (z wyjątkiem niektórych przypadków) powinno być zakończone średnikiem.

0

Dzięki : )

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