Использование перекрестных соединений
Перекрестное соединение — это просто декартово произведение двух таблиц. С помощью синтаксиса 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;