SQL Simplified: Udarbejdelse af modulære og forståelige forespørgsler med CTE'er - KDnuggets

SQL Simplified: Udarbejdelse af modulære og forståelige forespørgsler med CTE'er – KDnuggets

Kildeknude: 3084928

SQL Simplified: Udarbejdelse af modulære og forståelige forespørgsler med CTE'er
Billede af forfatter 
 

I dataverdenen står SQL stadig som lingua franca for interaktion med databaser. 

Stadig i dag står det som et af de mest brugte sprog til at håndtere data og betragtes stadig som et must-have for enhver god dataprofessionel. 

Alle, der har arbejdet med komplekse SQL-forespørgsler, ved dog, at de hurtigt kan blive til uhåndterlige dyr – svære at læse, vedligeholde eller genbruge. 

Derfor er det i dag ikke nok at kende SQL, vi skal være gode til at lave forespørgsler. Og dette er faktisk en form for kunst. 

Det er her Common Table Expressions (CTE'er) kommer i spil, og transformerer kunsten at skrive forespørgsler til et mere struktureret og tilgængeligt håndværk.

Så lad os sammen finde ud af, hvordan man koder læsbare og genbrugelige forespørgsler.

Hvis du undrer dig over, hvad en CTE er, er du i den rigtige artikel. 

Et Common Table Expression (CTE) er et midlertidigt resultatsæt, der er defineret inden for eksekveringsomfanget af en enkelt SQL-sætning. 

 

De er tidsmæssige tabeller, der kan refereres til mange gange inden for en enkelt forespørgsel, og som typisk bruges til at forenkle komplekse joinforbindelser og underforespørgsler med det ultimative mål at øge læsbarheden og organiseringen af ​​SQL-kode.

Så de er et kraftfuldt værktøj til at opdele komplekse forespørgsler i enklere dele.

Her er grunden til, at du bør overveje at bruge CTE'er:

  • modularitet: Du kan nedbryde kompleks logik i læsbare bidder.
  • Læsbarhed: Det gør det lettere at forstå strømmen af ​​SQL-forespørgsler.
  • Genanvendelighed: CTE'er kan refereres flere gange i en enkelt forespørgsel, så gentagelser undgås.

Magien begynder med WITH-sætningen, som går forud for din hovedforespørgsel og definerer forskellige tidstabeller (CTE'er) med aliaser.

Derfor skal vi altid starte vores forespørgsel med kommandoen "WITH" for at begynde at definere egne CTE'er. Ved at bruge CTE'er kan vi opdele enhver kompleks SQL-forespørgsel i: 

– Små tidstabeller, der beregner relaterede variabler. 

– En finaletabel, der kun tager de variabler, vi ønsker, som vores output.

Og det er netop den MODULÆRE tilgang, vi ønsker i enhver kode!

 

SQL Simplified: Udarbejdelse af modulære og forståelige forespørgsler med CTE'er
Billede af forfatter
 

Så brug af CTE'er i vores forespørgsler giver os mulighed for at:

– Udfør en tidsmæssig tabel EN GANG og referer til den FLERE gange.

– Forbedre læsbarheden og forenkle kompleks logik.

– Fremme kodegenanvendelighed og modulært design.

For at forstå dette bedre kan vi tage et praktisk eksempel på Airbnb-opslag i Barcelona. 

Forestil dig, at vi ønsker at analysere resultaterne af fortegnelser efter kvarter og sammenligne det med byens samlede præstationer. Du skal samle oplysninger om kvarterer, individuelle lejligheder, værter og priser.

For at eksemplificere dette vil vi bruge InsideAirbnb tabel over Barcelona, ​​som ser ud som følger: 

 

SQL Simplified: Udarbejdelse af modulære og forståelige forespørgsler med CTE'er
 

En naiv tilgang kan få dig til at oprette indlejrede underforespørgsler, der hurtigt bliver et vedligeholdelsesmareridt som det som følger:

Kode efter forfatter

I stedet kan vi bruge CTE'er til at opdele vores forespørgsel i logiske sektioner - hver definerer en brik i puslespillet.

  • Nabolagsdata: Opret en CTE for at opsummere data efter nabolag.
  • Lejlighed og værtsinformation: Definer CTE'er for detaljer om lejligheder og værter.
  • Metrics for hele byen: Endnu en CTE til at samle statistikker på byniveau til sammenligning.
  • Afsluttende samling: Kombiner CTE'erne i en endelig SELECT-sætning for at præsentere dataene sammenhængende.

 

SQL Simplified: Udarbejdelse af modulære og forståelige forespørgsler med CTE'er
Billede af forfatter
 

Og vi ender med følgende forespørgsel:

Kode efter forfatter

Ved at bruge CTE'er omdanner vi en potentielt monstrøs enkelt forespørgsel til et organiseret sæt af datamoduler. Denne modulære tilgang gør SQL-koden mere intuitiv og tilpasningsdygtig til ændringer. 

Hvis der dukker nye krav op, kan du justere eller tilføje CTE'er uden at revidere hele forespørgslen.

Når du har etableret dine CTE'er, kan du genbruge dem til at udføre sammenlignende analyser. For eksempel, hvis du ønsker at sammenligne nabolagsdata med bydækkende metrics, kan du referere til dine CTE'er i en række JOIN-operationer. 

Dette sparer ikke kun tid, men holder også din kode effektiv, da du ikke behøver at gentage den samme forespørgsel to gange!

CTE'er er et vidnesbyrd om princippet om, at lidt struktur rækker langt i programmering. Ved at anvende CTE'er kan du skrive klarere, mere vedligeholdelsesvenlige og genbrugelige SQL-forespørgsler. 

Det strømliner forespørgselsudviklingsprocessen og gør det lettere at kommunikere kompleks datahentningslogik til andre.

Husk, næste gang du er ved at gå i gang med at skrive et multi-join, indlejret underforespørgselsmonster, skal du overveje at nedbryde det med CTE'er. 

Dit fremtidige jeg - og alle andre, der kan læse din kode - vil takke dig.
 
 

Josep Ferrer er en analyseingeniør fra Barcelona. Han er uddannet i fysikingeniør og arbejder i øjeblikket inden for datavidenskab, der anvendes på menneskelig mobilitet. Han er en deltidsindholdsskaber med fokus på datavidenskab og teknologi. Du kan kontakte ham på LinkedIn, Twitter or Medium.

Tidsstempel:

Mere fra KDnuggets