Есть 3 таблицы: гонщик, машина, и гонщики_машины. Допустим, стоит у меня задача, выбрать: имя гонщика | имя машины на которой он может кататься. Есть ли разница, начну я делать: SELECT ... FROM racers_cars JOIN cars on ... JOIN racers ON ..., или я начну делать селект от cars и в конце джойнить racers_cars? По идее, результат тот же. Но меня путает постоянно то, что я не знаю, с какой стороны обычно правильно будет джойнить
Если подразумевается простой INNER JOIN, то разницы никакой нет. Если же будут использоваться LEFT JOIN и RIGHT JOIN, то конечно разница имеется.
Например SELECT * FROM cars LEFT JOIN racers_cars и SELECT * FROM racers_cars LEFT JOIN cars
дадут разные результаты, потому что таблицы СЛЕВА отличаются
Почитайте про JOIN-ы и станет понятнее где и что использовать
а можно пример: Например SELECT * FROM cars LEFT JOIN racers_cars и SELECT * FROM racers_cars LEFT JOIN cars
дадут разные результаты, потому что таблицы СЛЕВА отличаются
Как тут может пойти что то не так? Пример,пожалуйста
Если по какой-то причине у гонщика нет машины то JOIN не покажет этого гонщика, потому что у него нет соответствующей записи в гонщиках_машинах .
Но если использовать LEFT JOIN (cars LEFT JOIN racers_cars), выведутся все записи из гонщиков даже если нет записей в гонщиках_машинах (поля будут NULL).
А если сделать LEFT JOIN начиная с гонщики_машины (racers_cars LEFT JOIN cars), то выведутся все записи из гонщики_машины, при этом водителя без машины видно не будет.
Rsa97, Совсем не согласен с постом на хабре. Грубейшая ошибка это не уникальные id )))) Дальше читал уже с предвзятым мнением, что автор теоретик, но никак не практик
Rsa97, Заблуждения подобные этому в мире программирования,
в частности, на тостере, встречаются постоянно, причем заблуждения намного более вредные чем это. Редкий разработчик столкнется с проблемами из-за понимания джоинов как пересечения кругов