Вы на правильном пути; строки, возвращаемые INNER JOIN
- это строки, которые удовлетворяют условиям соединения. Но это похоже на пересечение только потому, что вы используете равенство в своем условии соединения, примененном к столбцам из каждой таблицы.
Также имейте в виду, что INTERSECTION
уже является операцией SQL и имеет другое значение - и это не то же самое, что JOIN
.
SQL JOIN
может создать строку нового типа, в которой есть все столбцы из обеих соединенных таблиц. Например: col4, col5 и col6 не существуют в таблице A, но они существуют в результате объединения с таблицей B:
SELECT a.col1, a.col2, a.col3, b.col4, b.col5, b.col6
FROM A INNER JOIN B ON a.col2=b.col5;
SQL INTERSECTION
возвращает строки, общие для двух отдельных таблиц, в которых уже должны быть одинаковые столбцы.
SELECT col1, col2, col3 FROM A
INTERSECT
SELECT col1, col2, col3 FROM B;
Это приводит к тому же результату, что и следующее соединение:
SELECT a.col1, a.col2, a.col3
FROM A INNER JOIN B ON a.col1=b.col1 AND a.col2=b.col2 AND a.col3=b.col3;
Не каждая база данных поддерживает оператор INTERSECTION
.