Tietokantojen perusteet
Transcription
Tietokantojen perusteet
Tällä viikolla Kotitehtävien läpikäynti SQL-harjoituksia, osa 1 Jatketaan ”Pelifirman” tietovaraston suunnittelua: tietotyyppien kertaus, taulun luonti ER-kaavioon, taulun luonti kaavion avulla tietokantaan, kaavion luonti tietokannasta SQL-harjoituksia, osa 2 Seuraavat tehtävät koskevat tietokantaa classicmodels. Eli ennen kyselyiden tekoa aktivoi tuplaklikkaamalla MySQL:sta ensin tietokanta classicmodels. Vastaukset tulee olla SQL-kyselyitä. Sulkeissa on joitain vinkkejä kyselyyn. 1. Saat selville yrityksen "president"-tittelin omaavan työntekijän? SELECT * FROM employees WHERE jobTitle = 'President'; 2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstName ASC; 3. Haet työntekijöiden tiedot tittelin mukaan laskevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY jobTitle DESC; 4. Haet kaikki toimistot jotka eivät sijaitse USAssa tai Ranskassa. SELECT * FROM offices WHERE country <> 'USA' AND country <> 'FRANCE'; 5. Haet kaikki tuotteet, joiden ostohinta on 90 ja 100 välillä. (BETWEEN) SELECT * FROM products WHERE buyPrice BETWEEN 90 AND 100; Seuraavat tehtävät koskevat tietokantaa classicmodels. Eli ennen kyselyiden tekoa aktivoi tuplaklikkaamalla MySQL:sta ensin tietokanta classicmodels. Vastaukset tulee olla SQL-kyselyitä. Sulkeissa on joitain vinkkejä kyselyyn. 6. Haet kaikkien asiakkaiden tiedot joille ei ole määritelty osavaltio-tietoa. (NULL) SELECT * FROM customers WHERE ISNULL(state); 7. Selvität mikä on kaikki tuotteiden yhteenlaskettu ostohinta (kenttä buyPrice)? SELECT SUM(buyPrice) FROM products; 8. Selvität mikä on kaikkien tuotteiden ostohintojen keskiarvo? SELECT AVG(buyPrice) FROM products; 9. Haet suoritettujen maksujen summat asiakkaittain (GROUP BY, SUM) SELECT customerNumber, SUM(amount) FROM payments GROUP BY customerNumber; 10. Haet tilausten tuotteiden yhteismäärät per tuote (GROUP BY, SUM) SELECT productCode, SUM(quantityOrdered) FROM orderdetails GROUP BY productCode; Kyselyiden yhdistäminen, UNION / UNION ALL Sisäkyselyt Tekstinkäsittelyfunktioita: UPPER, LOWER, CONCAT, SUBSTRING, RIGHT, LEFT, LENGTH Kyselyiden yhdistäminen, UNION / UNION ALL: SELECT city FROM offices UNION SELECT city FROM customers Sisäkyselyt: Kyselyä voi käyttää toisen kyselyn lähteenä tai vaikka WHEREehdossa. WHERE-ehdossa eksakti vertailu (=) yhteen arvoon tai joukkoon (IN): SELECT COUNT(*) FROM (SELECT city FROM offices UNION ALL SELECT city FROM customers) AS temp SELECT * FROM customers WHERE city IN (SELECT city FROM offices WHERE country='UK') Yhdistä UNION-kyselyllä kaksi SELECT-kyselyä, joissa haetaan kaikki kentät tuotetaululle kun 1) productLine='Planes' tai 2) productLine='Ships' SELECT * FROM products WHERE productLine='Planes„ UNION SELECT * FROM productsWHERE productLine='Ships„ Miten saat samat vastausrivit kuin edellä yhdellä kyselyllä (ilman UNIONia)? SELECT * FROM products WHERE productLine='Ships„ OR productLine='Planes„ Montako eri maata on tauluissa customers ja offices? SELECT COUNT(*) FROM (SELECT country FROM offices UNION SELECT country FROM customers) AS temp Hae tilaukset asiakkaalle, jonka nimi on 'Royale Belge„: SELECT * FROM orders WHERE customerNumber= (SELECT customerNumber FROM customers WHERE customerName='Royale Belge') Hae nimi (customerName) niille asiakkaille, joilla on tilauksia statuksella 'Cancelled'. Käytä sisäkyselyä. SELECT customerNameFROM customersWHERE customerNumber IN (SELECT customerNumber FROM orders WHERE status='Cancelled') - Yleisimmin käytetyt tietotyypit: VARCHAR(nn) – muuttuvanmittainen merkkijono CHAR(n) – kiinteänmittainen merkkijono INT – kokonaisluku DATE – päivämäärä Käytetään yo. Tietotyyppejä P12tietovaraston tauluissa - - Parityöskentelynä luodaan ER-malliin taulut. Kukin pari mallintaa listalta yhden tai kaksi taulua. Taulujen pääavaimet (PK) on määrätty ja lisäksi listalla on joitain viiteavaimia (FK) malliksi. Yritys (PK yritys_id) Osasto (PK osasto_id) (FK yritys_id) Henkilo (PK henkilo_id) (FK osasto_id) Koulutus (PK koulutus_id) Koulutus_linkki (FK koulutus_id, henkilo_id) Kokemus (PK kokemus_id) Kokemus_linkki (FK kokemus_id, henkilo_id) Pelit (PK peli_id) (FK osasto_id) Asiakas (PK asiakas_id) Toimittaja (PK toimittaja_id) Osto (PK osto_id) (FK toimittaja_id, osasto_id) Myynti (PK myynti_id) (FK asiakas_id, peli_id, osasto_id) Kalenteri (PK pvm_id) Tekstinkäsittelyfunktioita: UPPER - muuttaa merkit isoiksi (uppercase) SELECT UPPER(customerName) FROM customers LOWER - muuttaa merkit pieniksi (lowercase) SELECT LOWER(customerName) FROM customers SELECT 'Teksti' - palauttaa kirjoitetun tekstin CONCAT - yhdistää tekstimuotoisia kenttiä tai kirjoitettua tekstiä SELECT CONCAT(firstName, ' ', lastName) FROM employees SUBSTRING - merkkijonon haku SELECT SUBSTRING(productname, 5, 8) FROM products RIGHT - hakee kentän oikeanpuoleisia merkkejä n kappaletta SELECT RIGHT(email,4) FROM employees LEFT - hakee kentän vasemmanpuoleisia merkkejä n kappaletta SELECT LEFT(productName,4) FROM products LENGTH - kentän pituus = merkkien määrä SELECT LENGTH(firstName) FROM employees - Hae products-taulusta kaikki Ferrarit - Hae products-taulusta kaksi kenttää, joissa ensimmäisessä lukee 'Ferrari' ja toisessa 'Classic car'. Hyödynnä edellistä kyselyä. Tulokseen tulee kaksi riviä. - Edellisen tehtävän tulokseen tuli kaksi riviä. Millä yhdellä määreellä saat karsittua tuplarivin pois? - Muodosta yhteen kenttään teksti, jossa ensin tuotteen nimi, sitten kaksoispiste ja lopuksi tuotekuvaus - Sama kuin edellä, mutta muuta tuotenimi isoiksi kirjaimiksi ja tuotekuvaus pieniksi kirjaimiksi - Hae työntekijöiden etunimi ja toiseen kenttään etunimen pituus - Tee kahden kentän kysely, jossa ensimmäisessä lukee "Etunimi" toisessa on työntekijän etunimi - Tee sama kuin edellä, mutta tiedot yhteen kenttään ja välilyönti ennen nimeä - Muodosta "ohjelause peliin": "Valitse ajoneuvo:" ja sitten lista ajoneuvoista. (UNION-kysely) - Hae eri kenttiin työntekijöiden etunimen alkukirjain ja sukunimen alkukirjain - Hae työntekijöiden nimikirjaimet muodossa (esim.) "E.S." eli etunimen alkukirjain ja sukunimen alkukirjain - Hae tuotteen S10_2016 tuotekuvauksesta sana "logos“ 1.) Lukutehtävä. Kertaa edellisen viikon kotitehtävät ja tämän viikon uudet SQL-asiat tästä kalvosarjasta. Tehtävän suoritusta ei tarvitse merkitä mihinkään. 2.) Laita tekemästäsi omasta SQL-oppaasta kopio GoogleDriveen opettajalle jakoon Ensi viikolla jatkamme kesken jääneitä teksti-funktioharjoituksia tunnilla.