Ответ 1
Левая таблица - первая таблица в списке. Да, ваши два примера эквивалентны.
Что делает данную таблицу левой?
Является ли это, что таблица указана в части "От" запроса?
Или это левая таблица, потому что она находится в левой части оператора = <? >
Являются ли следующие эквивалентные
SELECT *
FROM left_table
LEFT JOIN right_table ON left_table.right_id = right_table.id
и
SELECT *
FROM left_table
LEFT JOIN right_table on right_table.left_id = left_table.id
???
Спасибо
Левая таблица - первая таблица в списке. Да, ваши два примера эквивалентны.
Правая таблица всегда является таблицей, к которой вы присоединяетесь. Так что да, оба ваших утверждения эквивалентны.
JOIN [Table] ON ...
[Таблица] всегда является правой таблицей.
Грубо говоря, "left" - это результат всего, что появляется первым во всем предложении FROM при чтении слева направо, включая результат других JOIN, подзапросов, VIEWS и STORED PROCEDURES.
Оба оператора SQL эквивалентны, потому что оператор =
в части ON
предложения JOIN
является симметричным (если a = b, то b = a), поэтому результат будет одинаковым независимо от порядка.
Обычное соединение показывает только те строки, в которых предложение ON для JOIN имеет значение true, тогда как LEFT JOIN показывает также записи из "left", если условие ложно (показывает NULL для любого столбца из "right", присутствующего в SELECT).
Например:
-- People: -- Car
id | name owner_id | model
---+------------ ---------+------------
1 | Paul 1 | Ferrari
2 | Nancy 2 | Porsche
3 | Arthur NULL | Lamborghini
4 | Alfred 10 | Maserati
> select people.name, car.model from people join car on car.owner_id=people.id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
2 record(s) found
> select people.name, car.model from people left join car on
car.owner_id=people.id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
Arthur | NULL
Alfred | NULL
4 record(s) found
> select people.name, car.model from people left join car on
people.id = car.owner_id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
Arthur | NULL
Alfred | NULL
4 record(s) found
См. это для довольно хорошего прохода по присоединениям: http://en.wikipedia.org/wiki/Join_(SQL)
И да, оба утверждения эквивалентны: -)
Да, он определяется стороной оператора JOIN, в которой отображается таблица. Ваши два примера действительно эквивалентны.