Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

51 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Access merkkijonovertailut 

Samankaltaiset esitykset


Esitys aiheesta: "51 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Access merkkijonovertailut "— Esityksen transkriptio:

1 51 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Access merkkijonovertailut  Character(s) in pattern matches in expression u ? or _  Any single character u * or %  Zero or more characters u #  Any single digit (0 — 9) u [charlist]  Any single character in charlist u [!charlist]  Any single character not in charlist  Vrt. SQL: _ ja %  Hae työntekijät, joiden etunimen toinen kirjain on a ja kolmas kirjain EI ole [a-g] SELECT Fname, Lname FROM EMPLOYEE WHERE Fname LIKE “?a[!a-g]*”

2 52 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto SQL-yritelmä (1/4)  Hae ”Exotic Liquids” –toimittajan tuotenimikkeet (Northwind- kannasta): SELECTCompanyName, ProductName FROMSuppliers, Products WHERECompanyName="Exotic Liquids"  Tulos: 77 riviä. Menikö oikein?  Vaikea tietää mikä on oikea vastaus, ellei: u Tarkisteta tulosta suoraan tauluista  Suurissa tietokannoissa erittäin vaivalloista u Tehdä varmistuskyselyjä u Suunnitella kyselyä huolellisesti

3 53 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto SQL-yritelmä (2/4)  Tarkistetaan tulos: 1. Katsotaan tuotetaulua suoraan. Se sisältää 77 tuotetta. Voisiko olla niin, että EL toimittaa näitä kaikkia tuotteita? Voisi, mutta tuskinpa, kun toimittajia on kaikkiaan lähes 30. 2. Tehdään kysely, jossa haetaan muiden toimittajien tuotteet: SELECTCompanyName, ProductName FROMSuppliers, Products WHERECompanyName<>"Exotic Liquids"

4 54 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto SQL-yritelmä (3/4)  Tulos n.2100 riviä eli selkeästi jokin mättää itse kyselyssä, tuotteitahan oli vain 77  Totuus: Oikeasti EL toimittaa vain kolmea tuotetta  Mikä meni pieleen?  Taulut liitetään toisiinsa ristitulolla, sillä liitosattribuutteja ei ole spesifioitu. Täten tulokseen saadaan kaikki mahdolliset ”Suppliers” ja ”Products” – taulujen tuplakombinaatiot. Tarkoituksenahan oli saada ainoastaan ne kombinaatiot, joissa ”Exotic Liquids” todella tuottaa ko. tuotetta.

5 55 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto SQL-yritelmä (4/4)  Oikea ratkaisu: SELECTCompanyName, ProductName FROMSuppliers, Products WHERESuppliers.SupplierID=Products.SupplierID AND CompanyName="Exotic Liquids"

6 56 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Kyselyt osa 2: Sisäkkäiset eli alikyselyt  Alikysely on SELECT-lauseke, joka sijaitsee joko ulomman kyselyn FROM- tai WHERE-osassa  Alikyselyn tulos on tilapäinen relaatio  Alikyselyitä tarvitaan mm. joukkojen vertailussa  Vertailuehdoissa on käytössä erikoisoperaattoreita

7 57 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Vertailu alikyselyn tulokseen  Attribuuttiarvon sisältyminen alikyselyn tulokseen: WHERE IN (SELECT... )  Vertailun soveltaminen joukkoon: WHERE SOME (SELECT... ) u Tulos on tosi, jos jokin alikyselyn tulosrivi toteuttaa ehdon WHERE ALL (SELECT...) u Tulos on tosi, jos ehto pätee kaikille tulosriveille

8 58 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (1/2)  Etsi niiden projektien numerot, joissa on Smith joko työntekijänä tai vastaavan osaston johtajana SELECTDISTINCT PNUMBER FROMPROJECT WHEREPNUMBER IN (SELECT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith') OR PNUMBER IN (SELECT PNO FROM WORKS_ON, EMPLOYEE WHERE ESSN=SSN AND LNAME='Smith')

9 59 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (2/2)  Etsi niiden työntekijöiden nimet, jotka ansaitsevat enemmän kuin kukaan osaston 5 työntekijä SELECTLNAME, FNAME FROMEMPLOYEE WHERESALARY > ALL (SELECT SALARY FROM EMPLOYEE WHERE DNO = 5)  Huom. Sisäkkäinen kysely voi vaatia lisäyksen: AND SALARY IS NOT NULL omaan WHERE-osioonsa

10 60 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Riippuvat alikyselyt (1/2)  Alikyselyssä voi viitata ylikyselyn relaatioihin  ”Hae ne työntekijät, joiden omaisella on sama etunimi kuin työntekijällä itsellään ja lisäksi sukupuoli on sama”  (a) Yksitasoinen ratkaisu: SELECTE.FNAME, E.LNAME FROMEMPLOYEE E, DEPENDENT D WHEREE.SSN=D.ESSN AND E.SEX=D.SEX AND E.FNAME=D.DEPENDENT_NAME

11 61 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Riippuvat alikyselyt (2/2)  (b) Alikyselyä käyttävä ratkaisu: SELECTE.FNAME, E.LNAME FROMEMPLOYEE E WHEREE.SSN IN (SELECT ESSN FROM DEPENDENT WHERE ESSN=E.SSN AND E.FNAME=DEPENDENT_NAME AND SEX=E.SEX)  Evaluoidaan ulkokyselyn ”testihenkilö” sisäkyselyssä eli onko hän tilanteessa, jossa omainen löytyy ja nimi ja sukupuoli täsmäävät. Jos on, ”testihenkilö” valitaan tulosjoukkoon. Sen jälkeen testataan seuraava, jne.

12 62 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Useampitasoinen kysely  Etsi työntekijät, jotka ovat mukana jossain osaston 5 hallinnoimassa projektissa SELECT * FROM EMPLOYEE WHERE SSN IN (SELECT ESSN FROM WORKS_ON WHERE PNO IN ( SELECT PNUMBER FROM PROJECT WHERE DNO = 5 ) )

13 63 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Alikyselyt vs. liitokset  Sama kysely voidaan usein formuloida joko yksitasoiseksi SELECT-lausekkeeksi käyttäen liitosta tai monitasoiseksi alikyselyrakenteeksi  Käyttäjälle alikyselyt ovat usein selkeämpiä  HUOM! Kyselyn optimoinnin kannalta yksitasoinen on usein tehokkaampi, varsinkin jos liitosten järjestystä ei ole kiinnitetty FROM-osassa

14 64 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Alikyselyn tuloksen tyhjyystesti  EXISTS (SELECT... ) on tosi, jos alikyselyn tulos ei ole tyhjä  NOT EXISTS (SELECT... ) on tosi, jos alikyselyn tulos on tyhjä  Alikysely on tässä aina kytketty ylikyselyyn  Huom! Attribuuttiarvon tyhjyystesti: IS NULL IS NOT NULL

15 65 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Tyhjät arvot (1/2)  Katso kpl. 8.5.1 kolmiarvologiikka; attribuutin arvoa: u Ei tiedetä u Ei haluta tallentaa (vielä) u Ei ole sopiva ko. instanssille (huonoa suunnittelua vai toteutuksen tietoinen päätös)  Access: NULL-arvon käyttäytymisestä aritmeettisissa funktioissa u COUNT, AVG, SUM, MIN, MAX  NULL-arvoa ei käsitellä u Potentiaalinen ongelma tulee esille, jos esim. laskee työntekijöiden projektituntien keskiarvoa u Selvitä ennen kyselyä onko laskuperusteena olevassa kentässä NULL-arvoja ja päätä toimenpiteistä  Muutenkin hyvä suunnitteluperiaate

16 66 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Tyhjät arvot (2/2)  Handling Null values in calculations u The aggregate functions won't include records containing blank (Null) values in their calculations. For example, the Count function returns a count of all the records without Null values. If you want to find the total number of records including those with Null values, use Count with the asterisk (*) wildcard character. Example: Count(*) u To count Null values when using the other aggregate functions, use the Nz function, which converts Null values to zeroes so they are included in a calculation. Example: Sum(Nz([Subtotal], 0) u When you use an arithmetic operator (+, -, *, /) in an expression and the value of one of the fields in the expression is Null, the result of the entire expression will be Null. If some records in one of the fields you used in the expression might have a Null value, you can convert the Null value to zero using the Nz function as shown in the following example: Nz([UnitsInStock], 0) + Nz([UnitsOnOrder], 0)

17 67 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (1/3)  Hae ne työntekijät, joiden omaisella on sama etunimi ja sukupuoli kuin työntekijällä itsellään SELECTE.FNAME, E.LNAME FROMEMPLOYEE E WHEREEXISTS (SELECT * FROM DEPENDENT WHERE E.SSN=ESSN AND SEX=E.SEX AND E.FNAME=DEPENDENT_NAME)

18 68 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (2/3)  Etsi niiden työntekijöiden nimet, joilla ei ole omaisia SELECTFNAME, LNAME FROMEMPLOYEE WHERENOT EXISTS(SELECT* FROMDEPENDENT WHERESSN=ESSN)

19 69 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (3/3)  Etsi niiden työntekijöiden nimet, jotka ovat jonkin osaston johtajia ja joilla on vähintään yksi omainen SELECT FNAME, LNAME FROM EMPLOYEE WHERE EXISTS( SELECT * FROM DEPARTMENT WHERE SSN = MGRSSN) AND EXISTS( SELECT * FROM DEPENDENT WHERE SSN = ESSN )

20 70 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Jakolaskusta  Esim. ”Ketkä kaikki työskentelevät ainakin kaikissa osasto 5:n projekteissa?”  Jakolasku S1:S2 kolmella eri tavalla (s.233 ja 235) u Q3  S1 CONTAINS S2 u Q3A  S2 – S1 = NULL (eli NOT EXISTS = TRUE) u Q3B  Ei saa olla tilannetta, että on olemassa S2:n instanssi, jolle ei löydy vastaavaa edustajaa joukosta S1  Jos on ko. tilanne (eli on projekti jolle S1:stä ei löydy ”vastinparia”), sisäkysely antaa arvon tosi ja ulompi epätosi  Esim. E n sisältyy tulokseen vain jos ei ole yhtään osasto 5:n projektia, jossa tarkastelun kohteena oleva työntekijä E n ei työskentelisi Eli WORKS_ON –rivi täytyy löytyä jokaisella osasto 5:n projektinumerolle

21 71 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Kyselyt osa 3  Taulut voidaan liittää FROM-osassa WHERE-osan ehtolauseiden sijaan  Vaihtoehdot: [INNER] JOIN, NATURAL JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN ja FULL OUTER JOIN  Syntaksi: JOIN [ ON ]  NATURAL JOIN tehdään attribuuttinimien perusteella  Access: NATURAL JOIN puuttuu  WHERE-osaan jäävät muut (attribuuttikohtaiset) ehdot

22 72 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (1/5)  Etsi tutkimusosaston työntekijöiden nimet ja osoitteet 1)SELECT FNAME, LNAME, ADDRESS FROM (EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER) WHERE DNAME='Research' 1)SELECT FNAME, LNAME, ADDRESS FROM (EMPLOYEE NATURAL JOIN (DEPARTMENT AS DEPT (DNAME, DNO, MSSN, MSDATE))) WHERE DNAME='Research'

