Для чего пишут во FROM несколько таблиц?
Объясните мне в чем смысл когда пишут в запросе select * from table1, table2? При этом для второй таблицы все равно же пишут условия связи с первой. Почему ее просто не приджойнить? Это выглядит намного логичнее и понятнее. По моему во from всегда должна быть одна таблица, а остальные джойниться.
Ответы (2 шт):
Это называется неявное соединение. Просто допустимый вариант соединения. Когда я начал писать много запросов под oracle - переехал именно на такой вариант. По моему мнению данный способ удобней. Например left join с ограничением на 2-й таблице под oracle:
select *
from table1,
table2
where table1.id = table2.id(+)
and table2.col1(+) = 10;
Запрос SELECT * FROM table1, table2 является примером использования неявного соединения (implicit join) или декартова произведения (cross join). В этом случае каждая строка из table1 будет комбинирована с каждой строкой из table2. Это приведет к созданию множества строк в результирующем наборе данных, равного произведению числа строк в table1 и table2.
Эквивалентом этого запроса с использованием явного оператора CROSS JOIN в MySQL будет следующий запрос:
SELECT * FROM table1
CROSS JOIN table2;
Без дополнительного условия, такой запрос не имеет большого смысла. Другими словами, ответ на ваш вопрос находится во второй части запроса, условиях.