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