Pradžia / Programavimas / SQL excel naudotojams

SQL excel naudotojams

Kodėl SQL verta išmokti, jei jau moki Excel

Dauguma žmonių, dirbančių su duomenimis, pradeda nuo Excel. Ir tai visiškai logiška – Excel yra intuityvus, vizualus, ir leidžia greitai pamatyti rezultatą. Bet kažkuriuo momentu ateina riba. Failas pradeda kabinti, filtrai nebeveikia taip greitai, o bandymas sujungti kelias lenteles virsta kančia su VLOOKUP ir INDEX/MATCH formulėmis, kurios vis tiek grąžina klaidą.

Čia į žaidimą įeina SQL – Structured Query Language. Tai ne programavimo kalba tradicine prasme, bet užklausų kalba, skirta dirbti su duomenų bazėmis. Gera žinia: jei moki Excel, SQL išmokti bus daug lengviau, nei manai. Daugelis konceptų tiesiog atitinka vienas kitą, tik sintaksė skiriasi.

Šiame straipsnyje nebus teorijos dėl teorijos. Kalbėsime apie tai, kaip SQL konceptai atitinka tai, ką jau darai Excel, ir kaip pradėti naudoti SQL praktiškai – net jei niekada nekūrei duomenų bazės.

Lentelė = Spreadsheet: kaip SQL mato duomenis

Pirmiausia reikia suprasti, kaip SQL organizuoja duomenis. Duomenų bazėje yra lentelės (tables) – ir tai iš esmės tas pats, ką tu vadini „sheet” arba „lentele” Excel. Kiekviena lentelė turi stulpelius (columns) ir eilutes (rows). Skamba pažįstamai?

Skirtumas tas, kad SQL lentelės yra griežtesnės struktūros. Kiekvienas stulpelis turi tipą: tekstas (VARCHAR arba TEXT), skaičiai (INT, FLOAT), datos (DATE, DATETIME). Excel leidžia tame pačiame stulpelyje turėti ir skaičių, ir tekstą, ir datą – SQL to neleidžia. Iš pradžių tai gali atrodyti kaip apribojimas, bet iš tikrųjų tai yra privalumas, nes duomenys visada bus nuoseklūs.

Kitas svarbus skirtumas – SQL duomenų bazėje gali būti daug lentelių, ir jos gali būti sujungtos tarpusavyje. Excel tai irgi galima daryti su Power Query arba VLOOKUP, bet SQL tai daro natūraliai ir daug efektyviau.

Praktinis patarimas: kai pradedi dirbti su SQL, galvok apie kiekvieną lentelę kaip apie atskirtą Excel sheet’ą, kuriame duomenys yra švarūs ir vienodo tipo. Jei turi Excel failą su keliais sheet’ais, kiekvienas sheet’as gali tapti atskira SQL lentele.

SELECT – tai tavo filtras ir stulpelių pasirinkimas viename

Pati pagrindinė SQL komanda yra SELECT. Ji atsakinga už tai, ką nori pamatyti – kokius stulpelius, iš kokios lentelės. Paprasčiausias pavyzdys:

SELECT vardas, pavardė, el_paštas
FROM klientai;

Excel analogas: tu turi lentelę su 20 stulpelių, bet nori matyti tik tris. Ką darai? Slepi stulpelius arba kopijuoji tik reikiamus į naują sheet’ą. SQL tai padaro viena eilute.

Jei nori visų stulpelių, naudoji žvaigždutę:

SELECT *
FROM klientai;

Tai atitinka tai, kai tiesiog žiūri į visą Excel lentelę. Bet praktikoje SELECT * naudoti nerekomenduojama – ypač kai lentelėje yra šimtai stulpelių arba milijonai eilučių. Geriau visada nurodyti konkrečius stulpelius, kurių reikia. Tai ir greitesnė užklausa, ir aiškesnis kodas.

Taip pat galima kurti naujus „stulpelius” tiesiog užklausoje – be jokių pakeitimų originalioje lentelėje:

SELECT vardas, pavardė, kaina * 1.21 AS kaina_su_pvm
FROM produktai;

Tai kaip Excel formulė stulpelyje – skaičiuoji reikšmę, bet originalūs duomenys nesikeičia. AS raktažodis leidžia pavadinti tą naują stulpelį.

WHERE, ORDER BY ir LIMIT – filtrai ir rūšiavimas be pelės

Excel turi filtrus – spaudžiamas mygtukas, pasirenkamos reikšmės, ir lentelė susitraukia. SQL tai daro per WHERE sąlygą:

SELECT *
FROM užsakymai
WHERE suma > 100 AND statusas = 'apmokėtas';

