SQL (Structured Query Language) ir valoda, ar kuru sazinās ar datubāzēm — nolasa, ieraksta, maina un dzēš datus. Šajā rakstā apskatīsim pamata vaicājumus, ko izmanto ikdienā strādājot ar MySQL vai MariaDB.
1. SELECT — datu nolasīšana
Vienkāršākais vaicājums — atlasīt visas kolonnas no tabulas:
SELECT * FROM lietotaji;
Praksē nekad nelietojiet * produkcijā — vienmēr norādiet konkrētas kolonnas:
SELECT id, vards, epasts, registrets
FROM lietotaji;
2. WHERE — nosacījumi
Filtrē ierakstus pēc nosacījumiem:
-- Precīza atbilstība
SELECT * FROM lietotaji WHERE id = 42;
-- Teksta meklēšana
SELECT * FROM produkti WHERE nosaukums = 'Grāmata';
-- Salīdzināšanas operatori
SELECT * FROM pasutijumi WHERE summa > 100;
SELECT * FROM pasutijumi WHERE summa >= 50 AND summa <= 200;
SELECT * FROM pasutijumi WHERE summa BETWEEN 50 AND 200; -- tas pats
LIKE — meklēšana ar aizstājējzīmēm
-- Sākas ar "Jān"
SELECT * FROM lietotaji WHERE vards LIKE 'Jān%';
-- Satur "gmail"
SELECT * FROM lietotaji WHERE epasts LIKE '%gmail%';
-- Otrais burts ir "ā"
SELECT * FROM lietotaji WHERE vards LIKE '_ā%';
| Simbols | Nozīme | Piemērs |
|---|---|---|
| % | Jebcik simboli (0 vai vairāk) | LIKE '% ābol%' — atrod "ābols", "ābolu" |
| _ | Tieši viens simbols | LIKE '_ānis' — atrod "Jānis", "Mānis" |
IN un NOT IN
-- Vairākas vērtības
SELECT * FROM lietotaji WHERE valsts IN ('LV', 'LT', 'EE');
-- Izslēgt vērtības
SELECT * FROM pasutijumi WHERE statuss NOT IN ('atcelts', 'atgriezts');
NULL vērtības
NULL nav vērtība, tāpēc = NULL nestrādā! Vienmēr lietojiet IS NULL vai IS NOT NULL.
-- Nepareizi ❌
SELECT * FROM lietotaji WHERE telefons = NULL;
-- Pareizi ✓
SELECT * FROM lietotaji WHERE telefons IS NULL;
SELECT * FROM lietotaji WHERE telefons IS NOT NULL;
3. ORDER BY — kārtošana
-- Augošā secībā (noklusējums)
SELECT * FROM produkti ORDER BY cena ASC;
-- Dilstošā secībā
SELECT * FROM produkti ORDER BY cena DESC;
-- Vairāki kārtošanas kritēriji
SELECT * FROM lietotaji ORDER BY valsts ASC, vards ASC;
-- Jaunākie pirmie
SELECT * FROM raksti ORDER BY publicets DESC;
4. LIMIT — ierobežot rezultātus
-- Pirmie 10 ieraksti
SELECT * FROM raksti ORDER BY publicets DESC LIMIT 10;
-- Lapu pārlūkošana (pagination): 2. lapa, 20 ieraksti lapā
SELECT * FROM raksti ORDER BY publicets DESC LIMIT 20 OFFSET 20;
-- vai īsāk:
SELECT * FROM raksti ORDER BY publicets DESC LIMIT 20, 20;
LIMIT bez ORDER BY atgriež neprognozējamu rezultātu — vienmēr lietojiet abus kopā!
5. Agregātfunkcijas
Apkopo vairākus ierakstus vienā rezultātā:
-- Saskaitīt ierakstus
SELECT COUNT(*) AS kopaa FROM lietotaji;
SELECT COUNT(*) AS aktivi FROM lietotaji WHERE ir_aktivs = 1;
-- Summa, vidējais, min, max
SELECT
COUNT(*) AS pasutijumu_skaits,
SUM(summa) AS kopeja_summa,
AVG(summa) AS videja_summa,
MIN(summa) AS mazaka,
MAX(summa) AS lielaka
FROM pasutijumi
WHERE statuss = 'pabeigts';
6. GROUP BY — grupēšana
Apvieno ierakstus ar vienādām vērtībām un rēķina statistiku:
-- Cik lietotāju katrā valstī
SELECT valsts, COUNT(*) AS skaits
FROM lietotaji
GROUP BY valsts
ORDER BY skaits DESC;
-- Pasūtījumu summa pa mēnešiem
SELECT
DATE_FORMAT(datums, '%Y-%m') AS menesis,
COUNT(*) AS pasutijumi,
SUM(summa) AS ienemumi
FROM pasutijumi
GROUP BY menesis
ORDER BY menesis DESC;
HAVING — nosacījumi grupām
-- Valstis, kur vairāk nekā 100 lietotāju
SELECT valsts, COUNT(*) AS skaits
FROM lietotaji
GROUP BY valsts
HAVING skaits > 100
ORDER BY skaits DESC;
WHERE filtrē pirms grupēšanas, HAVING — pēc. WHERE nevar izmantot agregātfunkcijas, bet HAVING — var.
7. DISTINCT — unikālas vērtības
-- Visas unikālās valstis
SELECT DISTINCT valsts FROM lietotaji ORDER BY valsts;
-- Cik dažādas valstis
SELECT COUNT(DISTINCT valsts) AS valstu_skaits FROM lietotaji;
8. Aliases — pseidonīmi
-- Kolonnu pseidonīmi
SELECT
vards AS lietotaja_vards,
epasts AS kontakta_epasts
FROM lietotaji AS l
WHERE l.ir_aktivs = 1;
Vaicājuma izpildes secība
SQL vaicājums tiek izpildīts šādā secībā (nevis kā tas ir uzrakstīts):
| Secība | Klauzula | Ko dara |
|---|---|---|
| 1. | FROM | No kuras tabulas ņemt datus |
| 2. | WHERE | Filtrē atsevišķus ierakstus |
| 3. | GROUP BY | Sagrupē ierakstus |
| 4. | HAVING | Filtrē grupas |
| 5. | SELECT | Izvēlas kolonnas |
| 6. | DISTINCT | Noņem dublikātus |
| 7. | ORDER BY | Kārto rezultātus |
| 8. | LIMIT | Ierobežo skaitu |








