Tiedokannat

Tiedokonehen menestys perustuu sen pättävyöh tiedoloin käzittelys. Enimmyölleh sidä käytetäh sovelduksih, mis ei äijäl kyzytä älyy, a mis pidäy käzitellä suurii tiedomiärii. Täs käytös "tiedo" voi olla nimii libo lugumiärii, da "käsittely" ezimerkikse nimien järjestelyy libo valličendua libo luguloin yhtehlaskendua. Nengomii tehtävii ollah ezimerkikse bankoin da kaupan tehtävät. Näis ruavois tiedokandu voi olla pättävy välineh.

Kačommo ezimerkinny "opastuitiedokandua", kudamah on tallendettu tiijot opastujien opastussuorituksis. Taulukkočotaičendan tundii vois totevuttua nengoisen sistieman taulukkočotaičenduohjelmal, yksikai tiedokandu on äijiä parembi sih tarkoitukseh, da tiedokannois parahite relaatiotiedokandu. Relaatiotiedokannas tiijot tallendetah taulukkoloinnu, kudamis tieduo ečitäh kyzelylöil, da kudamii voi yhtistiä taulukko-operatsieloil, mit ollah miäriteldy SQL kyzelykieles.

Meijän ezimerkis taulukko opastujat sizäldäy opastujii, kudamil on juoksii jälletysnumero, nimi da toinah vie aigu, konzu opastui ližättih taulukkoh. Taulukos kursat luvetellah kai kursat jälletysnumeron da piduhuonke. Luvettelos suoritukset luvetellah tutkindoloin tulokset, mit sizäldetäh opastuinumeron, kursunumeron da arvosanan (lugu 3..12).

Tiedokannan luomine da muuttamine

Ezimerkilöis käytämmö SQLite -nimisty ohjelmua. Sidä voi käyttiä myös graafisen käyttöliittymän kauti, yksikai täs käytämmö sidä komendotulkispäi. Enzimäi perustammo tiedokannan skola.db da ližiämmö sih taulukot opastujat, kursat da suoritukset. Nämis jogahizel miärittelemmö joukon kentii da niijen arvoloin tyypit. PRIMARY-kentil on moine eričys, gu niih sistiemu liziäy jälletysnumeron.

Ezimerki. Tiedokannan da taulukkoloin luomine.
  sqlite skola.db "create table opastujat (
    opnum INTEGER PRIMARY KEY, nimi TEXT)";
  sqlite skola.db "create table kursat (
    kurnum INTEGER PRIMARY KEY, kursu TEXT, piduhus REAL)";
  sqlite skola.db "create table suoritukset (
    suornum INTEGER PRIMARY KEY,
    opnum INTEGER, kurnum INTEGER, arvosana REAL)";

Ližiämmö nygöi rivilöi taulukkoloih. Opastujien da kursoin liziändyjärjestyksen mugah (1,1,12) merkiččöy Iivanan suorittamua tekstankäzittely-kursua arvosanal 12. Tulielois ezimerkilöis näemmö, kui nämmih numeroih liitetäh opastujan da kursan nimet.

Ezimerki. Tiedoloin ližiändy tiedokandah.
sqlite skola.db "insert into kursat (kursu,piduhus) values ('tekstankazittelu',2)";
sqlite skola.db "insert into kursat (kursu,piduhus) values ('taulukkocotaicendu',1)";
sqlite skola.db "insert into kursat (kursu,piduhus) values ('kuvankazittelu',3)";

sqlite skola.db "insert into opastujat (nimi) values ('iivan')"
sqlite skola.db "insert into opastujat (nimi) values ('nikolai')"
sqlite skola.db "insert into opastujat (nimi) values ('olga')"
sqlite skola.db "insert into opastujat (nimi) values ('tatjana')"

sqlite skola.db "insert into suoritukset (opnum,kurnum,arvosana) values (1,1,12)";
sqlite skola.db "insert into suoritukset (opnum,kurnum,arvosana) values (3,1,6)";
sqlite skola.db "insert into suoritukset (opnum,kurnum,arvosana) values (4,1,10)";
sqlite skola.db "insert into suoritukset (opnum,kurnum,arvosana) values (2,2,9)";
sqlite skola.db "insert into suoritukset (opnum,kurnum,arvosana) values (3,2,8)";
sqlite skola.db "insert into suoritukset (opnum,kurnum,arvosana) values (1,3,11)";
sqlite skola.db "insert into suoritukset (opnum,kurnum,arvosana) values (2,3,8)";
sqlite skola.db "insert into suoritukset (opnum,kurnum,arvosana) values (3,3,7)";

Tiedokandukyzelyt

SQLites kyzelyt ollah muoduo
sqlite tiedokandu "kyzely"
mis kyzely on muoduo
select midä from mispäi where mil-ehtol

Ezimerki. Taulukon tulostamine. Kyzelyn
  sqlite skola.db "select opnum,kurnum,arvosana from suoritukset";
tulos on
  1|1|12
  3|1|6
  4|1|10
  2|2|9
  3|2|8
  1|3|11
  2|3|8
  3|3|7

Taulukon suammo ellendettävembäh muodoh, gu opastuinoumeron da kursunoumeron sijah panemmo opastujan nimen da kursan nimen. Merkindy T.k merkiččöy taulukon T kentän k arvuo. Kyzelys nimi,kursu,arvosana ehto suoritukset.opnum=opastujat.opnum varmendau, gu opastuinumeron sijas on oigei nimi. Samah luaduh kursunumeron sijah suammo kursan nimen ehtol suoritukset.kurnum = kursat.kurnum:

Ezimerki. Ehtoloin käyttö
  sqlite skola.db "select nimi,kursu,arvosana
    from opastujat,kursat,suoritukset
    where (suoritukset.opnum=opastujat.opnum) AND
      (suoritukset.kurnum=kursat.kurnum)"; 
Tulos:
  iivan|tekstankazittelu|12
  iivan|kuvankazittelu|11
  nikolai|taulukkocotandu|9
  nikolai|kuvankazittelu|8
  olga|tekstankazittelu|6
  olga|taulukkocotandu|8
  olga|kuvankazittelu|7
  tatjana|tekstankazittelu|10

Sama azii luajitah puhtahembi käyttämäl taulukkoloin yhtistämisty join-operuattoral. Ku T1 da T2 ollah taulukkoloi, kudamis kumbaisesgi on kenty k, sit taulukko T1 join T2 using k muvvostuu rivilöis r'1 a r'2, mis r'1 suajah T1:n rivilöis r1 pyhkimäl kentän k arvo a da r'2 suajah T2:n rivilöis r2 pyhkimäl kentän k sama arvo a.

Ezimerki. join operatsii
  sqlite skola.db "select
    nimi,kursu,arvosana
    from opastujat join (kursat join suoritukset using (kurnum)) using (opnum)";
Tulos:
kazittelu
  iivan|tekstankazittelu|2|12
  iivan|kuvankazittelu|3|11
  nikolai|taulukkocotandu|1|9
  nikolai|kuvankazittelu|3|8
  olga|tekstankazittelu|2|6
  olga|taulukkocotandu|1|8
  olga|kuvankazittelu|3|7
  tatjana|tekstankazittelu|2|10

Kyzelyn valličendoih voi myös soveldua erähii operuattoruloi, ezim. aritmettizii operuattoruloi (SUM, ...) iäriarvoloi (MAX, MIN), keskiarvuo (AVG) i m.i. Nämis kyzelyis group by sanou, mih tulokseh operuattorua soveldetah. Opastujien suoritusten miärät:

Ezimerki. sum operatsiin käyttö:
  sqlite koulu.db "select opastujat.nimi,SUM(kursat.piduhus)
    from opastujat,kursat,suoritukset 
    where (opastujat.opnum=suoritukset.opnum) AND (kursat.kurnum=suoritukset.kurnum)
    group by suoritukset.opnum";
Kyzelyn tulos:
  olga|6
  tatjana|2
  nikolai|4
  iivan|5

Suoran keskiarvon voi laskie AVG-operatsiel. Painotetun keskiarvon voi laskie ezimerkikse täljyttyö:

Ezimerki. Painotettu keskiarvo.
  sqlite skola.db "select 
    opastujat.nimi,SUM(suoritukset.arvosana*kursat.piduhus)/SUM(kursat.piduhus)
    from opastujat,kursat,suoritukset 
    where (opastujat.opnum=suoritukset.opnum) AND (kursat.kurnum=suoritukset.kurnum)
    group by suoritukset.opnum";
Kyzelyn tulos:
  olga|6.83333333333333
  tatjana|10
  nikolai|8.25
  iivan|11.4

Tiedokandua ei ainos käytetä suorah komendotulkin kauti kui nämmis ezimerkilöis, a gruafizen käyttöliityndän (ezim. gfsqlite), ohjelmoindukielen (ezim. pysqlite) libo livaimen (cgi-ohjelmoindu) kauti. SQLite:a da MySQL:iä voi myös käyttiä OpenOfficen kauti.