Соединение подзапроса SQL с внешним запросом

Soedinenie Podzaprosa Sql S Vnesnim Zaprosom



Когда дело доходит до работы с реляционными базами данных, вам необходимо научиться манипулировать запросами и комбинировать их для выполнения желаемых задач. Вот почему каждое ядро ​​реляционной базы данных реализует свой вариант языка SQL, пытаясь предоставить исключительные возможности, эффективность и простоту использования для своих пользователей.

Одной из самых мощных функций SQL являются подзапросы. Подзапросы — это набор вложенных запросов внутри более крупного и сложного запроса. Подзапросы позволяют извлекать данные или выполнять более сложные операции как единое целое.







Мы можем использовать подзапросы для фильтрации данных, сортировки, агрегирования нескольких таблиц и многого другого.



Однако есть еще одна функция, скрытая в подзапросах SQL, известная как соединения подзапросов. Они похожи на подзапросы; вместо этого они представляют собой соединения, которые позволяют вам использовать подзапросы во внешнем запросе для объединения таблиц.



Если у вас кружится голова, не волнуйтесь, потому что соединения подзапросов могут быть сложными в освоении, особенно в начале. Однако в этом учебнике делается попытка разбить соединения подзапросов на элементарные шаги, не оставляя слишком много на волю случая.





Имейте в виду, что мы предполагаем, что вы не новичок в SQL, объединениях SQL, подзапросах SQL и т. д. Однако, если да, ознакомьтесь с нашими руководствами по темам, чтобы узнать больше.

Овладейте внешними соединениями SQL

Если вы хотите понять, как работать с соединениями подзапросов, изучение того, как работать с внешними соединениями, является ключевым фактором.



Если вы не знакомы, внешнее соединение SQL позволяет получить все строки из одной таблицы и соответствующие строки из второй таблицы. Это немного сложнее, включая левое внешнее соединение, правое внешнее соединение, полное внешнее соединение и т. д.

В левом внешнем объединении SQL запрос возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Запрос включает значения NULL в результирующие столбцы, если в правильной таблице нет соответствующих строк.

В случае правого внешнего соединения запрос возвращает все строки из правой таблицы, но только совпадающие строки из левой таблицы. Точно так же запрос включает значения NULL, если в левой таблице нет соответствующих строк.

Наконец, у нас есть полное внешнее соединение. Это соединение возвращает все строки из правой и левой таблиц и значения NULL для любых несовпадающих записей.

Соединения подзапросов SQL

Теперь, когда мы разобрались с подзапросами SQL, давайте поговорим о соединениях подзапросов. Соединения подзапросов позволяют нам использовать подзапросы во внешнем запросе для объединения таблиц.

Если вы спросите, так ли это? Да, это все, что делают соединения подзапросов.

Чтобы лучше продемонстрировать это, возьмите следующий пример синтаксиса, который демонстрируется ниже:

ВЫБИРАТЬ *
ИЗ таблицы1
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ (
ВЫБЕРИТЕ столбец1, столбец2
ИЗ таблицы2
) подзапрос AS
ON table1.column3 = subquery.column1;


В предыдущем синтаксисе мы выбираем все столбцы из первой таблицы, используя левое внешнее соединение, чтобы соединить ее с подзапросом. Роль подзапроса заключается в извлечении определенных столбцов из таблицы 2. Затем мы соединяем его с таблицей 1 при условии наличия столбца 2 из таблицы 1 и столбца 1 из подзапроса.

Практический пример:

Теоретически это кажется менее интуитивным, но давайте рассмотрим реальный сценарий, взяв базу данных Sakila.

Предположим, мы хотим получить список всех фильмов в базе данных и их соответствующие языки. Языки фильмов хранятся в таблице языков, а названия фильмов — в таблице фильмов.

Однако таблица фильмов имеет внешний ключ, называемый столбцом «language_id» из таблицы языков. Следовательно, мы можем использовать соединение подзапроса с левым внешним соединением, чтобы соединить две таблицы вместе, как показано в следующем запросе:

ВЫБЕРИТЕ f.title, l.name КАК язык
ИЗ фильма ф
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ (
ВЫБЕРИТЕ идентификатор_языка, имя
С языка
) КАК л
ПО f.language_id = l.language_id;


В предыдущем примере запроса мы выбираем столбец title из таблицы фильмов и столбец name из языковой таблицы.

Затем мы используем подзапрос для выбора столбца language_id и имени из таблицы языков. Следующим шагом является объединение его с таблицей фильмов при условии, что идентификатор языка из таблицы фильмов равен идентификатору языка из таблицы языков.

Чтобы убедиться, что все фильмы включены в результат, нам нужно использовать левое внешнее соединение, которое состоит из всех результатов из левой таблицы, которая в данном случае является таблицей фильмов.

Пример вывода выглядит следующим образом:


Мы также можем сделать то же самое с правым внешним соединением. Синтаксис следующий:

ВЫБИРАТЬ *
ИЗ таблицы1
ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ (
ВЫБЕРИТЕ столбец1, столбец2
ИЗ таблицы2
) подзапрос AS
ON table1.column3 = subquery.column1;


Это работает аналогично, но включает все записи в правой таблице, даже если нет соответствующих записей.

Полезные вещи, которые нужно знать

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

Например, избегайте использования соединений подзапросов с большим набором данных. Это связано с тем, что они могут возвращать обширные записи, которые могут повлиять на производительность базы данных.

Рассмотрите возможность использования инструментов анализа запросов перед выполнением любого соединения подзапроса.

Заключение

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