Duomenų bazės valdo praktiškai viską – nuo tavo mėgstamos internetinės parduotuvės iki bankinės aplikacijos telefone. Ir už viso to slypi SQL. Jei kada nors pagalvojai, kad tai kažkokia paslaptinga programuotojų kalba, prieinama tik tiems, kurie baigę informatikos studijas – skubu nuraminti, taip nėra. SQL yra viena iš tų technologijų, kurią gali pramokti per savaitgalį ir jau pirmadienį naudoti darbe ar pet projekte.
Šiame straipsnyje eisime per pagrindus – nuo to, kas apskritai yra SQL, iki konkrečių užklausų, kurias galėsi iškart išbandyti. Nesigilinsime į akademinę teoriją, o labiau į praktiką, kokia ji atrodo realiame gyvenime.
Kas per žvėris tas SQL ir kodėl juo verta domėtis
SQL (Structured Query Language) – tai kalba, skirta bendrauti su reliacinėmis duomenų bazėmis. Paprastai tariant, jei duomenys tavo sistemoje sudėti į lenteles su stulpeliais ir eilutėmis (panašiai kaip Excel, tik daug galingiau), tikėtina, kad ten valdo koks nors SQL variantas – MySQL, PostgreSQL, SQL Server ar SQLite.
Įdomiausia tai, kad SQL sintaksė tarp skirtingų sistemų skiriasi minimaliai. Išmokęs rašyti užklausas MySQL aplinkoje, be didesnių problemų persijungsi į PostgreSQL. Tai reta situacija technologijų pasaulyje, kur išmokta kalba galioja beveik universaliai.
Kodėl verta mokytis būtent dabar? Nes duomenų analitikai, backend programuotojai, produktų vadovai, net rinkodaros specialistai vis dažniau turi mokėti savarankiškai ištraukti duomenis iš bazės, užuot kiekvieną kartą prašę programuotojo sugeneruoti ataskaitą. SQL – tai įgūdis, kuris tiesiogine prasme taupo laiką ir daro tave nepriklausomu nuo kitų komandos narių.
Pirmieji žingsniai: SELECT, FROM ir kaip tai iš viso veikia
Įsivaizduok lentelę pavadinimu klientai, kurioje yra stulpeliai vardas, email, miestas. Norint pamatyti visus duomenis, rašai:
SELECT * FROM klientai;Žvaigždutė čia reiškia „visi stulpeliai“. Jei tau reikia tik konkrečių duomenų, pavyzdžiui, vardų ir el. paštų, tiesiog surašai juos:
SELECT vardas, email FROM klientai;Štai ir visa magija – SQL užklausa iš esmės skaitoma kaip sakinys anglų kalba: „pasirink šitą iš ano“. Būtent dėl to daugelis pradedančiųjų taip greitai pajunta pasitikėjimą – kalba nėra abstrakti, ji intuityvi.
Vienas patarimas iš karto: rašyk raktinius žodžius didžiosiomis raidėmis (SELECT, FROM, WHERE), o lentelių bei stulpelių pavadinimus – mažosiomis. Tai nėra privaloma taisyklė, bet kodas tampa žymiai lengviau skaitomas, o tai svarbu, kai po pusmečio grįši prie savo paties parašytos užklausos ir bandysi suprasti, ką ten sugalvojai.
WHERE sąlyga: kaip filtruoti duomenis, o ne skaityti viską iš eilės
Realiame gyvenime retai kada reikia visų lentelės eilučių. Dažniausiai ieškai konkrečios informacijos – klientų iš Vilniaus, užsakymų virš tam tikros sumos, ar vartotojų, kurie neprisijungė daugiau nei mėnesį. Čia į pagalbą ateina WHERE:
SELECT vardas, miestas
FROM klientai
WHERE miestas = 'Vilnius';Galima naudoti ir daugiau sąlygų vienu metu, sujungiant jas su AND arba OR:
SELECT * FROM uzsakymai
WHERE suma > 100 AND statusas = 'apmoketas';Kelis kartus pastebėjau, kad pradedantieji painioja AND su OR logika – ypač kai sąlygų yra keletas. Paprasta taisyklė: AND susiaurina rezultatų skaičių (abi sąlygos privalo galioti), o OR praplečia (pakanka bent vienos). Kai suklysti pirmą kartą (o suklysi tikrai), nesijaudink – tai normalu, netgi patyrę duomenų analitikai kartais persekioja loginę klaidą pusvalandį prieš suprasdami, kad pamiršo skliaustelius.
Rikiavimas, grupavimas ir kodėl GROUP BY yra tavo naujas geriausias draugas
ORDER BY leidžia sutvarkyti rezultatus norima tvarka – pagal abėcėlę, pagal datą, pagal sumą:
SELECT * FROM uzsakymai
ORDER BY suma DESC;DESC reiškia mažėjančia tvarka, ASC – didėjančia (ir tai numatytoji reikšmė, jei nieko nenurodysi).
O štai GROUP BY – tai jau kitas lygis. Įsivaizduok, kad nori sužinoti, kiek užsakymų padarė kiekvienas miestas atskirai. Vienoje eilutėje to nepamatysi, todėl duomenis reikia sugrupuoti:
SELECT miestas, COUNT(*) as uzsakymu_skaicius
FROM uzsakymai
GROUP BY miestas;Čia atsiranda ir agregacinės funkcijos – COUNT(), SUM(), AVG(), MAX(), MIN(). Jos leidžia atlikti skaičiavimus su grupėmis duomenų, o ne su pavieniais įrašais. Būtent GROUP BY kartu su agregacinėmis funkcijomis dažniausiai naudojamas verslo ataskaitose – pardavimų suvestinėse, mėnesio apyvartos skaičiavimuose ir panašiai.
Svarbi detalė: jei naudoji GROUP BY, visi stulpeliai SELECT dalyje, kurie nėra agreguoti funkcijomis, privalo būti ir GROUP BY sąraše. Tai viena dažniausių klaidų pradedantiesiems – bandoma parodyti stulpelį, kurio duomenų bazė tiesiog nežino, kaip sugrupuoti.
JOIN: kai duomenys išsibarstę per kelias lenteles
Realiose duomenų bazėse retai viskas telpa vienoje lentelėje. Klientai bus vienoje, užsakymai – kitoje, prekės – trečioje. Ir čia prasideda tikroji SQL galia – JOIN.
SELECT klientai.vardas, uzsakymai.suma
FROM klientai
JOIN uzsakymai ON klientai.id = uzsakymai.kliento_id;Šita užklausa sujungia dvi lenteles per bendrą raktą (šiuo atveju – kliento ID) ir parodo, kuris klientas kiek išleido. Yra keli JOIN tipai – INNER JOIN (numatytasis, rodo tik sutampančius įrašus), LEFT JOIN (rodo visus iš kairės lentelės, net jei atitikmens dešinėje nėra), RIGHT JOIN ir FULL JOIN.
Kai tik pradedi, INNER ir LEFT JOIN tikriausiai užteks 90% atvejų. LEFT JOIN ypač naudingas, kai nori pamatyti, pavyzdžiui, visus klientus, net jei jie dar niekada nieko neužsakė – tokiu atveju uzsakymai stulpeliai bus tiesiog tušti (NULL), bet klientas vis tiek bus rezultatų sąraše.
Dažniausios klaidos, kurias daro absoliučiai visi
Prieš pereinant prie praktinių patarimų, verta paminėti keletą klaidų, kurios kartojasi tarp pradedančiųjų taip dažnai, kad jau tampa savotišku ritualu:
- Kabučių maišymas – tekstinės reikšmės rašomos su viengubomis kabutėmis (
'Vilnius'), o ne dvigubomis. Kai kuriose sistemose dvigubos kabutės naudojamos stulpelių pavadinimams, todėl painiava garantuota. - Kablelio pamiršimas prieš FROM arba tarp stulpelių – klaida, kurią daryti visi, net po metų praktikos.
- DELETE arba UPDATE be WHERE sąlygos – tai jau rimtesnė klaida, nes gali ištrinti arba perrašyti visą lentelę per vieną komandą. Patarimas: prieš vykdant DELETE ar UPDATE su WHERE, pirmiausia paleisk tą pačią sąlygą su SELECT ir pasižiūrėk, ar tikrai gauni tuos įrašus, kuriuos nori pakeisti.
- NULL reikšmių ignoravimas – WHERE stulpelis = NULL niekada neveiks, nes NULL yra ne reikšmė, o „nežinoma“ būsena. Reikia naudoti
WHERE stulpelis IS NULL.
Kur praktikuotis, kai teorija jau aiški
Skaityti apie SQL ir realiai jį naudoti – du skirtingi dalykai. Rekomenduočiau keletą kelio taškų:
Pirma, pasiimk kokį nors nemokamą pavyzdinį duomenų bazės rinkinį (pavyzdžiui, klasikinis „Sakila“ duomenų bazės pavyzdys MySQL sistemoje arba „Chinook“ muzikos parduotuvės duomenys) ir pabandyk pats sugalvoti klausimus – kiek klientų iš vienos šalies, kuris albumas populiariausias, koks vidutinis užsakymo dydis. Tada bandyk juos atsakyti SQL užklausomis.
Antra, įsidiek SQLite arba naudokis internetiniais SQL smėlio dėžėmis, kur nereikia jokio sudėtingo diegimo – tiesiog naršyklėje rašai užklausas ir iškart matai rezultatą. Tai puikiai tinka pirmoms savaitėms, kol dar nesi apsisprendęs, kokią duomenų bazių sistemą naudosi rimtesniems projektams.
Trečia – neišvengiamai teks susidurti su realiais, netvarkingais duomenimis. Švarūs mokomieji pavyzdžiai gerai, bet realybėje bus dublikatų, tuščių laukų, keistų formatų. Būtent tada ir supranti, kodėl egzistuoja funkcijos kaip COALESCE(), DISTINCT ar TRIM().
Vietoj apibendrinimo: ką daryti su visu tuo toliau
Jei perskaitei iki šios vietos ir jauti, kad informacijos šiek tiek per daug – tai visiškai normalu. SQL mokymasis primena dviračio vairavimą: teorija atrodo aiški popieriuje, bet tikras supratimas ateina tik kai pats sėdi ir bandai, dažnai suklysdamas.
Mano rekomendacija būtų tokia: nesistenk išmokti visko iš karto. Pirmą savaitę skirk vien SELECT ir WHERE komandoms – kol jos taps automatiškos, kol nebereikės galvoti apie sintaksę. Antrą savaitę pridėk GROUP BY ir agregacines funkcijas. Trečią – imkis JOIN, nes tai iš tiesų yra tema, kur dauguma pradedančiųjų užstringa ilgiausiai, tiesiog dėl to, kad reikia mąstyti apie duomenis kitaip – ne kaip apie vieną lentelę, o kaip apie tinklą tarpusavyje susijusių lentelių.
Ir dar viena mintis – SQL nėra vienkartinis įgūdis, kurį išmoksti ir pamiršti. Kuo daugiau su juo dirbi, tuo natūraliau ima veikti smegenys „duomenų bazės režimu“ – pradedi mąstyti apie informaciją struktūriškai, klausti tikslių klausimų ir gauti tikslius atsakymus, o ne spėlioti. Būtent dėl to ši kalba, nors ir sukurta dar aštuntajame dešimtmetyje, vis dar išlieka viena paklausiausių technologijų rinkoje – ir tikriausiai tokia išliks dar ilgai.






