SQL Subquery Join with Outer Query

Sql Subquery Join With Outer Query



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

Една от най-мощните функции на SQL са подзаявките. Подзаявките са набор от вложени заявки в рамките на по-голяма и по-сложна заявка. Подзаявките ви позволяват да извличате данните или да извършвате по-сложни операции като един обект.







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



Въпреки това, друга функция, която е скрита под SQL подзаявки, е известна като присъединяване на подзаявки. Те са подобни на подзаявки; вместо това те са съединения, които ви позволяват да използвате подзаявките в рамките на външна заявка, за да обедините таблиците заедно.



Ако главата ви се върти, не се притеснявайте, защото съединяването на подзаявки може да бъде предизвикателство за овладяване, особено в началото. Въпреки това, този урок се опитва да разбие съединяванията на подзаявки в елементарни стъпки, без да оставя твърде много на случайността.





Имайте предвид, че предполагаме, че не сте нов в SQL, SQL Joins, SQL Subqueries или подобни. Ако обаче сте, проверете нашите уроци по темите, за да откриете повече.

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

Ако искате да разберете как да работите с обединения на подзаявки, научаването как да работите с външните обединения е ключов фактор.



Ако не сте запознати, SQL външното съединение ви позволява да извлечете всички редове от една таблица и съответстващите редове от втората таблица. Това е малко по-сложно от това, включително ляво външно съединение, дясно външно съединение, пълно външно съединение и т.н.

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

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

И накрая, имаме пълното външно съединение. Това обединяване връща всички редове от дясната и лявата таблици и NULL стойностите за всички несъвпадащи записи.

Съединения на SQL подзаявки

След като вече разбираме за SQL подзаявките, нека поговорим за присъединяването на подзаявки. Съединяването на подзаявки ни позволява да използваме подзаявките в рамките на външна заявка, за да обединим таблиците.

Ако питате, това ли е? Да, това е всичко, което правят присъединяванията на подзаявки.

За да демонстрирате по-добре това, вземете следния пример за синтаксис, който е демонстриран по-долу:

ИЗБЕРЕТЕ *
ОТ таблица1
ЛЯВО ВЪНШНО СЪЕДИНЕНИЕ (
ИЗБЕРЕТЕ колона1, колона2
ОТ таблица2
) AS подзаявка
НА table1.column3 = subquery.column1;


В предишния синтаксис избираме всички колони от таблица едно, като използваме ляво външно съединение, за да го обединим с подзаявка. Ролята на подзаявката е да извлече дефинираните колони от Таблица 2. След това я свързваме с Таблица 1 при условие на колона 2 от Таблица 1 и колона 1 от подзаявката.

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

Теоретично изглежда по-малко интуитивно, но нека вземем сценарий от реалния свят, като вземем базата данни Sakila.

Да предположим, че искаме да извлечем списъка с всички филми в базата данни и съответните им езици. Езиците на филмите се съхраняват в езиковата таблица, а имената на филмите се съхраняват в таблицата с филми.

Въпреки това таблицата на филма има външен ключ, наречен колона „language_id“ от езиковата таблица. Следователно можем да използваме свързване на подзаявка с ляво външно съединение, за да обединим двете таблици заедно, както е показано в следната заявка:

ИЗБЕРЕТЕ f.title, l.name КАТО език
ОТ филм f
ЛЯВО ВЪНШНО СЪЕДИНЕНИЕ (
ИЗБЕРЕТЕ language_id, име
ОТ език
) КАТО л
ВКЛ. f.language_id = l.language_id;


В предишната примерна заявка избираме колоната със заглавие от таблицата с филми и колоната с име от таблицата с езици.

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

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

Примерен изход е както следва:


Можем да направим същото и с дясно външно съединение. Синтаксисът е както следва:

ИЗБЕРЕТЕ *
ОТ таблица1
ДЯСНО ВЪНШНО СЪЕДИНЕНИЕ (
ИЗБЕРЕТЕ колона1, колона2
ОТ таблица2
) AS подзаявка
НА table1.column3 = subquery.column1;


Това се държи по подобен начин, но включва всички записи в правилната таблица, дори ако няма съответстващи записи.

Полезни неща, които трябва да знаете

Добре е да разберете, че въпреки че присъединяването на подзаявки е невероятно полезно и може да оптимизира работния ви процес, използвайте ги с повишено внимание.

Например избягвайте използването на обединения на подзаявки с голям набор от данни. Това е така, защото те могат да върнат обширните записи, които могат да повлияят на производителността на базата данни.

Помислете за използването на инструментите за анализ на заявки, преди да изпълните каквито и да било съединявания на подзаявки.

Заключение

Този урок изследва основите на работата с подзаявки и обединения на подзаявки в SQL. В края на този урок вече разбирате как да работите с обединения на подзаявки, защо може да се наложи да ги използвате и практически пример за това как могат да ви помогнат в работния процес.