SQLShack (Dansk)

I denne artikel lærer vi SQL multiple sammenføjningskoncept og forstærker vores læring med temmelig enkle eksempler, som forklares med illustrationer. I relationelle databaser lagres data i tabeller. Uden tvivl og oftest har vi brug for et resultatsæt, der dannes ved at kombinere data fra flere tabeller. Sammenføjningerne giver os mulighed for at kombinere data fra to eller flere tabeller, så vi er i stand til at forbinde data fra tabellerne, så vi let kan hente data fra flere tabeller. Du kan spørge dig selv, hvor mange forskellige typer sammenføjninger der findes i SQL Server. Svaret er, at der er fire hovedtyper af sammenføjninger, der findes i SQL Server. Først og fremmest vil vi kort beskrive dem ved hjælp af Venn-diagramillustrationer:

  • Indre sammenføjning returnerer de rækker, der matcher i begge tabeller

  • Venstre sammenføjning returnerer alle rækker fra venstre tabel

  • Right join returnerer alle rækker fra højre tabel

  • Fuld sammenføjning returnerer hele rækker fra begge tabeller

Hvis du mangler viden om SQL-sammenføjningskonceptet i SQL Server kan du se oversigten over SQL-sammenføjningstyper og artikel om tutorial.

Efter denne korte forklarende beskrivelse af SQL-sammenføjningstyperne gennemgår vi de mange sammenføjninger.

Hvad er SQL flere sammenføjninger?

Flere sammenføjninger kan beskrives som følger; multiple join er en forespørgsel, der indeholder de samme eller forskellige join-typer, som bruges mere end én gang. Således får vi muligheden for at kombinere flere datatabeller for at overvinde relationelle databaseproblemer.

Eksempelscenarie

Green-Tree-virksomheden lancerede en ny kampagne til nytår og fremsatte forskellige tilbud til sine online-kunder. Som et resultat af deres kampagne lykkedes det dem at konvertere nogle tilbud til salg. I de følgende eksempler afdækker vi de nye års kampagnedataoplysninger for Green-Tree-virksomheden.

Virksomheden gemmer disse kampagnedataoplysninger i de følgende tabeller. Nu opretter vi disse tabeller gennem følgende forespørgsel og udfylder dem med nogle dummy-data:

Hvordan SQL multiple-sammenføjninger fungerer?

Forretningsproblem: Hvilke kunder var interesserede i dette nytår kampagne?

For at besvare dette spørgsmål er vi nødt til at finde ud af de matchede rækker til alle tabellerne, fordi nogle kunder ikke modtog et e-mail-tilbud, og nogle tilbud kunne ikke konverteres til et salg. Følgende Venn-diagram hjælper os med at finde ud af de matchede rækker, som vi har brug for. Kort sagt skal resultatet af denne forespørgsel være de krydsende rækker i alle tabeller i forespørgslen. Det gråfarvede område specificerer disse rækker i Venn-diagrammet:

SQL multiple-join-tilgangen hjælper os med at deltage i onlinekunder , ordrer og salgstabeller. Som vist i Venn-diagrammet skal vi matche rækker med alle tabeller. Af denne grund kombinerer vi alle tabeller med en indre sammenføjningsklausul. Følgende forespørgsel returnerer et resultatsæt, der ønskes af os, og vil besvare spørgsmålet:

1
2
3
4
5
6
7
8

VÆLG kundenavn, brugerdefineret, brugerdefineret mail, salestotal
FRA onlinecustomers AS oc
INNER JOIN
ordrer AS o
ON oc.customerid = o.customerid
INDRE MEDLEM
salg AS s
PÅ o.orderId = s.orderId

Først analyserer vi forespørgslen. En indre sammenføjningsklausul, der er mellem onlinekunder og ordretabeller, afledte de matchede rækker mellem disse to tabeller. Den anden indre sammenføjningsklausul, der kombinerer salgstabellen, afledte de matchede rækker fra det forrige resultatsæt. Den følgende farvede tabelillustration hjælper os med at forstå de sammenføjede tabeller, der matcher i forespørgslen. De gulfarvede rækker angiver matchede data mellem onlinekunder og ordrer. På den anden side findes kun de blå farvede rækker i salgstabellerne, så forespørgselsresultatet bliver blå farvede rækker:

Resultatet af forespørgslen vil se sådan ud:

Brug af forskellige sammenføjningstyper i SQL flere sammenføjninger

Forretningsproblem: Hvilke tilbud kunne ikke konverteres til et salg?

Vi kan bruge de forskellige typer sammenføjninger i en enkelt forespørgsel, så vi kan løse forskellige relationelle databaseproblemer.I dette eksempel har vi brug for alle rækker i ordretabellen, som matches med onlinekundetabeller. På den anden side findes disse rækker ikke i salgstabellen. Følgende Venn-diagram hjælper os med at finde ud af de matchede rækker, som vi har brug for. Det gråfarvede område angiver rækker, som vil være output af forespørgslen:

I det første trin skal vi kombinere onlinekunder og ordretabeller gennem den indre sammenføjningsklausul, fordi indre sammenføjning returnerer alle de matchede rækker mellem onlinekunder og ordretabeller. I det andet trin kombinerer vi ordretabellen til salgstabellen gennem venstre sammenføjning og filtrerer derefter nulværdierne, fordi vi skal fjerne de rækker, der er gemt af salgstabellen:

1
2
3
4
5
6
7
8
9

VÆLG kundenavn, customercity, customermail, ordertotal, salestotal
FRA onlinecustomers AS c
INNER JOIN
orders AS o
ON c.customerid = o.customerid
LEFT JOIN
salg AS s
ON o.orderId = s.orderId
HVOR s.salesId IS NULL

Resultatet af forespørgslen vil se sådan ud:

Quiz

Q uestion: Generer venligst den rigtige forespørgsel i henhold til nedenstående Venn-diagram.

Svar: Som vi har lært, tillader den fulde sammenføjning os for at returnere alle rækker fra de kombinerede tabeller. Den besvarede forespørgsel vil være som følger:

1
2
3
4
5
6
7
8

VÆLG kundenavn, customercity, customermail, ordertotal, salestotal
FRA onlinecustomers AS c
FULL JOIN
ordrer AS o
ON c.customerid = o.customerid
FULDTILMELD
salg AS s
ON o.orderId = s.orderId

Konklusion

I denne artikel fokuserede vi på tilgangen til SQL multiple sammenføjninger og lærte den med detaljerede eksempler. Flere sammenføjninger giver os mulighed for at kombinere mere end to tabeller, så vi kan løse forskellige problemer i det relationsdatabasesystem. Desuden så vi, hvordan vi kunne bruge forskellige sammenføjningstyper i en enkelt forespørgsel.

  • Forfatter
  • Seneste indlæg
Esat Erkec er en SQL Server-professionel, der startede sin karriere for 8+ år siden som softwareudvikler. Han er en SQL Server Microsoft Certified Solutions Expert.
Det meste af hans karriere har været fokuseret på SQL Server Database Administration og udvikling. Hans nuværende interesser er databaseadministration og Business Intelligence. Du kan finde ham på LinkedIn.
Se alle indlæg af Esat Erkec

Seneste indlæg af Esat Erkec (se alle)
  • Kom godt i gang med SQL-programmering – 3. februar 2021
  • Sådan læses en udførelse plan med alle detaljer – 28. januar 2021
  • SQL SELECT TOP-oversigtsoversigt og eksempler – 25. januar 2021

Leave a Reply

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *