Osnove podatkovnih baz

« nazaj

Osnove podatkovnih baz - vaje 18.2.2021


Osnovna uporaba SQL

Naloga 3: Ukaz INSERT

INSERT INTO tabela [(st1, st2, ...)]
VALUES (vr1, vr2, ...);
  1. Vsak naj se vpiše v tabelo oseba. Po potrebi je treba prej vpisati še kraj v tabelo kraj. Vpiši se z ukazom INSERT. (Najprej klikni na zbirko banka in 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);
    
  2. V tabeli racun ustvari še svoj bančni račun.

    INSERT INTO racun (lastnik) VALUES ('2305939505123');
    
  3. V tabeli transakcija naredi nekaj transakcij na svojem računu, na primer vsaj dva dviga in dva pologa.

    INSERT INTO transakcija (znesek, racun, opis)
    VALUES (800, 100002, 'Penzija');
       
    INSERT INTO transakcija (znesek, racun)
    VALUES (-100, 100006);
       
    INSERT INTO transakcija (znesek, racun, opis)
    VALUES (300, 100010, 'Dobitek na Milijonarju');
    

Naloga 4: Ukaz UPDATE

UPDATE tabela SET st1 = vr1, st2 = vr2, ...
WHERE stolpec = vrednost AND (pogoj1 OR pogoj2)
              <>
              >
              <
              >=
              <=
              LIKE 'a_b%' -- nize, ki imajo na prvem mestu a in na tretjem mestu b
              IS [NOT] NULL;

V 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 = '2305939505456'
WHERE emso = '2305939505123'; -- ne gre, ker imamo račun s tem EMŠOm

UPDATE oseba SET ime = priimek, priimek = ime
WHERE emso = '2305939505123'; -- zamenjamo ime in priimek

Naloga 5: Ukaz DELETE

DELETE 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 = 8;

Naloga 6: Ukaz SELECT

SELECT [DISTINCT] [*], st1, st2, izraz AS novo_ime, ...
FROM tabela1
JOIN tabela2 [ON pogoj | USING (st1, st2, ...)]
WHERE pogoj;

Naredi naslednje poizvedbe:

  1. Za vse osebe, ki živijo v kraju s poštno številko 2000, izpiši celotne pripadajoče vrstice.

    SELECT * FROM oseba
    WHERE posta = 2000;
    
  2. Vse osebe v tabeli oseba, vendar izpiši samo ime, priimek in poštno številko.

    SELECT ime, priimek, posta FROM oseba;
    
  3. Vse transakcije, pri katerih je znesek manjši od -1000.

    SELECT * FROM transakcija
    WHERE znesek < -1000;
    
  4. 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 < -100; -- -100, ker imamo bolj primerne podatke
    
  5. Vse osebe v tabeli oseba, vendar izpiši samo ime, priimek in ime kraja, v katerem živijo (pomagati si bo treba s tabelo kraj).

    SELECT ime, priimek, kraj
    FROM oseba JOIN kraj
    ON oseba.posta = kraj.posta;
       
    SELECT ime, priimek, kraj
    FROM oseba JOIN kraj
    USING (posta);
       
    SELECT ime, priimek, kraj
    FROM oseba NATURAL JOIN kraj;
    
  6. Vse osebe, ki živijo v kraju Maribor, pri čemer poštno številko dobiš iz tabele kraj.

Nato naredi še bolj komplicirane poizvedbe:

  1. Z uporabo funkcije count preštej, koliko računov je odprtih na banki.

    SELECT count(*) FROM transakcija;
    
  2. Preštej, koliko je oseb, ki živijo v kraju s poštno številko 1000.

    SELECT count(*) FROM oseba
    WHERE posta = 1000;
    
  3. Z uporabo funkcije sum izračunaj, koliko denarja je trenutno v banki (seštej stolpec znesek v tabeli transakcija).

     SELECT sum(znesek) FROM transakcija;
    
  4. Z uporabo funkcije sum izračunaj, koliko denarja imaš trenutno na svojem računu.

     SELECT sum(znesek) FROM transakcija
     WHERE racun = 100005;
    
  5. 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 lastnik = emso
    JOIN transakcija ON racun = stevilka
    WHERE abs(znesek) >= 1000;
    
  6. 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.

  7. Dodatna naloga: Z uporabo funkcij sum in pow ter 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).