SQL Subquery Join med Outer Query

Sql Subquery Join Med Outer Query



När det kommer till att arbeta med relationsdatabaser måste du behärska hur du manipulerar och kombinerar frågorna för att utföra de uppgifter du önskar. Det är därför varje relationsdatabasmotor implementerar sin smak av SQL-språket genom att försöka tillhandahålla exceptionella funktioner, effektivitet och användarvänlighet för sina användare.

En av de mest kraftfulla funktionerna i SQL är subqueries. Underfrågor är en uppsättning kapslade frågor i en större och mer komplex fråga. Underfrågor låter dig hämta data eller utföra mer komplexa operationer som en enda enhet.







Vi kan använda underfrågorna för att utföra datafiltrering, sortering, aggregering på flera tabeller och mer.



En annan funktion som är gömd under SQL-underfrågor kallas dock subquery joins. Dessa liknar underfrågor; istället är de kopplingar som gör att du kan använda underfrågorna i en yttre fråga för att sammanfoga tabellerna.



Om ditt huvud snurrar, oroa dig inte eftersom delsökningsanslutningar kan vara utmanande att bemästra, särskilt i början. Den här handledningen försöker dock bryta ned underfrågans sammanfogningar i elementära steg utan att lämna för mycket åt slumpen.





Tänk på att vi antar att du inte är ny på SQL, SQL Joins, SQL Subqueries eller liknande. Men om du är det, kolla in våra handledningar om ämnena för att upptäcka mer.

Bemästra SQL Outer Joins

Om du vill förstå hur man arbetar med subquery-kopplingar är det en nyckelfaktor att lära sig hur man arbetar med de yttre kopplingarna.



Om du inte är bekant låter en yttre SQL-koppling dig hämta alla rader från en tabell och de matchande raderna från den andra tabellen. Det är lite mer komplicerat än så, inklusive vänster yttre sammanfogning, höger yttre sammanfogning, fullständig yttre sammanfogning, etc.

I en SQL vänster yttre koppling returnerar frågan alla rader från den vänstra tabellen och de matchande raderna från den högra tabellen. Frågan inkluderar NULL-värdena i de resulterande kolumnerna om det inte finns några matchande rader i den högra tabellen.

I fallet med en höger yttre koppling returnerar frågan alla rader från den högra tabellen men bara de matchande raderna från den vänstra tabellen. På samma sätt inkluderar frågan NULL-värdena om det inte finns några matchande rader från den vänstra tabellen.

Äntligen har vi den fullständiga yttre sammanfogningen. Denna join returnerar alla rader från de högra och vänstra tabellerna och NULL-värdena för alla icke-matchande poster.

SQL Subquery Joins

Nu när vi förstår SQL-underfrågorna, låt oss prata om subquery-anslutningar. Subquery joins tillåter oss att använda subquerys i en yttre fråga för att sammanfoga tabellerna.

Om du frågar, är det så? Ja, det är allt som subquery joins gör.

För att bättre demonstrera detta, ta följande syntaxexempel som visas i följande:

VÄLJ *
FRÅN tabell 1
VÄNSTER YTTRE FOGA (
VÄLJ kolumn1, kolumn2
FRÅN tabell 2
) AS underfråga
ON table1.column3 = subquery.column1;


I föregående syntax väljer vi alla kolumner från tabell ett med hjälp av en vänster yttre koppling för att sammanfoga den med en underfråga. Underfrågans roll är att hämta de definierade kolumnerna från Tabell 2. Vi sammanfogar den sedan med Tabell 1 på villkoret för kolumn 2 från Tabell 1 och kolumn 1 från underfrågan.

Praktiskt exempel:

Teoretiskt verkar det mindre intuitivt men låt oss ta ett scenario i verkligheten genom att ta Sakila-databasen.

Anta att vi vill hämta listan över alla filmer i databasen och deras respektive språk. Filmernas språk lagras i språktabellen och filmnamnen lagras i filmtabellen.

Filmtabellen har dock en främmande nyckel som kallas kolumnen 'språk_id' från språktabellen. Därför kan vi använda en subquery join med en vänster yttre join för att sammanfoga de två tabellerna som visas i följande fråga:

VÄLJ f.titel, l.namn AS-språk
FRÅN film f
VÄNSTER YTTRE FOGA (
SELECT language_id, name
FRÅN språket
) AS l
PÅ f.language_id = l.language_id;


I föregående exempelfråga väljer vi titelkolumnen från filmtabellen och namnkolumnen från språktabellen.

Vi använder sedan en underfråga för att välja språk_id och namnkolumnen från språktabellen. Nästa steg är att sammanfoga den med filmtabellen under förutsättning att language_id från filmtabellen är lika med language_id från språktabellen.

För att säkerställa att alla filmer ingår i resultatet behöver vi använda den vänstra yttre sammanfogningen som består av alla resultat från den vänstra tabellen som i det här fallet är filmtabellen.

Ett exempel på utdata är följande:


Vi kan också göra detsamma med en höger ytterskarv. Syntaxen är som följer:

VÄLJ *
FRÅN tabell 1
HÖGER YTTRE JOIN (
VÄLJ kolumn1, kolumn2
FRÅN tabell 2
) AS underfråga
ON table1.column3 = subquery.column1;


Detta beter sig på samma sätt men inkluderar alla poster i den högra tabellen även om det inte finns några matchande poster.

Användbara saker att veta

Det är bra att förstå att även om subquery joins är otroligt användbara och kan optimera ditt arbetsflöde, använd dem med försiktighet.

Undvik till exempel att använda subquery joins med en stor datamängd. Detta beror på att de kan returnera de omfattande register som kan påverka databasens prestanda.

Överväg att använda frågeanalysverktygen innan du kör några subquery-kopplingar.

Slutsats

Den här handledningen utforskade grunderna för att arbeta med delfrågor och delfrågor i SQL. I slutet av den här handledningen förstår du nu hur du arbetar med subquery-kopplingar, varför du kan behöva använda dem och ett praktiskt exempel på hur de kan hjälpa dig i ditt arbetsflöde.