Vodnik po korakih za branje in razumevanje poizvedb SQL - KDnuggets

Vodnik po korakih za branje in razumevanje poizvedb SQL – KDnuggets

Izvorno vozlišče: 3091384

Vodnik po korakih za branje in razumevanje poizvedb SQL
Slike, ki jih Freepik
 

SQL ali Standard Query Language je programski jezik za upravljanje in obdelavo podatkov v sistemu za upravljanje relacijskih baz podatkov (RDBMS). To je standardni jezik, ki se uporablja v številnih podjetjih za pomoč podjetjem pri nemotenem dostopu do podatkov. Ker se pogosto uporablja, zaposlitev običajno navaja SQL kot eno od potrebnih znanj. Zato je bistvenega pomena, da se naučimo o SQL.

Ena od pogostih težav ljudi pri učenju SQL je razumevanje poizvedb, predvsem ko jih napiše druga oseba. V podjetjih bi delali kot ekipa in pogosto moramo brati in razumeti njihove poizvedbe SQL. Zato moramo vaditi dekonstrukcijo poizvedb SQL in jih razumeti.

Ta članek bo vodil skozi postopek po korakih za branje in razumevanje poizvedb SQL. Kako to naredimo? Pojdimo k temu.

Prva stvar, ki jo moramo narediti, ko naletimo na poizvedbo SQL, je razumeti splošni namen poizvedb SQL. Splošni namen ne pomeni, da v celoti poznamo strukturo poizvedbe; gre bolj za splošne tokove.

Razumeti moramo standardne poizvedbe SQL, da bi razumeli splošno poizvedbo SQL. Večina poizvedb SQL se začne z IZBIRA klavzulo in sledite z OD klavzula. Če nadaljujemo od tam, poizvedbam najpogosteje sledi PRIDRUŽITE, KJE, GROUP BY, NAROČI PO, in HAVING klavzule.

Zgornji členi so standardni v poizvedbah SQL, ki jih moramo razumeti. Za vsako klavzulo so njihove funkcije:

  1. IZBIRA: Katere stolpce je treba vzeti iz tabele
  2. OD: iz katere tabele so podatki
  3. PRIDRUŽITE: Združi tabele z navedenim identifikatorjem
  4. KJE: Podatkovni filter glede na stanje
  5. GROUP BY: Organizirajte podatke na podlagi vrednosti stolpca in omogočite izvajanje funkcije združevanja.
  6. ORDER BY: Razporedite vrstni red rezultatov podatkov glede na določen stolpec
  7. HAVING: Pogoj filtra za funkcijo združevanja, ki ga ni mogoče podati z KJE

To so standardni členi in tisto, kar bi morali najti na začetku, ko razumete splošno strukturo poizvedbe SQL. Za nadaljnje učenje uporabimo primer kode.

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;

 

Ko pogledate zgornjo poizvedbo, poskusite prepoznati standardne klavzule. Klavzula bi vam zagotovila razumevanje, kateri podatki so izbrani (IZBIRA), od koder je (OD in PRIDRUŽITE), in pogoj (KJE, GROUP BY, ORDER BYin HAVING). 

Če na primer preberete zgornjo poizvedbo, boste razumeli naslednje:

  1. poskušamo pridobiti tri različne vrste podatkov: ime iz tabele, imenovane kupci, izdelek iz tabele, imenovane nakupi, in združevanje stolpcev s cenami, ki ne identificirajo, od kod je tabela, in z vzdevkom total_price (podatki iz klavzule IZBIRA). 
  1. Celotni podatki bi izhajali iz tabel nakupov in strank, ki se združijo z uporabo stolpca cust_id iz nakupov in stolpca id iz tabele strank (informacije iz klavzule OD) in PRIDRUŽITE). 
  1. Podatke z vrednostjo stolpca kategorije v tabeli nakupov bi izbrali samo kot 'kuhinja' (Informacije iz klavzule KJE), 
  1. skupino za funkcijo združevanja z imenom in stolpcem izdelka, ki izvira iz ustrezne tabele (Informacije iz klavzule GROUP BY), 
  1. filtriran tudi iz vsote rezultatov funkcije združevanja, kjer je skupna_cena večja od 10000 (informacije iz klavzule HAVING), In 
  1. razporedi podatke padajoče glede na total_price (podatki iz klav ORDER BY).

