Een stapsgewijze handleiding voor het lezen en begrijpen van SQL-query's - KDnuggets

Een stapsgewijze handleiding voor het lezen en begrijpen van SQL-query's – KDnuggets

Bronknooppunt: 3091384

Een stapsgewijze handleiding voor het lezen en begrijpen van SQL-query's
Afbeelding door Freepik
 

SQL, or Standard Query Language, is a programming language for managing and manipulating data within a relational database management system (RDBMS). It’s a standard language used in many companies to help businesses access data smoothly. Because it’s widely used, the employment usually cites SQL as one of the necessary skills. That’s why it’s essential to learn about SQL.

Een van de meest voorkomende problemen voor mensen bij het leren van SQL is het begrijpen van de query's, vooral wanneer iemand anders ze schrijft. We zouden als team in de bedrijven werken en moeten vaak hun SQL-query's lezen en begrijpen. We moeten dus oefenen met het deconstrueren van de SQL-query's en ze begrijpen.

In dit artikel wordt stapsgewijs een proces doorlopen om SQL-query's te lezen en te begrijpen. Hoe doen we dat? Laten we erop ingaan.

Het eerste dat we moeten doen als we een SQL-query tegenkomen, is de algemene bedoeling van de SQL-query's begrijpen. De algemene bedoeling betekent niet dat we de structuur van de zoekopdracht volledig kennen; het gaat meer om de totale stromen.

We moeten de standaard SQL-query's begrijpen om de algemene SQL-query te begrijpen. De meeste SQL-query's beginnen met de SELECT clausule en volg met de NU clausule. Vanaf daar worden de vragen meestal gevolgd door AANMELDEN, WAAR, GROEP DOOR, BESTEL DOOR, en HEBBEN clausules.

De bovenstaande clausules zijn standaard in de SQL-query's die we moeten begrijpen. Voor elke clausule zijn hun functies:

  1. SELECT: Welke kolommen moeten uit de tabel worden gehaald
  2. NU: uit welke tabel de gegevens afkomstig zijn
  3. AANMELDEN: Combineer tabellen met de opgegeven ID
  4. WAAR: Gegevensfilter op basis van de voorwaarde
  5. GROEP DOOR: Organiseer de gegevens op basis van de waarde van de kolom en zorg ervoor dat de aggregatiefunctie kan worden uitgevoerd.
  6. BESTELLING DOOR: Rangschik de volgorde van de gegevensresultaten op basis van de specifieke kolom
  7. HEBBEN: de filtervoorwaarde voor de aggregatiefunctie waarmee niet kan worden opgegeven WAAR

Dit zijn de standaardclausules en wat u in het begin zou moeten vinden als u de algemene SQL-querystructuur begrijpt. Laten we de voorbeeldcode gebruiken om verder te leren.

SELECT 
  customers.name, 
  purchases.product, 
  SUM(price) as total_price 
FROM 
  purchases 
  JOIN customers ON purchases.cust_id = customers.id 
WHERE 
  purchases.category = 'kitchen' 
GROUP BY 
  customers.name, 
  purchases.product 
HAVING 
  total_price > 10000 
ORDER BY 
  total_price DESC;

 

Als u naar de bovenstaande vraag kijkt, probeer dan de standaardclausules te identificeren. De clausule geeft u inzicht in welke gegevens worden geselecteerd (SELECT), waar het vandaan komt (NU en AANMELDEN), en de voorwaarde (WAAR, GROEP DOOR, BESTELLING DOOR en HEBBEN). 

Als u de bovenstaande vraag leest, krijgt u bijvoorbeeld inzicht in het volgende:

  1. we proberen drie verschillende soorten gegevens te verkrijgen: de naam uit een tabel met de naam klanten, het product uit een tabel met de naam aankopen, en de aggregatie van prijskolommen die niet identificeren waar de tabel vandaan komt en met de alias total_price (informatie uit de clausule SELECT). 
  1. De algemene gegevens zouden afkomstig zijn van inkoop- en klantentabellen die samenkomen met behulp van de cust_id-kolom uit aankopen en de id-kolom uit de klanttabel (Informatie uit clausule VAN) en AANMELDEN). 
  1. We zouden alleen de gegevens selecteren met de categoriekolomwaarde in de aankooptabel als 'keuken' (Informatie uit clausule WAAR), 
  1. groep voor de aggregatiefunctie met de naam en productkolom die uit de betreffende tabel kwamen (Information from clausule GROEP DOOR), 
  1. wordt ook gefilterd uit de resultaatsom van de aggregatiefunctie waarbij de total_price groter is dan 10000 (informatie uit de clausule HEBBEN), En 
  1. bestel de gegevens aflopend volgens de total_price (informatie uit clausule BESTELLING DOOR).

Dat is de algemene SQL-querystructuur die u moet kennen en identificeren. Van daaruit kunnen we de geavanceerde query verder onderzoeken. Laten we verder gaan met de volgende stap.

Er zou een tijd komen dat je een complexe vraag zou tegenkomen waar er zo veel zijn SELECT Er bestaan ​​clausules in dezelfde query. In dit geval moeten we het eindresultaat van de zoekopdracht of de uiteindelijke (eerste) SELECT die u in de zoekopdracht ziet. De sleutel is om te weten wat de query-uitvoer wil zijn.

Laten we een complexere code gebruiken, zoals hieronder.

