Полу-соединение против подзапросов - PullRequest
0 голосов
/ 11 октября 2019

В чем разница между полусоединениями и подзапросом? В настоящее время я прохожу курс по этому вопросу в DataCamp, и мне трудно провести различие между ними.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Я не думаю, что подзапрос и полусоединение являются чем-то похожим. Подзапрос не более интересен, чем запрос, который используется внутри другого запроса:

select * -- this is often called the "outer" query
from (
   select columnA -- this is the subquery inside the parentheses
   from mytable
   where columnB = 'Y'
)

Полу-соединение - это концепция , основанная на соединении. Конечно, объединение таблиц объединит обеих таблиц и возвратит объединенные строки на основе критериев объединения. Оттуда вы выбираете нужные столбцы из любой таблицы, основываясь на дальнейших критериях (и, конечно, на том, что еще вы хотите сделать). Понятие полусоединения - это когда вы хотите вернуть строки только из первой таблицы , но вам нужна вторая таблица, чтобы решить, какие строки вернуть. Пример: вы хотите вернуть людей в классе:

select p.FirstName, p.LastName, p.DOB
from people p
inner join classes c on c.pID = p.pID
where c.ClassName = 'SQL 101'
group by p.pID

Это завершает концепцию полусоединения. Мы только возвращаем столбцы из первой таблицы (люди). Использование группы по необходимо для концепции полусоединения, потому что истинное соединение может возвращать повторяющиеся строки из первой таблицы (в зависимости от критериев объединения). Приведенный выше пример не часто называют полусоединением и не является наиболее типичным способом его достижения. Следующий запрос является более распространенным методом выполнения полусоединения:

select FirstName, LastName, DOB
from people 
where pID in (select pID
              from class
              where ClassName = 'SQL 101'
             )

Здесь нет формального соединения. Но мы используем 2-ю таблицу, чтобы определить, какие строки из первой таблицы нужно вернуть. Это все равно что сказать , если мы сделали присоединением второй таблицы к первой таблице, какие строки из первой таблицы будут соответствовать? Для производительности обычно предпочтительнее существует:

select FirstName, LastName, DOB
from people p
where exists (select pID
              from class c
              where c.pID = p.pID
                 and c.ClassName = 'SQL 101'
             )

На мой взгляд, это самый прямой способ понять полусоединение. Формального объединения по-прежнему нет, но вы можете увидеть идею объединения, на которую намекнет использование прямого сопоставления столбца pID первой таблицы со столбцом pID второй таблицы. Конечная нота . Последние два запроса над каждым используют подзапрос для реализации концепции полусоединения.

0 голосов
/ 12 октября 2019

Соединение или полусоединение требуется всякий раз, когда вы хотите объединить две или более записей сущностей на основе некоторых общих условных атрибутов.

В отличие от этого, подзапрос требуется, когда вы хотите выполнить поиск или ссылку ната же таблица или другие таблицы

Короче говоря, если вам необходимо добавить дополнительные ссылочные столбцы к существующим атрибутам таблиц, тогда переходите к объединению, если вы хотите просмотреть записи из той же таблицы или других таблиц, носохраняя те же самые существующие столбцы, что и o / p, переходите к подзапросу

Кроме того, в случае полусоединения он может действовать / использоваться как подзапрос, поскольку в большинстве случаев мы фактически не присоединяемся к нужной таблице, вместо этого мы выполняем проверкучерез подзапрос, чтобы ограничить записи в существующем, следовательно, semi-join, но только то, что он не является подзапросом сам по себе

...