To je splošna struktura poizvedbe SQL, ki jo morate poznati in prepoznati. Od tam lahko raziskujemo dlje od napredne poizvedbe. Nadaljujmo z naslednjim korakom.

Prišel bi čas, ko bi naleteli na zapleteno poizvedbo, kjer je toliko IZBIRA klavzule obstajajo v isti poizvedbi. V tem primeru bi morali razumeti končni rezultat poizvedbe ali končni (prvi) IZBIRA vidite v poizvedbi. Ključno je vedeti, kakšen želi biti rezultat poizvedbe.

Uporabimo bolj zapleteno kodo, kot je spodnja.

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;

 

Poizvedba se zdaj zdi bolj zapletena in daljša, vendar bi se morali najprej osredotočiti na končno IZBERI, za katerega se zdi, da poskuša ustvariti kupčevo celotno zgodovino porabe in nakupov. Poskusite oceniti, kakšen želi biti končni rezultat, in ga od tam razčlenite.

Imamo vpogled v rezultat, ki bi moral biti iz poizvedb. Naslednji del je videti, kakšni so pogoji za finale IZBIRA so. Klavzula o pogojih, vključno KJE, GROUP BY, ORDER BYin HAVING so bili tisti, ki so nadzorovali skupni rezultat podatkov. 

Poskusite prebrati in razumeti pogoje naše poizvedbe in bolje bomo razumeli končni rezultat naše poizvedbe. Na primer, v naši prejšnji poizvedbi SQL je končni pogoj le ORDER BY. To pomeni, da bi bil končni rezultat razvrščen po skupni ceni izdelka v padajočem vrstnem redu. 

Poznavanje končnih pogojev bi vam pomagalo razumeti pomemben del poizvedbe in splošni namen poizvedbe.

Nazadnje moramo razumeti, od kod prihajajo podatki. Ko vemo, katere podatke je treba izbrati, in pogoje za njihovo pridobitev, moramo razumeti vir. Konec PRIDRUŽITE klavzula bi nam dala razumevanje medsebojnega delovanja tabel in pretoka podatkov.

Na primer, prejšnja kompleksna poizvedba kaže, da smo Join izvedli dvakrat. To pomeni, da smo za končni rezultat uporabili vsaj tri vire podatkov. Te informacije bi bile potrebne v poznejših korakih za nadaljnje razumevanje, kako pride do posameznega vira podatkov, zlasti če vir podatkov prihaja iz podpoizvedbe.

Ko razumemo, kakšen bi moral biti končni rezultat in od kod prihaja, si moramo podrobneje ogledati podrobnosti. Od tu naprej bi se vrnili v vsako podpoizvedbo in razumeli, zakaj so tako strukturirane.

Vendar jih ne poskušamo gledati v strukturah od zgoraj navzdol. Namesto tega bi morali poskusiti pogledati podpoizvedbe, ki so bližje končnemu rezultatu, in se pomakniti do tiste, ki je najbolj oddaljena od končnega rezultata. Iz zgornjega primera kode bi morali najprej poskusiti razumeti to kodo:

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

 

Nato se premaknemo na najbolj oddaljeno kodo, ki je ta:

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
)

 

Miselni proces avtorja lahko jasno izsledimo, ko vsako podpoizvedbo razdelimo od tiste, ki je bližje rezultatu, do najbolj oddaljene. 

Poskusite ponoviti zgornji postopek, če potrebujete pomoč pri razumevanju vsake podpoizvedbe. Z nekaj vaje boste imeli boljšo izkušnjo pri branju in razumevanju poizvedbe.

Branje in razumevanje SQL poizvedb je veščina, ki bi jo v moderni dobi moral imeti vsak, saj se z njimi ukvarja vsako podjetje. Z uporabo naslednjega vodnika po korakih bi bolje razumeli kompleksne poizvedbe SQL. Koraki vključujejo:

  1. Razumevanje splošne strukture poizvedbe SQL
  2. Razumeti končno izbiro
  3. Razumeti klavzulo o končnih pogojih
  4. Razumeti končno združitev
  5. Branje v obratnem vrstnem redu in ponovitev

 
 

Cornellius Yudha Wijaya je vodja podatkovne znanosti in pisec podatkov. Medtem ko dela s polnim delovnim časom pri Allianz Indonesia, rad deli nasvete o Pythonu in podatkih prek družbenih medijev in pisnih medijev.

Časovni žig:

Več od KDnuggets