WITH customerspending AS (
  SELECT 
    customers.id, 
    SUM(purchases.price) as total_spending 
  FROM 
    purchases 
    JOIN customers ON purchases.cust_id = customers.id 
  GROUP BY 
    customers.id
) 
SELECT 
  c.name, 
  pd.product, 
  pd.total_product_price, 
  cs.total_spending 
FROM 
  (
    SELECT 
      purchases.cust_id, 
      purchases.product, 
      SUM(purchases.price) as total_product_price 
    FROM 
      purchases 
    WHERE 
      purchases.category = 'kitchen' 
    GROUP BY 
      purchases.cust_id, 
      purchases.product 
    HAVING 
      SUM(purchases.price) > 10000
  ) AS pd 
  JOIN customers c ON pd.cust_id = c.id 
  JOIN customerspending cs ON c.id = cs.id 
ORDER BY 
  pd.total_product_price DESC;

 

De vraag lijkt nu complexer en langer, maar de eerste focus zou op de finale moeten liggen KIES, die lijkt te proberen de totale uitgaven- en aankoopgeschiedenis van de klant te achterhalen. Probeer te beoordelen wat het eindresultaat wil zijn en breek het van daaruit op.

We hebben het inzicht dat het resultaat uit de zoekopdrachten moet komen. Het volgende deel is om te kijken wat de voorwaarden zijn voor de finale SELECT Zijn. De voorwaardenclausule, inclusief WAAR, GROEP DOOR, BESTELLING DOOR en HEBBEN waren degenen die het algehele gegevensresultaat beheersten. 

Probeer de voorwaarden van onze zoekopdracht te lezen en te begrijpen, dan zullen we het uiteindelijke resultaat van onze zoekopdracht beter begrijpen. In onze vorige SQL-query is de laatste voorwaarde bijvoorbeeld alleen de BESTELLING DOOR. Dit betekent dat het eindresultaat wordt gerangschikt op basis van de totale productprijs in aflopende volgorde. 

Als u de laatste voorwaarden kent, kunt u een aanzienlijk deel van de zoekopdracht en de algehele bedoeling van de zoekopdracht begrijpen.

Ten slotte moeten we begrijpen waar de gegevens vandaan komen. Nadat we weten welke gegevens we moeten selecteren en wat de voorwaarden zijn om ze te verkrijgen, moeten we de bron begrijpen. De laatste AANMELDEN Deze clausule zou ons inzicht geven in de interactie tussen de tabellen en de gegevensstroom.

Uit de vorige complexe query blijkt bijvoorbeeld dat we Join twee keer hebben uitgevoerd. Dit betekent dat we voor het eindresultaat minimaal drie gegevensbronnen hebben gebruikt. Deze informatie zou in de latere stappen nodig zijn om beter te begrijpen hoe elke gegevensbron tot stand komt, vooral wanneer de gegevensbron afkomstig is van de subquery.

Nadat we hebben begrepen hoe het eindresultaat zou moeten zijn en waar het vandaan komt, moeten we de details nader bekijken. Vanaf hier zouden we teruggaan naar elke subquery en begrijpen waarom ze zo zijn gestructureerd.

We proberen ze echter niet in de top-down-structuren te bekijken. In plaats daarvan moeten we proberen te kijken naar de subquery's die dichter bij het eindresultaat liggen, en naar de subquery's gaan die het verst van het eindresultaat verwijderd zijn. Uit het bovenstaande codevoorbeeld moeten we eerst proberen deze code te begrijpen:

SELECT 
  purchases.cust_id, 
  purchases.product, 
  SUM(purchases.price) as total_product_price 
FROM 
  purchases 
WHERE 
  purchases.category = 'kitchen' 
GROUP BY 
  purchases.cust_id, 
  purchases.product 
HAVING 
  SUM(purchases.price) > 10000

 

Vervolgens gaan we naar de verste code, namelijk deze:

WITH customerspending AS (
  SELECT 
    customers.id, 
    SUM(purchases.price) as total_spending 
  FROM 
    purchases 
    JOIN customers ON purchases.cust_id = customers.id 
  GROUP BY 
    customers.id
)

 

We kunnen het denkproces van de auteur duidelijk volgen als we elke subquery opsplitsen, van de subquery die het dichtst bij het resultaat ligt tot de subquery die het verst ligt. 

Probeer het bovenstaande proces te herhalen als u hulp nodig heeft bij het begrijpen van elke subquery. Met enige oefening zult u een betere ervaring hebben met het lezen en begrijpen van de vraag.

Het lezen en begrijpen van SQL-query's is een vaardigheid die iedereen in het moderne tijdperk zou moeten hebben, aangezien elk bedrijf ermee te maken heeft. Door de volgende stapsgewijze handleiding te gebruiken, krijgt u een betere tijd om de complexe SQL-query's te begrijpen. De stappen omvatten:

  1. Begrijp de algemene SQL-querystructuur
  2. Begrijp de definitieve selectie
  3. Begrijp de clausule over de definitieve voorwaarden
  4. Begrijp de laatste verbinding
  5. Omgekeerde volgorde lezen en herhalen

 
 

Cornellius Yudha Wijaya is een data science assistent-manager en dataschrijver. Terwijl hij fulltime bij Allianz Indonesia werkt, deelt hij graag Python- en Data-tips via sociale media en schrijvende media.

Tijdstempel:

Meer van KDnuggets