Tai atitinka Excel filtrą, kur suma didesnė nei 100 ir statusas lygus „apmokėtas”. Logika ta pati, tik rašoma tekstu. Galima naudoti AND, OR, NOT – kaip loginiai operatoriai Excel formulėse.

Keletas naudingų WHERE variantų, kuriuos verta žinoti:

  • WHERE miestas IN ('Vilnius', 'Kaunas', 'Klaipėda') – tai kaip Excel filtras su keliais pasirinktais variantais
  • WHERE vardas LIKE 'Jonas%' – ieško visų, kurių vardas prasideda „Jonas” (% yra pakaitalas bet kokiam simboliui)
  • WHERE data BETWEEN '2024-01-01' AND '2024-12-31' – datos intervalas
  • WHERE el_paštas IS NULL – randa eilutes, kur el. paštas nenurodytas

Rūšiavimas – ORDER BY:

SELECT vardas, suma
FROM užsakymai
ORDER BY suma DESC;

DESC reiškia mažėjančia tvarka, ASC – didėjančia (tai numatytoji reikšmė). Excel analogas – spaudžiamas „Sort” mygtukas.

LIMIT – labai naudingas, kai lentelėje yra milijonai eilučių ir nori tik pažiūrėti, kaip atrodo duomenys:

SELECT *
FROM klientai
LIMIT 100;

Tai kaip žiūrėti tik į pirmas 100 eilučių Excel, bet SQL atveju duomenų bazė net neįkelia visų duomenų – ji sustoja kai tik suranda 100 eilučių. Tai labai taupo laiką ir resursus.

GROUP BY ir agreguojančios funkcijos – Pivot Table be pelytės

Čia daugeliui Excel naudotojų atsiveria akys. Pivot Table yra vienas galingiausių Excel įrankių – galima greitai suskaičiuoti sumas, vidurkius, kiekius pagal grupes. SQL tai daro per GROUP BY ir agreguojančias funkcijas.

Palyginimas:

Excel Pivot Table: eilutėse – „Miestas”, reikšmėse – „Suma” (Sum of Suma)

SQL ekvivalentas:

SELECT miestas, SUM(suma) AS bendra_suma
FROM užsakymai
GROUP BY miestas;

Pagrindinės agreguojančios funkcijos:

  • SUM() – suma (kaip SUM Excel)
  • AVG() – vidurkis (kaip AVERAGE Excel)
  • COUNT() – kiekis (kaip COUNTA Excel)
  • MAX() ir MIN() – maksimumas ir minimumas

Galima grupuoti pagal kelis stulpelius:

SELECT miestas, produkto_kategorija, COUNT(*) AS užsakymų_kiekis, AVG(suma) AS vidutinė_suma
FROM užsakymai
GROUP BY miestas, produkto_kategorija
ORDER BY užsakymų_kiekis DESC;

Tai jau gana sudėtinga Pivot Table, bet SQL tai parašoma per 4 eilutes.

Dar vienas svarbus dalykas – HAVING. Tai kaip WHERE, bet taikoma po grupavimo. Pavyzdžiui, nori matyti tik tuos miestus, kur buvo daugiau nei 50 užsakymų:

SELECT miestas, COUNT(*) AS užsakymų_kiekis
FROM užsakymai
GROUP BY miestas
HAVING COUNT(*) > 50;

Dažna klaida pradedantiesiems – bandyti naudoti WHERE vietoj HAVING po GROUP BY. WHERE filtruoja eilutes prieš grupavimą, HAVING – po grupavimo. Ši skirtis svarbi.

JOIN – VLOOKUP, bet be ašarų

Jei kada nors naudojai VLOOKUP arba INDEX/MATCH, žinai, kaip tai gali tapti sudėtinga. SQL JOIN yra tas pats konceptas, bet daug galingesnis ir lankstesnis.

Tarkime, turi dvi lenteles:

  • užsakymai – su stulpeliais: užsakymo_id, kliento_id, suma
  • klientai – su stulpeliais: kliento_id, vardas, miestas

Nori sujungti jas ir matyti užsakymus su kliento vardu:

SELECT u.užsakymo_id, k.vardas, k.miestas, u.suma
FROM užsakymai u
JOIN klientai k ON u.kliento_id = k.kliento_id;

Čia u ir k yra aliasai – trumpiniai lentelių pavadinimams. ON nurodo, pagal ką jungiamos lentelės – tai kaip VLOOKUP raktas.

