Можно ли написать запрос соединения без ONоператора? и чем отличаются эти соединения LEFT JOIN, RIGHT JOIN.
Можно ли написать запрос соединения без ONоператора? и чем отличаются эти соединения LEFT JOIN, RIGHT JOIN.
Ответы:
Документация MySQL охватывает эту тему.
Вот синопсис. При использовании joinили inner join, то onусловие не является обязательным. Он отличается от стандарта ANSI и практически от любой другой базы данных. Эффект cross join. Точно так же вы можете использовать onпредложение with cross join, которое также отличается от стандартного SQL.
Перекрестное соединение создает декартово произведение, то есть все возможные комбинации 1 строки из первой таблицы и 1 строки из второй. Перекрестное соединение для таблицы с тремя строками ('a', 'b' и 'c') и таблицы с четырьмя строками (скажем, 1, 2, 3, 4) будет иметь 12 строк.
На практике, если вы хотите выполнить перекрестное соединение, используйте cross join:
from A cross join B
намного лучше, чем:
from A, B
и:
from A join B -- with no on clause
В on требуется для правого или левого внешнего соединения, поэтому обсуждение для них не актуально.
Если вам нужно разобраться в различных типах объединений, вам необходимо изучить реляционные базы данных. Stackoverflow - не подходящее место для обсуждения такого уровня.
См. Пример в http://www.sitepoint.com/understanding-sql-joins-mysql-database/
Вы можете использовать "USING" вместо "ON", как в запросе
SELECT * FROM table1 LEFT JOIN table2 USING (id);
ONпредложение сообщает серверу, как связаны таблицы, нет. Если все ваши разные типы соединений дают одинаковый результат, вы почему-то делаете это неправильно, и добавление кода может помочь нам определить вашу проблему. А пока зайдите в блог Джеффа Этвуда, чтобы получить двухминутную вводную информацию о различных типах соединений.