Использование перекрестных соединений

Завершено

Перекрестное соединение — это просто декартово произведение двух таблиц. С помощью синтаксиса ANSI SQL-89 можно создать перекрестное соединение, просто убрав фильтр для двух таблиц. Работа с синтаксисом ANSI-92 немного сложнее, что само по себе неплохо, так как перекрестное соединение не является обычной операцией. При использовании синтаксиса ANSI-92 весьма маловероятно, что вы создадите перекрестное соединение.

Для создания декартова произведения явным образом используется оператор CROSS JOIN.

Эта операция выдает результирующий набор со всеми возможными сочетаниями входных строк:

SELECT <select_list>
FROM table1 AS t1
CROSS JOIN table2 AS t2;

Хотя этот результат обычно не является желаемым, существует несколько практических способов написания явного CROSS JOIN:

  • Создание таблицы чисел со строкой для каждого возможного значения в диапазоне.
  • Создание больших объемов данных для тестирования. Приложив немного усилий и выполнив перекрестное соединение таблицы с минимум 100 строками с самой собой, можно получить 10 000 выходных строк.

Синтаксис CROSS JOIN

При написании запросов с использованием CROSS JOIN необходимо учитывать следующие рекомендации.

  • Совпадающих строк нет, поэтому предложение ON не используется. (Использование предложения ON с CROSS JOIN является ошибкой.)
  • Чтобы применить синтаксис ANSI SQL-92, разделяйте имена входных таблиц оператором CROSS JOIN.

Следующий запрос является примером использования CROSS JOIN для создания всех сочетаний сотрудников и продуктов:

SELECT emp.FirstName, prd.Name
FROM HR.Employee AS emp
CROSS JOIN Production.Product AS prd;