SQL Standardoitu kieli, jonka avulla voidaan Luoda ja hallita tietokantoja Hakea tietoa tietokannasta Muuttaa tietokannan tietoja Standardoinnista huolimatta kukin TKHJ tukee omaa SQL-murrettaan PostgreSQL lähellä standardia MySQL ei lähelläkään standardia
SQL:stä tällä kurssilla Tietokantojen, käyttäjien ja taulujen luominen ja tuhoaminen Tietotyypit, viiteavainmäärittelyt Kyselyt Peruskyselyt, alikyselyt, aggregaattifunktiot, NULL-arvojen käsittely Päivitysoperaatiot
SQL:n numeeriset tietotyypit (1) SMALLINT Etumerkillinen kokonaisluku, tallennustila 2 tavua Arvoalue [-32768, 32767] INTEGER Etumerkillinen kokonaisluku, tallennustila 4 tavua [-2147483648, 2147483647] SERIAL PostgreSQL:n oma datatyyppi Sarjanumeroiden (esim. Id:n) generointiin Monissa TKHJ:ssä oma vastineensa
SQL:n numeeriset tietotyypit (2) REAL Reaaliluku, tarkkuus vaihtelee alustan mukaan DOUBLE Tarkempi reaaliluku, tarkkuus vaihtelee DECIMAL(m,n) Halutun tarkkuuden reaaliluku; m on numeroiden kokonaismäärä ja n desimaalien määrä Esim. DECIMAL(6,2) voisi kuvata hintaa; suurin arvo 9999.99
SQL:n aikatietotyypit DATE eli päivämäärä muodossa YYYY-MM-DD Esim. 2007-01-31 TIME eli kellonaika muodossa HH:MM:SS Usein mahdollisuus myös millisekuntien tarkkuuteen Esim. 14:15:00 TIMESTAMP eli aikaleima eli tyyppien DATE ja TIME yhdistelmä Tilauksen tms. ajankohta
SQL:n tekstitietotyypit (1) CHAR(n) Korkeintaan n:n pituinen merkkijono Tallennustilan tarve tallennettavan merkkijonon pituudesta riippumatta aina n tavua VARCHAR(n) Tallennustila korkeintaan n tavua (sekä lisäksi joitakin tavuja pituutiedon tallentamiseen) TEXT Vaihtelevan pituinen merkkijono Tallennustilan tarve merkkijonon pituus (sekä lisäksi joitakin tavuja)
SQL:n tekstitietotyypit (2) Tietotyypin valinta riippuu tallennettavasta datasta Rekisterinumero, sosiaaliturvatunnus tai muu tieto, jonka pituus on käytännössä vakio: CHAR Nimi, osoite tai muu vaihtelevan pituinen tieto: VARCHAR Vaihtelevan pituisena tallennettavat merkkijonot säästävät tilaa, mutta pituusinformaation käsittely hidastaa operaatioita Toisaalta myös tyhjän tilan käsittely hidastaa
Muita tietotyyppejä Monet TKHJ:t tarjoavat lisäksi muitakin tietotyyppejä PostgreSQL:ssä geometriset tietotyypit McKoi SQL:ssä JAVA_OBJECT Tietotyypit binääridatalle Taulukot
NULL-arvot NULL tulkitaan tuntemattomaksi arvoksi Totuusarvona ”ehkä” Kokonaislukuna mikä tahansa luku Merkkijonona mikä tahansa merkkijono Saattavat aiheuttaa hankaluuksia Alikyselyt, liitokset
Kolmiarvologiikka (1) Perinteisten totuusarvojen TRUE ja FALSE lisäksi mukana myös NULL NOT TRUE = FALSE, NOT FALSE = TRUE ja NOT NULL = NULL NULL voidaan siis tulkita totuusarvona ”ehkä”
Kolmiarvologiikka (2)
NULL-arvojen käsittely (1) Miksi totuusarvoiksi evaluoituvat TRUE OR NULL OR FALSE? TRUE AND NULL OR FALSE? TRUE OR NOT NULL 5 < NULL? NULL = NULL? NULL IS NULL? Jos siis halutaan tutkia onko jokin arvo tosiaan NULL, on käytettävä IS NULL -vertailua