Подтвердить что ты не робот

Какая таблица в точности является "левой" таблицей и "правой" таблицей в операторе JOIN (SQL)?

Что делает данную таблицу левой?

Является ли это, что таблица указана в части "От" запроса?

Или это левая таблица, потому что она находится в левой части оператора = <? >

Являются ли следующие эквивалентные

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

???

Спасибо

4b9b3361

Ответ 1

Левая таблица - первая таблица в списке. Да, ваши два примера эквивалентны.

Ответ 2

Правая таблица всегда является таблицей, к которой вы присоединяетесь. Так что да, оба ваших утверждения эквивалентны.

JOIN [Table] ON ...

[Таблица] всегда является правой таблицей.

Ответ 3

Грубо говоря, "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

Ответ 4

См. это для довольно хорошего прохода по присоединениям: http://en.wikipedia.org/wiki/Join_(SQL)

И да, оба утверждения эквивалентны: -)

Ответ 5

Да, он определяется стороной оператора JOIN, в которой отображается таблица. Ваши два примера действительно эквивалентны.