SQL förenklat: Skapa modulära och förståeliga frågor med CTE:er - KDnuggets

SQL förenklad: Skapa modulära och förståeliga frågor med CTE:er – KDnuggets

Källnod: 3084928

SQL förenklad: Skapa modulära och förståeliga frågor med CTE
Bild av författare 
 

I datavärlden står SQL fortfarande som lingua franca för att interagera med databaser. 

Fortfarande idag står det som ett av de mest använda språken för att hantera data och anses fortfarande vara ett måste för alla bra dataproffs. 

Men alla som har arbetat med komplexa SQL-frågor vet att de snabbt kan förvandlas till svårhanterliga bestar – svåra att läsa, underhålla eller återanvända. 

Det är därför det idag inte räcker att kunna SQL, vi måste vara bra på att skapa frågor. Och det här är faktiskt en typ av konst. 

Det är här Common Table Expressions (CTE) kommer in i bilden, och förvandlar konsten att skriva frågeformulär till ett mer strukturerat och lättillgängligt hantverk.

Så låt oss tillsammans upptäcka hur man kodar läsbara och återanvändbara frågor.

Om du undrar vad en CTE är så är du i rätt artikel. 

Ett Common Table Expression (CTE) är en temporär resultatuppsättning som definieras inom exekveringsomfånget för en enda SQL-sats. 

 

De är temporala tabeller som kan refereras många gånger inom en enda fråga och används vanligtvis för att förenkla komplexa kopplingar och underfrågor, med det slutliga målet att öka läsbarheten och organisationen av SQL-kod.

Så de är ett kraftfullt verktyg för att bryta ner komplexa frågor i enklare delar.

Här är anledningen till att du bör överväga att använda CTE:er:

  • modularitet: Du kan bryta ner komplex logik i läsbara bitar.
  • Läsbarhet: Det gör det lättare att förstå flödet av SQL-frågor.
  • Återanvändbarhet: CTE:er kan refereras flera gånger i en enda fråga, vilket undviker upprepning.

Magin börjar med WITH-satsen, som föregår din huvudfråga och definierar olika tidstabeller (CTE) med alias.

Därför måste vi alltid starta vår fråga med kommandot "WITH" för att börja definiera egna CTE:er. Genom att använda CTE:er kan vi dela upp alla komplexa SQL-frågor i: 

– Små tidstabeller som beräknar relaterade variabler. 

– En finaltabell som bara tar de variabler som vi vill ha som utdata.

Och det är just det MODULÄRA tillvägagångssättet vi vill ha i vilken kod som helst!

 

SQL förenklad: Skapa modulära och förståeliga frågor med CTE
Bild av författare
 

Så genom att använda CTE i våra frågor kan vi:

– Kör en tidstabell EN GÅNG och referera till den FLERA gånger.

– Förbättra läsbarheten och förenkla komplex logik.

– Främja återanvändbarhet av kod och modulär design.

För att förstå detta bättre kan vi ta ett praktiskt exempel på Airbnb-annonser i Barcelona. 

Föreställ dig att vi vill analysera resultaten av listor per stadsdel och jämföra den med stadens övergripande prestanda. Du måste samla information om stadsdelar, enskilda lägenheter, värdar och priser.

För att exemplifiera detta kommer vi att använda InsideAirbnb Tabell över Barcelona, ​​som ser ut så här: 

 

SQL förenklad: Skapa modulära och förståeliga frågor med CTE
 

Ett naivt tillvägagångssätt kan leda till att du skapar kapslade underfrågor som snabbt blir en underhållsmardröm som den som följer:

Kod efter författare

Istället kan vi använda CTE:er för att dela upp vår fråga i logiska sektioner - var och en definierar en pusselbit.

  • Grannskapsdata: Skapa en CTE för att sammanfatta data efter grannskap.
  • Information om lägenhet och värd: Definiera CTE för detaljer om lägenheter och värdar.
  • Stadsomfattande statistik: Ytterligare en CTE för att samla in statistik på stadsnivå för jämförelse.
  • Slutmontering: Kombinera CTE:erna i en sista SELECT-sats för att presentera data på ett enhetligt sätt.

 

SQL förenklad: Skapa modulära och förståeliga frågor med CTE
Bild av författare
 

Och vi skulle sluta med följande fråga:

Kod efter författare

Genom att använda CTE:er förvandlar vi en potentiellt monstruös enskild fråga till en organiserad uppsättning datamoduler. Detta modulära tillvägagångssätt gör SQL-koden mer intuitiv och anpassningsbar till förändringar. 

Om nya krav dyker upp kan du justera eller lägga till CTE:er utan att se över hela frågan.

När du har etablerat dina CTE:er kan du återanvända dem för att utföra jämförande analyser. Om du till exempel vill jämföra grannskapsdata mot stadsövergripande mätvärden kan du referera till dina CTE:er i en serie JOIN-operationer. 

Detta sparar inte bara tid utan håller också din kod effektiv, eftersom du inte behöver upprepa samma fråga två gånger!

CTE är ett bevis på principen att lite struktur räcker långt i programmering. Genom att använda CTE:er kan du skriva tydligare, mer underhållsbara och återanvändbara SQL-frågor. 

Det effektiviserar frågeutvecklingsprocessen och gör det lättare att kommunicera komplex datahämtningslogik till andra.

Kom ihåg att nästa gång du är på väg att ge dig i kast med att skriva ett multi-join, kapslat subquery monster, överväg att bryta ner det med CTEs. 

Ditt framtida jag – och alla andra som kan läsa din kod – kommer att tacka dig.
 
 

Josep Ferrer är en analysingenjör från Barcelona. Han tog examen i fysikteknik och arbetar för närvarande inom datavetenskapsområdet tillämpat på mänsklig rörlighet. Han är en innehållsskapare på deltid med fokus på datavetenskap och teknologi. Du kan kontakta honom på LinkedIn, Twitter or Medium.

Tidsstämpel:

Mer från KDnuggets