HELIA TIKO-05 1 (22) SQL / DML SQL / DML...2 Tiedon haku eli -lause...4 Distinct-määre...7 Lasketut sarakkeet...8 Sarakkeen uudelleen nimeäminen...9 SQL:n funktioita... 10 Merkkijonofunktiot... 10 Päivämääräfunktiot... 11 Muita funktioita... 12 Rivien valinta eli WHERE -ehto... 13 Vertailu... 13 Loogiset operaattorit:... 14 Hahmontunnistus... 16 Joukkoon kuuluminen... 18 Arvoväli... 19 Vertailu tyhjä-arvoon... 20 Lajittelu eli ORDER BY -osa... 21
HELIA TIKO-05 2 (22) SQL / DML ~ Data Manipulation Language ~ Tietojen käsittely INSERT tiedon (rivien) lisäys tauluun UPDATE taulussa olevan tiedon muuttaminen / päivitys DELETE tiedon (rivien) poisto taulusta kysely tietokannasta Materiaalissa käytetyt esimerkit liittyvät Conolly, Begg. Database Systems -kirjan esimerkkiin asunnon vuokraus -tietokannasta Asunnon vuokraus -tietokannan taulut ovat käytettävissä kurssin harjoitusympäristössä (select * from staff, select * from branch jne). (Huom! Luentomateriaalin ja harjoitusympäristön esimerkkitietokannan välillä on pieniä eroja taulujen rakenteissa, esim. sarakkeiden nimeäminen, sarakkeiden lkm yms.)
HELIA TIKO-05 3 (22) Asunnon vuokraus tietokanta harjoitusympäristössä Branch(yrityksen toimipiste/haarakonttori) BRANCHNO STREET CITY POSTCODE B005 22 Deer Rd London SW1 4EH B007 16 Argyll St Aberdeen AB2 3SU Staff: STAFFNO FNAME LNAME OPOSITION SEX DOB SALARY BRANCHNO SL21 John White Manager M 01-OCT-45 30000 B005 SG37 Ann Beech Assistant F 11-OCT-60 12000 B003................ PrivateOwner: OWNERNO FNAME LNAME ADDRESS TELNO CO46 Joe Keogh 2 Fergus Dr, Aberdeen AB2 7SX 01224-861212 CO87 Carol Farrel 6 Achray St, Glasgow G32 9DX 0141-357-7419. PropertyForRent: PROPERT Y NO STREET CITY POST CODE PROPER TYTYPE ROOM S RENT OWNE R NO STAFF NO PA14 16 Aberdeen AB7 5SU House 6 650 CO46 SA9 B007 Holhead PL94 6 Argyll St London NW2 Flat 4 400 CO87 SL41 B005 Client: CLIENTNO FNAME LNAME TELNO PREFTYPE MAXRENT CR76 John Kay 0207-774-5632 Flat 425 CR56 Aline Stewart 0141-848-1825 Flat 350 Viewing: CLIENTNO PROPERTYNO VIEWDATE COMMENTS CR56 PA14 24-MAY-01 too small CR76 PG4 20-APR-01 too --ote Registration: CLIENTNO BRANCHNO STAFFNO DATEJOINED CR76 B005 SL41 02-JAN-01 CR56 B003 SG37 11-APR-00 BRANCH NO
HELIA TIKO-05 4 (22) Tiedon haku eli -lause ~ -lause etsii ja näyttää tietoja yhdestä tai useammasta tietokannan taulusta [DISTINCT ALL] { * [column_expression [AS new_name]] [,...]} table_name [alias] [,...] [WHERE condition] [GROUP BY column_list] [HAVING condition] [ORDER BY column_list]
HELIA TIKO-05 5 (22) Esim. Kaikki sarakkeet & kaikki rivit Hae kaikkien työntekijöiden kaikki tiedot * staff; tai staffno, fname, lname, address, tel_no, oposition, sex, dob, salary, branchno staff; staffno fname lname address tel_no oposition sex dob salary branchno SL21 John White Manager 30000.00 B5 SG37 Ann Beech Snr Asst 12000.00 B3 SA9 David Ford Deputy 18000.00 B3 SA9 Mary Howe Assistant 9000.00 B7 SG5 Susan Brand Manager 24000.00 B3 SL41 Julie Lee Assistent 9000.00 B5 Älä käytä valmiissa ohjelmakohdassa koskaan ' *' vaihtoehtoa; se lisää ohjelman tietoriippuvuutta ja heikentää samalla ylläpidettävyyttä
HELIA TIKO-05 6 (22) Esim. Tietyt sarakkeet, kaikki rivit Hae kaikkien henkilöiden numerot, nimet ja palkat. staffno, fname, lname, salary staff; stafffno fname lname salary SL21 John White 30000.00 SG37 Ann Beech 12000.00 SA9 David Ford 18000.00 SA9 Mary Howe 9000.00 SG5 Susan Brand 24000.00 SL41 Julie Lee 9000.00
HELIA TIKO-05 7 (22) Distinct-määre ~ valitaan vain yksi rivi yhtä sarakkeen arvoa kohti (tulostaulusta duplikaattirivit jää pois) DISTINCT:n vastakohta on ALL (ALL on oletus; ei siis tarvitse kirjoittaa) Esim. Hae kohdenumerot vuokrattavien kohteiden näyttötiedosta propertyno viewing; propertyno PA14 PG4 PG4 PA14 PG36 DISTINCT propertyno viewing; propertyno PA14 PG4 PG36
HELIA TIKO-05 8 (22) Lasketut sarakkeet -lauseessa voidaan käyttää myös laskutoimituksia numeeristen sarakkeet yhteydessä Esim: Hae henkilöiden numerot, nimet ja palkat se. henkilön palkka tulostetaan kuukausipalkkana staffno, fname, lname, salary/12 staff; staffno fname lname col4 SL21 John White 2500.00 SG37 Ann Beech 1000.00 SA9 David Ford 1500.00 SA9 Mary Howe 750.00 SG5 Susan Brand 2000.00 SL41 Julie Lee 750.00
HELIA TIKO-05 9 (22) Sarakkeen uudelleen nimeäminen Sarakkeen uusi nimi annetaan varatun sanan AS jälkeen Esim: Hae henkilöiden numerot, nimet ja palkat se. henkilön palkka tulostetaan kuukausipalkkana staffno, fname, lname, salary/12 AS monthly_salary staff; staffno fname lname monthly_salary SL21 John White 2500.00 SG37 Ann Beech 1000.00 SA9 David Ford 1500.00 SA9 Mary Howe 750.00 SG5 Susan Brand 2000.00
HELIA TIKO-05 10 (22) SQL:n funktioita Merkkijonofunktiot yhdistää kaksi merkki- tai bittijonoa UPPER LOWER muuttaa kirjaimet suuriksi muuttaa kirjaimet pieniksi CHAR_LENGTH palauttaa merkkijonon pituuden SUBSTRING POSITION TRIM palauttaa osan merkkijonosta palauttaa merkkijonon position (toisesta merkkijonosta) poistaa merkkijonosta johtavat (LEADING), päättävät (TRAILING) tai molemmat (BOTH) merkit Esim. fname lname CHAR_LENGTH( Beech ) palauttaa 5 SUBSTRING( Beech 1 to 3) palauttaa Bee POSITION ( ee IN Beech ) palauttaa 2 TRIM (BOTH * *** Hello World *** ) palauttaa Hello World
HELIA TIKO-05 11 (22) Päivämääräfunktiot päivämäärätiedot tallentuvat muodossa yyyy-mm-dd HH:mi:ss CURRENT_DATE CURRENT_TIME nykyinen päivämäärä nykyinen ajanhetki CURRENT_TIME_STAMP nykyinen päivämäärä ja aika EXTRACT päivämäärän osa Esim. CURRENT_TIME(2) palauttaa ajan sadasosasekunnin tarkkuudella CURRENT_TIME_STAMP(0) palauttaa pvm ja aika sekunnin tarkkuudella WHERE EXTRACT (YEAR viewdate) viewing comments IS NULL; Samoin toimivat päivä (DAY) ja kuukausi (MONTH)
HELIA TIKO-05 12 (22) Muita funktioita CAST CURRENT_USER konvertoi lausekkeen arvon toiseksi tietotyypiksi nykyisen käyttäjän tunnus USER SESSION_USER istunnon hallitsijan tunnus SYSTEM_USER systeemikäyttäjän tunnus Esim. CAST(5E3 AS INTEGER) Ehdollinen palautus, CASE CASE propertytype WHEN House THEN 1 WHEN Flat THEN 2 ELSE 0 END
HELIA TIKO-05 13 (22) Rivien valinta eli WHERE -ehto Vertailu ~ comparison ~ vertaa lauseketta toiseen Vertauluoperaattorit: =, <, >, <=, >=, <> erisuuruus myös!= (ei ISO) Esim. Listaa kaikki henkilöt, joiden palkka on suurempi kuin 10 000. staffno, fname, lname, salary staff WHERE salary > 10000; staffno fname lname salary SL21 John White 30000.00 SG37 Ann Beech 12000.00 SA9 David Ford 18000.00 SG5 Susan Brand 24000.00
HELIA TIKO-05 14 (22) Loogiset operaattorit: OR, AND, NOT 1. prioriteettijärjestys: NOT, AND, OR 2. suluissa oleva evaluoidaan ensin 3. lausekkeen evaluointi vasemmalta oikealla Esim. Tulosta henkilönumerot henkilöiltä, joiden nimi on John White WHERE AND staffno staff fname = John lname = White ; staffno SL21
HELIA TIKO-05 15 (22) Esim. Listaa sellaisten haarakonttoreiden osoitteet, jotka sijaitsevat Lontoossa tai Glasgow:ssa. WHERE OR branchno, street, area, city, postcode branch city = London city = Glasgow ; BRANCH STREET AREA CITY POSTCODE NO B5 22m Deer Rd Sidcup London SW1 4EH B3 163 Main St Patrick Glasgow G11 0QX B2 56 Clover Dr London NW10 6EU
HELIA TIKO-05 16 (22) Hahmontunnistus ~ pattern match ~ noudattaako merkkijono tiettyä hahmoa LIKE (NOT LIKE) % mikä tahansa merkkijono _ mikä tahansa merkki villimerkit SQL:ssä ovat erilaisia kuin 'yleensä'! Esim. sarake LIKE H% sarake LIKE H sarake LIKE %e sarake NOT LIKE H% sarakkeen arvo alkaa H:lla sarakkeen arvo alkaa H:lla ja sitä pitää seurata 4 merkkiä Sarakkeen arvo päättyy e:hen Sarakkeen arvo ei ala H:lla sarake 15#% ESCAPE # sarakkeen arvo 15%
HELIA TIKO-05 17 (22) Esim. Etsi kaikki henkilöt, joiden osoitekentässä on Glasgow -merkkijono WHERE staffno, fname, lname,address staff address LIKE %Glasgow% ; staffno fname lname address SG37 Ann Beech 81 George St,Glasgow PA1 2JR SA9 David Ford 63 Ashby St, Patrick,Glasgow G11 SG5 Susan Brand 5 Gt Western Rd,Glasgow G12
HELIA TIKO-05 18 (22) Joukkoon kuuluminen ~ set membership ~ kuuluuko lausekkeen arvo johonkin arvojoukkoon IN (NOT IN) Esim. Listaa kaikki managerit ja deputyt. WHERE staffno, fname, lname, oposition staff oposition IN ( Manager, Deputy ); staffno fname lname oposition SL21 John White Manager SG5 Susan Brand Manager SG14 David Ford Deputy tai WHERE OR staffno, fname, lname, oposition staff oposition = Manager oposition = Deputy ;
HELIA TIKO-05 19 (22) Arvoväli ~ range ~ kuluuko lausekkeen arvo tiettyjen arvojen väliin BETWEEN AND (NOT BETWEEN AND) Esim. Listaa sellaisten henkilöiden tiedot, joiden palkka on välillä 20 000 30 000 staffno, fname, lname, oposition, salary staff WHERE salary BETWEEN 20000 AND 30000; staffno fname lname oposition salary SL21 John White Manager 30000.00 SG5 Susan Brand Manager 24000.00 tai staffno, fname, lname, oposition, salary staff WHERE salary >=20000 AND salary <=30000;
HELIA TIKO-05 20 (22) Vertailu tyhjä-arvoon ~ testaa onko sarakkeen arvo tyhjä IS NULL (IS NOT NULL) Esim. Etsi sellaisten asuntonäyttöjen katsojien numerot, kohteiden numerot ja päivämäärät, joihin ei liity kommentteja WHERE clientno, propertyno, viewdate viewing comments IS NULL; clientno propertyno viewdate CR56 PG4 26-May-95 CR56 PG36 28-Apr-95
HELIA TIKO-05 21 (22) Lajittelu eli ORDER BY -osa ORDER BY -osaan liitetään niiden sarakkeiden nimet, joiden mukaan lajitellaan Jos lajittelusarakkeita useita, erotetaan ne toisistaan pilkulla lajittelu voi olla nouseva (ASCENDING, ASC, oletus) tai laskeva (DESCENDING, DESC) Esim. Listaa henkilöstö aakkosjärjestyksessä nimen mukaan staffno, fname, lname, salary staff ORDER BY lname, fname; staffno fname lname salary SG37 Ann Beech 12000.00 SG5 Susan Brand 24000.00 SA9 David Ford 18000.00 SA9 Mary Howe 9000.00 SL41 Julie Lee 9000.00 SL21 John White 30000.00
HELIA TIKO-05 22 (22) Esim. Listaa vuokrattavat huoneiston tyypin mukaisessa järjestyksessä propertyno, propertytype, rooms, rent propertyforrent ORDER BY type; Propertyno PropertyType Rooms Rent PL94 Flat 4 400 PG4 Flat 3 350 PG36 Flat 3 375 PG16 Flat 4 450 PA14 House 6 650 PG21 House 5 600 Esim. Listaa vuokrattavat huoneiston tyypin mukaisessa järjestyksessä ja kalleimmat ensin propertyno, propertytype, rooms, rent propertyforrent ORDER BY propertytype, rent DESC; Propertyno PropertyType Rooms Rent PG16 Flat 4 450 PL94 Flat 4 400 PG36 Flat 3 375 PG4 Flat 3 350 PA14 House 6 650 PG21 House 5 600