Чем отличаются подсчеты в этих sql-соединениях?

#sql #join

#sql #Присоединиться

Вопрос:

Таблица A: (6 записей со значением ‘1’) 1 1 1 1 1 1

Таблица B: (2 записи со значением ‘1’) 1 1

Выберите * из TableA левое соединение TableB в TableA.col1 = TableB.col1 ?

Выберите * из TableB левое соединение TableA в TableB.col1 = TableA.col1?

Выберите * из таблицы внутреннего соединения TableB в TableA.col1 = TableB.col1?

Выберите * из таблицы полного внешнего соединения TableB в TableA.col1 = TableB.col1?

Комментарии:

1. Какой результат вы пытаетесь получить?

2. Попробуйте запустить их.

Ответ №1:

Для таких данных все запросы эквивалентны внутреннему соединению, потому что (левое и полное) внешние соединения касаются строк, существующих в одной таблице, а не в другой, что не в вашем случае.

Более того, внутренние соединения с одним и тем же повторяющимся значением фактически ведут себя как декартово произведение. Следовательно, результат равен 6 * 2 = 12 строкам значений 1,1 во всех случаях.