23 73 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (2/5)  Etsi Staffordissa toimivien projektien numerot, vastaavat osastonumerot, ja ko. osastojen johtajien sukunimi, osoite ja syntymäaika SELECTPNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM((PROJECT JOIN DEPARTMENT ON DNUM=DNUMBER) JOIN EMPLOYEE ON MGRSSN=SSN) WHEREPLOCATION='Stafford’

24 74 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (3/5)  Etsi kunkin työntekijän ja hänen esimiehensä sukunimet. Mukaan tulee ottaa myös ne työntekijät, joilla ei ole lainkaan esimiestä SELECTE.LNAME, S.LNAME FROM(EMPLOYEE E LEFT OUTER JOIN EMPLOYEE S ON E.SUPERSSN=S.SSN)

25 75 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (4/5)  Etsi kaikki työntekijät, heidän osoitteensa, ja mahdollisen puolisonsa nimi SELECT Fname, Lname, Dependent_Name, Address FROM Employee LEFT OUTER JOIN Dependent ON Employee.SSN=Dependent.ESSN WHERE (Relationship="spouse")  Väärin: Tulokseen tulee vain puolison omaavat työntekijät (WHERE-ehto), vaikka LEFT JOIN ottaakin kaikki työntekijät aluksi mukaan

26 76 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (5/5)  Oikea ratkaisu: (SELECT Fname, Lname, DependentName, Address FROM Employee, Dependent WHERE SSN=ESSN AND Relationship="spouse") UNION (SELECT Fname, Lname, NULL, Address FROM Employee WHERE NOT EXISTS (SELECT * FROM Dependent WHERE SSN=ESSN AND Relationship="spouse"))

