Wpis z mikrobloga

Nie bardzo rozumiem funkcję JOIN w #sql

Kod:

SELECT S.Country, S.SupplierName, P.ProductName
FROM Suppliers as S
JOIN Products as P on S.SupplierID = P.SupplierID
GROUP BY S.Country, S.SupplierName, P.ProductName
ORDER BY S.Country, S.SupplierName, P.ProductName;

można zamienić na

SELECT S.Country, S.SupplierName, P.ProductName
FROM Products AS P, Suppliers AS S
WHERE P.SupplierID=S.SupplierID
GROUP BY S.Country, S.SupplierName, P.ProductName
ORDER BY S.Country, S.SupplierName, P.ProductName
ORDER BY S.Country;

Dlaczego się właściwie tego używa, skoro można nie używać i zrobić czytelniejszy kod?
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@PoProstuMichal: drugi nie jest czytelniejszy, bo musisz szukać warunku złączenia wśród warunków ograniczających wynik. Jak postanowisz zmienić JOIN na LEFT OUTER, to się wszystko posypie (i dłużej zajmie przebudowa zapytania, niż w wersji z ON).
Żeby sprawdzić po co są joiny najlepiej połącz 6 tabel, tak by z części były widoczne wszystkie rekordy, a z części tylko te, które mają odpowiedni fk do wcześniejszych.
  • Odpowiedz
@Rokuto: Jak drugi czytelniejszy?

Pierwszy jest czytelniejszy ponieważ masz łączenia na górze w sekcji tabel, a w where dajesz już tylko ograniczenia na wyniki.
Poza tym tak jak wyżej, jak chcesz JOIN zmienić na LEFT JOIN to musisz pół zapytania przepisywać.
  • Odpowiedz
Tak, najprawdopodobniej wytworzy takie same (i zapewne większość systemów również tak zrobi), ale po co kusić los i dziwić się, że wolno działa? :)


@Rokuto: Plan wykonanie będzie się różnił jedynie w przypadku gdy algorytmy genetyczne podejmą złą decyzję (a w MSSQL są bardzo kapryśne) ale i jedno i drugie zapytanie może się wtedy wolniej wykonać.

@PoProstuMichal: A zrób sobie teraz 20 joinów i zobacz które czytelniejsze.
  • Odpowiedz