| tags | vaje, opb, insert, update, delete, select |
|---|---|
| hackmd | https://hackmd.io/tq2EDkavS_G0b5k9W7Ji4w |
INSERT INTO tabela [(st1, st2, ...)]
VALUES (vr1, vr2, ...);-
Vsak naj se vpiše v tabelo
oseba. Po potrebi je treba prej vpisati še kraj v tabelokraj. Vpiši se z ukazomINSERT. (Najprej klikni na zbirkobankain izberi zavihek SQL. Odpre se polje, v katerega lahko pišeš ukaze SQL in jih izvajaš.)INSERT INTO kraj (posta, kraj) VALUES (6281, 'Škofije'); INSERT INTO oseba VALUES ('2305939505123', 'Moja', 'Nona', '1939-05-23', 'Stara ulica 80', 6281);
-
V tabeli
racunustvari še svoj bančni račun.INSERT INTO racun (lastnik) VALUES ('2305939505123');
-
V tabeli
transakcijanaredi nekaj transakcij na svojem računu, na primer vsaj dva dviga in dva pologa.INSERT INTO transakcija (znesek, racun, opis) VALUES (800, 6, 'Penzija'); INSERT INTO transakcija (znesek, racun) VALUES (-100, 6);
UPDATE tabela SET stolpec1 = vrednost1, st2 = izraz, ...
WHERE stolpec = vrednost AND (pogoj1 OR pogoj2);
<>
>
>=
<=
LIKE 'a_b%' -- niz, ki ima na 1. mestu a in na 3. mestu b
IS [NOT] NULLV tabeli oseba poskusi spremeniti EMŠO v zapisu, ki si ga naredil v nalogi 3. Uporabi ukaz UPDATE. Ali ti baza to dovoli? Poskusi spremeniti še kakšno drugo polje v tabeli.
UPDATE oseba SET emso = '0802986500999'
WHERE emso = '0802986500666'; -- ne gre, ker imamo račun s tem EMŠOm
UPDATE oseba SET ime = priimek, priimek = ime
WHERE emso LIKE '%3'; -- zamenjamo ime in priimek vsem, ki se jim EMŠO konča s 3DELETE FROM tabela
WHERE pogoj;Iz tabele transakcija zbriši eno transakcijo (vseeno katero).
Glej, da ne pobrišeš celotne tabele!
DELETE FROM transakcija WHERE id = 49;SELECT [DISTINCT] [*, ] stolpec1, st2, izraz AS ime, ...
FROM tabela1
[NATURAL] JOIN tabela2 [ON pogoj | USING (stolpec1, stolpec2, ...)]
WHERE pogoj;Naredi naslednje poizvedbe:
-
Za vse osebe, ki živijo v kraju s poštno številko 2000, izpiši celotne pripadajoče vrstice.
SELECT * FROM oseba WHERE posta = 6000;
-
Vse osebe v tabeli
oseba, vendar izpiši samo ime, priimek in poštno številko.SELECT ime, priimek, posta FROM oseba;
-
Vse transakcije, pri katerih je znesek manjši od -1000.
SELECT * FROM transakcija WHERE znesek < -1000;
-
Vse transakcije, pri katerih je znesek manjši od -1000. Zneski transakcij naj bodo pri izpisu zaokroženi na najbližjo stotico proti ničli. (Uporabi celoštevilsko deljenje.)
SELECT *, (znesek / 100) * 100 AS zaokrozen_znesek FROM transakcija WHERE znesek < -1000;
-
Vse osebe v tabeli
oseba, vendar izpiši samo ime, priimek in ime kraja, v katerem živijo (pomagati si bo treba s tabelokraj).SELECT ime, priimek, kraj FROM oseba JOIN kraj ON oseba.posta = kraj.posta;
-
Vse osebe, ki živijo v kraju Maribor, pri čemer poštno številko dobiš iz tabele
kraj.
Nato naredi še bolj komplicirane poizvedbe:
-
Z uporabo funkcije
countpreštej, koliko računov je odprtih na banki.SELECT count(*) FROM racun;
-
Preštej, koliko je oseb, ki živijo v kraju s poštno številko 1000.
SELECT count(*) FROM oseba WHERE posta = 1000;
-
Z uporabo funkcije
sumizračunaj, koliko denarja je trenutno v banki (seštej stolpecznesekv tabelitransakcija).SELECT sum(znesek) FROM transakcija;
-
Z uporabo funkcije
sumizračunaj, koliko denarja imaš trenutno na svojem računu.SELECT sum(znesek) FROM transakcija WHERE racun = 6;
-
Izpiši imena in priimke vseh tistih ljudi, ki so naredili vsaj eno transakcijo z absolutno vrednostjo 1000 ali več. Pri izpisu ne podvajaj oseb, ki so opravile več takih transakcij; uporabi določilo
DISTINCT.SELECT DISTINCT ime, priimek FROM oseba JOIN racun ON emso = lastnik JOIN transakcija ON stevilka = racun WHERE abs(znesek) >= 1000;
-
Nadgradnja prejšnje naloge: za vsako osebo, ki je opravila vsaj eno transakcijo z absolutno vrednostjo 1000 ali več, izpiši niz Ime Priimek iz kraja Kraj. Uporabi operator
||za stikanje nizov. -
Dodatna naloga: Z uporabo funkcij
suminpowter ustrezne funkcije, ki izračuna razliko med dvema časoma (poišči jo v dokumentaciji!), izračunaj, koliko denarja imaš trenutno na svojem računu, pri predpostavki, da se obrestuje z 1% na 30 dni. (Obračunavanje pa je zvezno - po enem dnevu in pol recimo profitiraš za faktor 1.011.5/30).