ebSkola

10.2 SQL CRUD: SELECT, INSERT, UPDATE, DELETE

Stundas uzdevums: Apgūt visu četru SQL CRUD operāciju sintaksi un izpildīt tās praktiski savā datubāzē.

SR 2.4.17. Darbs ar failiem un ārējām datu krātuvēm SR 2.4.13. Mainīgie un datu tipi

70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - ievadi datus ar INSERT · 2. uzdevums (~25 min) - filtrē un kārto ar SELECT · 3. uzdevums (~20 min) - droši lieto UPDATE un DELETE. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: atver savu datubāzi spele no 10.1 stundas. Brīdinājums: UPDATE un DELETE bez WHERE maina visas rindas.

Teorija: CRUD - datu pārvaldības četri stūrakmeņi

CRUD ir akronīms četrām pamata datu operācijām:

  • Create - INSERT
  • Read - SELECT
  • Update - UPDATE
  • Delete - DELETE
-- INSERT (var ievadīt vairākas rindas reizē)
INSERT INTO speletaji (vards, punkti) VALUES ('Anna', 120), ('Jānis', 95);

-- SELECT (filtrēšana, kārtošana, ierobežošana)
SELECT vards, punkti FROM speletaji
WHERE punkti > 100
ORDER BY punkti DESC
LIMIT 5;

-- UPDATE (vienmēr ar WHERE - citādi atjaunina visu!)
UPDATE speletaji SET punkti = punkti + 10 WHERE vards = 'Anna';

-- DELETE (uzmanīgi! vienmēr ar WHERE)
DELETE FROM speletaji WHERE punkti < 50;

Praktiskie uzdevumi

1. uzdevums -

Ievadi datus ar INSERT

Beigās tabulā būs pietiekami daudz datu, ar ko strādāt.

  1. Izpildi INSERT INTO speletaji (vards, punkti) VALUES ('Anna', 120), ('Jānis', 95);.
  2. Pievieno vēl četrus spēlētājus vienā komandā.
  3. Izpildi SELECT COUNT(*) FROM speletaji;.
  4. Pārbaudi, vai skaitlis sakrīt ar ievadīto rindu skaitu.
  5. Izpildi SELECT * FROM speletaji; un apskati id kolonnu.
  6. Pieraksti, kas piešķīra id vērtības, ja tu tās neievadīji.

Gatavs, kad: tabulā ir vismaz 6 spēlētāji, un katram ir automātiski piešķirts unikāls id.

2. uzdevums -

Filtrē un kārto ar SELECT

Beigās tu izvilksi tieši tos datus, kas vajadzīgi, nevis visus.

  1. Izpildi SELECT vards, punkti FROM speletaji WHERE punkti > 100;.
  2. Pievieno ORDER BY punkti DESC un izpildi vēlreiz.
  3. Pievieno LIMIT 3 un pieraksti, cik rindu atgriezās.
  4. Uzraksti vaicājumu, kas atrod spēlētājus ar punktiem no 50 līdz 100.
  5. Uzraksti vaicājumu, kas atrod spēlētāju pēc vārda.
  6. Izpildi SELECT AVG(punkti) FROM speletaji;.
  7. Pieraksti vidējo punktu skaitu.

Gatavs, kad: TOP 3 vaicājums atgriež tieši trīs rindas, sakārtotas no lielākā punktu skaita.

3. uzdevums -

Droši lieto UPDATE un DELETE

Beigās tu zināsi, kā nesabojāt visu tabulu ar vienu komandu.

  1. Izpildi vispirms SELECT * FROM speletaji WHERE vards = 'Anna';.
  2. Pārliecinies, ka atgriežas tieši viena rinda.
  3. Izpildi UPDATE speletaji SET punkti = punkti + 10 WHERE vards = 'Anna';.
  4. Pārbaudi rezultātu ar SELECT.
  5. Izpildi SELECT * FROM speletaji WHERE punkti < 50;.
  6. Izdzēs tieši šīs rindas ar DELETE FROM speletaji WHERE punkti < 50;.
  7. Pieraksti vienu secinājumu: kāpēc pirms UPDATE vienmēr jāizpilda SELECT.

Gatavs, kad: Annas punkti pieauga tieši par 10, un dzēstas tikai tās rindas, ko iepriekš redzēji SELECT rezultātā.

Papildu uzdevums - Izmēģini transakciju

Ja pamatdarbs ir gatavs, iemācies atsaukt kļūdainu komandu.

  1. Izpildi BEGIN;.
  2. Izpildi DELETE FROM speletaji; bez WHERE.
  3. Pārbaudi ar SELECT, ka tabula ir tukša.
  4. Izpildi ROLLBACK;.
  5. Pārbaudi ar SELECT vēlreiz.

Gatavs, kad: pēc ROLLBACK visi dati ir atgriezušies, it kā dzēšana nekad nebūtu notikusi.

Biežākās kļūdas

  • UPDATE bez WHERE atjaunina visu: Vienmēr divreiz pārbaudi WHERE.
  • Jaucās virkņu pēdiņas: SQL lieto 'pēdiņas', nevis dubultās "pēdiņas".
  • Trūkst semikola: Katrs SQL paziņojums beidzas ar ;.

Koda piemērs

-- Pilns CRUD demo
INSERT INTO speletaji (vards, punkti) VALUES ('Anna', 120), ('Jānis', 95);

SELECT vards, punkti FROM speletaji
ORDER BY punkti DESC LIMIT 3;

UPDATE speletaji SET punkti = punkti + 10 WHERE vards = 'Anna';

DELETE FROM speletaji WHERE punkti < 50;

-- Statistika
SELECT COUNT(*), AVG(punkti), MAX(punkti) FROM speletaji;
vards | punkti
------|-------
Anna | 130
Jānis | 95
(skaits, vidējais, maks)