Описание тега cross-join

CROSS JOIN - это операция соединения, которая возвращает декартово произведение строк из таблиц в соединении. Другими словами, он будет создавать строки, которые объединяют каждую строку из первой таблицы с каждой строкой из второй таблицы. В отличие от других операторов JOIN, он не позволяет указывать предложение соединения. Однако вы можете указать предложение WHERE в операторе SELECT.

CROSS JOIN - это операция JOIN, которая производит декартово произведение двух таблиц. В отличие от других операторов JOIN, он не позволяет указывать предложение соединения. Однако вы можете указать предложение WHERE в операторе SELECT.

Примеры

Следующие операторы SELECT эквивалентны:

SELECT *
FROM TEACHER
CROSS JOIN COURSE

SELECT *
FROM TEACHER, COURSE;

Следующие операторы SELECT эквивалентны:

SELECT *
FROM TEACHER
CROSS JOIN COURSE
WHERE TEACHER.ID = COURSE.TEACHER_ID

SELECT *
FROM TEACHER
INNER JOIN COURSE
ON TEACHER.ID = COURSE.TEACHER_ID

Операцию CROSS JOIN можно заменить операцией INNER JOIN, в которой предложение соединения всегда принимает значение true (например, 1=1). Его также можно заменить подзапросом. Таким образом, эквивалентные запросы будут такими:

SELECT * FROM TEACHER LEFT OUTER JOIN
COURSE INNER JOIN UNIVERSITY ON 1=1
ON TEACHER.ID = UNIVERSITIES.TEACHER_ID
WHERE UNIVERSITY.COUNTRY = 'US'

SELECT FROM TEACHER LEFT OUTER JOIN
(SELECT FROM COURSE, UNIVERSITY) S
ON TEACHER.ID = S.TEACHER_ID
WHERE S.COUNTRY = 'US'

Ссылки

Перекрестное соединение в Oracle