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ä P12- tietovaraston 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.