27 77 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Koostefunktiot  Sovelletaan kyselyn tulossarakkeisiin  Voidaan soveltaa joko koko arvojoukkoon tai ryhmittelyä käyttäen osajoukkoihin  Funktiot: COUNT, SUM, AVG, MIN, MAX  COUNT voi kohdistua myös monikoihin (merk.  )  Argumentista voidaan poistaa duplikaatit ennen funktion soveltamista (DISTINCT)

28 78 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkejä (1/3)  Etsi työntekijöiden lukumäärä: SELECTCOUNT(  ) FROMEMPLOYEE  Etsi erilaisten palkkojen lukumäärä: SELECTCOUNT(DISTINCT SALARY) FROMEMPLOYEE

29 79 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkejä (2/3)  Etsi työntekijät, joilla on vähintään kaksi omaista u Omaisten määrä lasketaan alikyselyssä: SELECT FNAME, LNAME FROM EMPLOYEE WHERE (SELECT COUNT (*) FROM DEPENDENT WHERE SSN = ESSN) >= 2

30 80 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkejä (3/3)  Etsi tutkimusosaston työntekijöiden palkkojen minimi, maksimi, summa ja keskiarvo SELECTMIN(SALARY), MAX(SALARY), SUM(SALARY), AVG(SALARY) FROMEMPLOYEE, DEPARTMENT WHEREDNO = DNUMBER AND DNAME = ’Research’

31 81 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Ryhmittely (kuva 8.6)  Vastaava toiminto kuin relaatioalgebrassa  Määre: GROUP BY  Tulokseen ryhmittelykentät ja koostefunktioarvoja  Ryhmiin voidaan soveltaa valintaehtoa, joka yleensä liittyy ryhmän johonkin koostefunktioon  Valintamääre: HAVING u Valitsee kokonaisia ryhmiä

32 82 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (1/4)  Etsi työntekijöiden määrät ja keskipalkat osastoittain SELECTDNO, COUNT (*), AVG (SALARY) FROMEMPLOYEE GROUP BYDNO  Etsi projektien numerot, nimet ja työntekijämäärät u Ryhmitellään liitoksen tulosrivit: SELECTPNUMBER, PNAME, COUNT (*) FROMPROJECT, WORKS_ON WHEREPNUMBER = PNO GROUP BYPNUMBER, PNAME

33 83 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (2/4)  Etsi projektien numerot, nimet ja työntekijämäärät u Mukaan otetaan vain sellaiset projektit, joissa on enemmän kuin kaksi työntekijää SELECTPNUMBER, PNAME, COUNT (*) FROMPROJECT, WORKS_ON WHEREPNUMBER = PNO GROUP BYPNUMBER, PNAME HAVINGCOUNT (*) > 2

34 84 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (3/4)  Huomaa HAVING-määreen oikea kohdistaminen  Laske yli 40000 ansaitsevien työntekijöiden määrät osastoittain  Mukaan otetaan kuitenkin vain osastot, joilla on yli 5 työntekijää VÄÄRIN: MIETI MIKSI TULOS TÄSSÄ ON VÄÄRÄ! SELECTDNUMBER, DNAME, COUNT (*) FROMDEPARTMENT, EMPLOYEE WHEREDNUMBER = DNO AND SALARY > 40000 GROUP BYDNUMBER, DNAME HAVINGCOUNT (*) > 5

35 85 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Esimerkkikyselyjä (4/4)  OIKEIN: SELECTDNUMBER, DNAME, COUNT (*) FROMDEPARTMENT, EMPLOYEE WHEREDNUMBER=DNO AND SALARY > 40000 AND DNO IN (SELECTDNO FROMEMPLOYEE GROUP BYDNO HAVINGCOUNT (*) > 5) GROUP BYDNUMBER, DNAME


Lataa ppt "51 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto Access merkkijonovertailut "

Samankaltaiset esitykset


Iklan oleh Google