В SQL Соединением является на самом деле Пересечение? И это - также связь или “Поперечное Объединение”?

Я всегда думал о Соединении в SQL как некоторая связь между двумя таблицами.

Например,

select e.name, d.name from employees e, departments d 
  where employees.deptID = departments.deptID

В этом случае это связывает две таблицы, чтобы показать каждому сотруднику с названием отдела вместо идентификатора отдела. И отчасти как "связь" или "Объединение" боком".

Но после приобретения знаний о внутреннем объединении по сравнению с внешним объединением это показывает, что Соединение (Внутреннее объединение) является на самом деле пересечением.

Например, когда одна таблица имеет идентификатор 1, 2, 7, 8, в то время как другая таблица имеет идентификатор 7 и 8 только, способ, которым мы получаем пересечение:

select * from t1, t2 where t1.ID = t2.ID

получить две записи "7 и 8". Таким образом, это - на самом деле пересечение.

Таким образом, у нас есть "Пересечение" 2 таблиц. Сравните это с операцией "Объединения" на 2 таблицах. Соединение может считаться "Пересечением"? Но что относительно "соединения" или "поперечного объединения" аспект его?

9
задан nopole 24 April 2010 в 20:43
поделиться

2 ответа

Соединение "ссылки" или э-э ... объединяет строки из двух таблиц. Я думаю, что это то, что вы подразумеваете под «боковым союзом», хотя я лично считаю, что это ужасный способ выразить это словами. Но есть разные типы объединений, которые делают несколько разные вещи:

  • Внутреннее соединение действительно является пересечением.
  • Полное внешнее соединение - это объединение.

Эта страница в блоге Джеффа Этвуда описывает другие возможности.

2
ответ дан 4 December 2019 в 23:05
поделиться

Вы на правильном пути; строки, возвращаемые INNER JOIN , удовлетворяют условиям соединения. Но это похоже на пересечение только потому, что вы используете равенство в своем условии соединения, применяемом к столбцам из каждой таблицы.

Также имейте в виду, что ПЕРЕСЕЧЕНИЕ уже является операцией 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 .

5
ответ дан 4 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: