mysql różnica w łąćzeniach tabel

0

Cześć mam pytanie dotyczące łączenia tabel w SQL a mianowicie:
czy jest jakakolwiek różnica między łączeniem tabel za pomocą JOIN np.

SELECT
c.name

FROM
[dbo].[sprzedarz] a
INNER JOIN [dbo].[miasta] c on c.Id = a.[Miastatid]

a łączeniem tabel innym sposobem np.

SELECT klienci.imie, klienci.nazwisko, zamowienia.idzamowienia

FROM klienci,zamowienia

WHERE klienci.idklienci = zamowienia.idzamowienia

Sposobu z JOIN używamy na studiach a drugi sposób zobaczyłem na filmikach Mirosława Zelenta na youtube.
Nie ukrywam że niedługo mam poprawę egzaminu,a boję się że jak napiszę tym drugim sposobem to może mi nie uznać tego :)
Z góry dzięki za odpowiedzi.

1

Przy INNER JOIN nie ma różnicy, przy pozostałych (LEFT, RIGHT, FULL) jest.

0

powinno się unikać stosowania warunków połączeń w WHERE bo tworzą one tzw. iloczyn kartezjański czyli łączą wszystkie wiersze z jednej tabeli z każdym wierszem z drugiej.
Powiedzmy dla 2 tabel po 100 wierszy otrzymamy wynik 10000 wierszy z którego następnie będzie filtrowany warunek zawarty w WHERE. Przy większych bazach to zabójstwo :).
Co prawda niektóre DBMS-y tłumaczą sobie wewnętrznie takie zapytania na INNER JOIN, ale generalnie stosowanie WHERE dla złączeń to nie polecana praktyka.

0

Do tego łączenie tabel przez WHERE jest niebezpieczne. Masz zapytanie które wyciaga dane z 5 tabel na następnie w sekcji WHERE filtruje je po konkretnych kryteriach (powiedzmy 5 warunków).
Jeśli będziesz tabele łączył poprzez WHERE to do 5 warunków z filtrowaniem dochodzą 4 warunki z łączeniem, w sumie 9 warunków. Mogą się mieszać, i bardzo łatwo o jednym łączeniu zapomnieć bo patrząc na zapytanie nie widzisz od razu że zapomniałeś o jednym łączeniu bo masz w jednym miejscu i filtrowanie i łączenie. Jeśli zapomnisz połączyć dwóch tabel każda po 50000 rekordów to przytkasz bazę na dłuzszy czas, bo będzie chciała zwrócić... 2500000000 rekordów :)
Jeśli będziesz tabele łączył poprzez *** JOIN, to:

  1. Warunki łączące tabele są odseparowane od filtrujących rekordy.
  2. Jeśli pominiesz jakiś warunek łaczenia tabel, to zapytanie nie jest poprawne i nie zostanie wykonane przez bazę i to Cie urchroni przez odpaleniem zapytania zwracającego zyliony rerdów.

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