JOIN tipai, kuriuos reikia žinoti:

  • INNER JOIN (arba tiesiog JOIN) – grąžina tik tas eilutes, kurios turi atitikmenį abiejose lentelėse. Jei kliento_id nėra klientų lentelėje, tas užsakymas nebus rodomas.
  • LEFT JOIN – grąžina visas eilutes iš kairės lentelės, net jei nėra atitikmens dešinėje. Trūkstamos reikšmės bus NULL. Tai dažniausiai naudojamas JOIN tipas.
  • RIGHT JOIN – atvirkščiai nei LEFT JOIN. Praktikoje naudojamas rečiau.
  • FULL OUTER JOIN – grąžina viską iš abiejų lentelių, net jei nėra atitikmens.

Praktinis patarimas: kai abejoji, kurį JOIN naudoti, pradėk nuo LEFT JOIN. Jis saugesnis, nes neprarandi eilučių iš pagrindinės lentelės. Jei rezultatuose matai daug NULL reikšmių – tai signalas, kad duomenys nesutampa, ir tai savaime yra vertinga informacija.

Kaip pradėti praktiškai – įrankiai ir pirmieji žingsniai

Teorija – gerai, bet reikia kažkur praktikuotis. Gera žinia: nereikia jokio serverio ar sudėtingos konfigūracijos, kad pradėtum.

SQLite ir DB Browser for SQLite – geriausias pasirinkimas pradedantiesiems. SQLite yra lengva duomenų bazė, kuri veikia kaip vienas failas. DB Browser for SQLite yra nemokama programa su grafiniu interfeisu – galima kurti lenteles, importuoti CSV failus ir rašyti užklausas. Tai idealus būdas paimti savo Excel duomenis, eksportuoti kaip CSV, importuoti į SQLite ir pradėti eksperimentuoti.

DBeaver – universalus duomenų bazių klientas, veikia su beveik visomis duomenų bazėmis (MySQL, PostgreSQL, SQLite ir kt.). Nemokama versija yra labai galinga. Jei kada nors dirbsi su realiais serveriais, šis įrankis pravers.

Online platformos: SQLZoo, Mode Analytics SQL Tutorial, W3Schools SQL – visos turi interaktyvias užduotis, kur rašai SQL tiesiai naršyklėje ir matai rezultatą. Puiku mokytis be jokios konfigūracijos.

Google BigQuery arba Amazon Athena – jei dirbi su dideliais duomenimis debesyje, šios platformos leidžia rašyti SQL užklausas prieš milžiniškus duomenų rinkinius. BigQuery turi nemokamą kvotą, kuri pakanka eksperimentavimui.

Praktinis žingsnis šiandien: paimk bet kurį savo Excel failą, eksportuok jį kaip CSV, importuok į DB Browser for SQLite ir pabandyk parašyti SELECT užklausą. Tai užtruks 15 minučių ir iš karto pajusi, kaip veikia SQL.

Kai SQL tampa kasdienybe: nuo Excel prie duomenų inžinerijos

Išmokus SQL pagrindus, atsiveria platesnis pasaulis. SQL nėra tik duomenų skaitymo įrankis – galima ir rašyti duomenis (INSERT, UPDATE, DELETE), kurti lenteles (CREATE TABLE), ir net automatizuoti procesus per stored procedures arba triggers.

Bet svarbiau tai, kad SQL žinios yra universalios. MySQL, PostgreSQL, Microsoft SQL Server, SQLite, BigQuery – visos šios sistemos naudoja SQL su nedideliais skirtumais. Išmokęs vieną, suprasi visas kitas. Tai labai skiriasi nuo Excel, kur kiekviena versija gali turėti skirtingų niuansų.

Dar vienas dalykas, kurį verta paminėti – SQL ir Excel nebūtinai konkuruoja. Dažnai geriausia strategija yra naudoti abu: SQL duomenų ištraukimui ir apdorojimui, Excel arba Power BI vizualizacijai. Daugelis analitikų dirba būtent taip – SQL parašo užklausą, eksportuoja rezultatą, ir toliau dirba su juo Excel arba Tableau.

Jei dirbi su Python arba planuoji mokytis, SQL žinios labai pravers – biblioteka pandas turi panašią logiką, o SQLAlchemy leidžia rašyti SQL tiesiai Python kode. Viskas susijungia.

Galiausiai – SQL mokymasis yra vienas geriausių investicijų laiko atžvilgiu, jei dirbi su duomenimis. Pagrindus galima išmokti per savaitę, o jau po mėnesio galima dirbti su realiais duomenimis efektyviau nei su Excel. Nereikia bijoti, kad tai „programavimas” – SQL yra labiau kaip labai galinga užklausų kalba, ir jei moki formuluoti klausimus apie savo duomenis, moki SQL. Tiesiog dar nežinai sintaksės.