SQL-harjoittelun tehtävät, k05

Tehtäväksianto näkyy myös SQLTrainer-ohjelman käyttöliittymän kautta. Tälle sivulle tulevat myös tehtävien ratkaisut, kun tehtävien ratkaisuun varattu määräika päättyy. Linkistä 'malli' löytyy kuva oikean ratkaisun tuottamasta tulostaulusta. Tehtävien U1-U8 tulostaulut ovat onnistuneen ylläpito-operaation jälkeisiä tauluja.

Erä 1: SQL:n yksinkertaiset kyselyt

K01 Listaa asiakastiedot kaikista asiakkaista. malli
K02 Hae tunnus, nimi ja osoite alueella A03 asuvista luottokelpoisista asiakkaista nimen mukaan järjestettynä. malli
K03 Laadi alueen ja nimen mukaan järjestetty luettelo asiakkaista, joilla ei ole puhelinnumeroa. malli
K04 Laadi luettelo tilauksista, joiden kokonaishinta on alle 12 euroa. Ota luetteloon tilauspäivä (ilman kellonaikaa, suomalaisessa muodossa)sarakkeena DAY, tilausnumero, hinta ja maksutapa. Järjestä tulos tilausajan perusteella. malli

Erä 2: SQL-kyselyt

K05 Hae lisukkeina tilattujen materiaalien suomenkieliset nimet. malli
K06 Tilaukseen 3012 kuuluvien tuotteiden (ei lisukkeita) englanninkieliset nimet, annostunnukset (ModelID) ja lukumäärät. malli
K07 Laadi suomenkielinen luettelo tuotetyyppiin Pizza kuuluvista tuotteista. Anna tuotenimet järjestettyinä sarakkeena PNAME. Kyselyssä ei voi käyttää pizza-tyypin tunnuskoodia. malli
K08 Laadi englanninkielinen selvitys siitä, mitä aineita kuuluu Äyriäispizzaan (Seafood pizza). Anna vastauksesi sarakkeena Ingredient. malli
K09 Laadi raportti, josta käyvät selville toimitusten kestoajat toisaalta tilausajasta ja toisaalta lähetin toimeksiannosta laskettuna. Anna ajat sarakkeissa DELAY_ORD ja DELAY_ASSN minuutteina. Ota mukaan tarpeelliseksi katsomasi määrä tilaustietoa. Järjestä tulos kokonaistoimitusajan perusteella siten, että kauimmin kestäneet ovat listan alussa. Vinkki: muunto minuuteiksi tehdään kertomalla erotus vuorokauden minuuttien määrällä. Funktio round pyöristää tuloksen kokonaisluvuksi. malli
K10 Laadi luettelo tilauksista, joille ei ole vielä määritelty toimittajaa. Ota mukaan tilausnumero, tilausaika ja tilaajan alue. Järjestä tulos ikäjärjestykseen. malli
K11 Laadi luettelo tilauksista, joille on määritelty toimittaja, mutta joita ei ole vielä kirjattu toimitetuiksi. Ota mukaan tilausnumero, tilausaika ja tilaajan alue. Järjestä tulos ikäjärjestykseen malli
K12 Mitä raaka-aineita ei ole käytetty yhdessäkään tuotteessa. Hae tuotteen koodi ja nimi. Voit valita kielen vapaasti. malli
K13 Selvitä, ketkä lähetit ovat vieneet toimituksia vain omalle päätoiminta-alueelleen. Anna lähettien nimi ja päätoiminta-alue. malli
K14 Selvitä, missä tilassa toimittamattomat tilaukset ovat. Tilana ilmoitetaan 'assigned', jos tilaus on annettu lähetille toimitettavaksi ja 'non-assigned' jos sitä ei ole vielä annettu toimitettavaksi. Anna tilatieto sarakkeessa STATE. malli
K15 Alueen A01 pizzansyöjien keskuuteen on levinnyt ripulitauti. Syyksi epäillään kinkkupizzoja tai Mike B lähettiä. Hae kannasta niiden alueen A01 asiakkaiden tunnukset, nimet, osoitteet ja puhelinnumerot, joille Mike B on toimittanut tilauksia, tai jotka ovat tilanneet kinkkupizzoja (kinkkupizzojen tuotetyyppi on P02). malli
K16 Selvitä tilauksen 3019 sisältö kokonaishinnan määräämistä varten. Tuloksessa pitää näkyä tuotteet ja lisukkeet, niiden tilatut määrät ja yksikköhinnat. Lisukkeita ei tarvitse kytkeä tuotteeseen. Tuotteista ja lisukkeista riittää tunniste, mutta nimenkin voi hakea. malli

Erä 4: SQL-yhteenvetokyselyt

Y1 Anna asiakkaiden lukumäärä sarakkeessa CUSTOMERS. malli
Y2 Kuinka monella asiakkaalla on sähköpostiosoite. Anna vastaus sarakkeena EM malli
Y3 Anna sähköpostiosoitteen ja toisaalta puhelinnumeron omistavien asiakkaiden prosenttiosuudet (kokonaisluvuksi pyöristettynä) sarakkeissa EPROS, PPROS. Vihje: Pyöristys round-funktiolla. malli
Y4 Mikä on kallein tuote. Anna tuotteen suomenkielinen nimi, tunnus, malli ja hinta. malli
Y5 Paljonko pizzoja on tilattu yhteensä. Anna tulos sarakkeessa PIZZACOUNT. malli
Y6 Anna tilausten lyhin, pisin, ja keskimääräinen toimitusaika laskettuna tilauksen tekohetkestä. Anna tulokset sarakkeissa SHORTEST, LONGEST ja MID. Vihje: Keston minuutteina saat kertomalla aikaeron vuorokauden minuuttien määrällä ja pyöristämällä sen round-funktiolla. Laske ensin keskiarvo ja pyöristä vasta sitten. malli
Y7 Miten monia erilaisia tuotteita on tilattu? Anna vastaus sarakkeessa ITEMS. Vihje: Yhteenvetofunktioiden argumenttina voi käyttää lauseketta. Vihje: Yhteenvetofunktioiden argumenttina voi käyttää lauseketta. Yhdistä tuotetyyppitunnus ja annostunnus yhdeksi tunnukseksi. malli
Y8 Listaa kunkin asiakkaan tekemien tilausten määrät siten, että eniten tilannut asiakas on listalla ensimmäisenä. Asiakkaasta pitää esittää ainakin nimi ja riittävästi muuta tietoa asiakkaan yksilöimiseksi. Anna määrä sarakkeessa ORDS. malli
Y9 Listaa alueet kokonaismyynnin arvon mukaisessa järjestyksessä parhaasta huonoimpaan. Anna myös alueen kokonaismyynti sarakkeessa TOTAL malli
Y10 Listaa asiakkaat, joiden tilausten yhteisarvo ylittää 20 euroa. Anna myös tilausten yhteisarvo sarakkeessa VALUE. malli
Y11 Listaa lähettien keikkojen määrät. Ota kaikki lähetit mukaan. Anna määrät sarakkeessa TASKS. Vähiten keikkaillut ensimmäisenä. malli
Y12 Mikä tuote on ollut eniten ostettu määrällisesti. Anna ostojen kokonaismäärä sarakkeessa VOLUME. Tuotteesta halutaan koodi, malli ja englanninkielinen nimi. malli
Y13 Anna niiden lähettien tunnus, nimi ja päätoiminta-alue ja keikkojen määrä (sarakkeessa TASKS), joilla on ollut alle 3 keikkaa. Järjestä tulos keikkojen määrän perusteella. Vihje: Nollakin on alle 3. malli
Y14 Selvitä kuinka suuri osuus ostojen rahallisesta kokonaisarvosta on maksettu luotolla. Anna tulos sarakkeessa CPROS. Vihje: Käytä from-osaan upotettua alikyselyä kokonaishintojen selvittämiseen. malli
Y15 Selvitä kuinka suureen osaan tuotetyyppien tilauksista on liitetty lisukkeita. Anna tuotetyypin suomenkielinen nimi ja lisukkeiden suhteellinen osuus. Anna osuus pyöristettynä kokonaisluvuksi sarakkeessa EPROS. Järjestä tulos alenevan osuuden mukaisesti. Lisukkeettomia tuotteita ei ole tarpeen listata. Vihje: Kannattaa käyttää from-osaan upotettuja alikyselyitä. Huomioi tilatut tuotemäärät, sen sijaan lisukkeiden määrät voi jättää huomioimatta. malli
Y16 Selvitä mikä on kunkin alueen asiakasmäärä ja kuinka monta asiakasta kullakin alueella on yhtä alueelle erikoistunutta lähettiä kohden. Anna asiakasmäärä sarakkeessa CUST ja määrä lähettiä kohden sarakkeessa C_PER_BOY. malli

Erä 6: Tietokannan ylläpito

Huom: Ylläpito-operaatiot eivät muuta alkuperäistauluja (vaan tilapäiskopioita), joten jos teet kyselyn muuttamaasi tauluun ylläpito-operaatiosi jälkeen eivät muutokset näy taulussa. Voit siis yrittää operaatiota useasti ja lähtötilanne on aina sama.

U1 Yritys on palkannut uuden lähetin. Hänen nimensä on Pick Upp. Hänen pääasiallinen toiminta-alueensa on A03. Hänen tunnisteekseen on valittu PICK. Kirjaa tiedot kantaan. malli
U2 Patty P ryhtyy yrityksen asiakkaaksi. Hänen osoitteensa on Rocky Road 5E ja hänen puhelinnumeronsa on 234987. Sähköpostia hänellä ei ole. Hänelle myydään vain käteisellä. Rocky Road sijaitsee alueella A01. Asiakastunnukseksi hänelle annetaan nykyistä suurinta tunnusta yhtä suurempi numero. Lisää hänen tietonsa tietokantaan. malli
U3 Asiakas Frank S muuttaa osoitteeseen Market Square 6, 122. Samalla hänen asuinalueensa muuttuu alueeksi A02. Päivitä tietokanta malli
U4 Kaikkien tuotteiden hintaa korotetaan 10 prosentia. Hinta pyöristetään kuitenkin yhden desimaalin tarkkuuteen (funktio: round(arvo,desimaalit)). Kirjaa korotus kantaan. malli
U5 Aiemmin erillisenä peritty 2 euron toimituslisä päätetään lisätä tilauksen kokonaishintaan. Tee muutos niiden tilausten tietoihin, joille ei ole vielä kiinnitetty toimitusta. malli
U6 Aktiivisessa käytössä olevat taulut halutaan pitää pienenä. Kaikki ennen 2.1.2002 hoidetut toimitukset on jo kopioitu historiatauluihin. Poista kopioidut toimitusrivit (delivery) tietokannasta. malli
U7 Poista tuotevalikoimasta tuoteyksiköt, joita kukaan ei ole tilannut. malli
U8 Tilauksen 3023 kokonaishinta saattaa olla virheellinen. Laske uudelleen tilauksen kokonaishinta ja paivitä se tietokantaan. Ota mukaan tuotteet ilman lisukkeita. Lisukkeiden hinnan saisi mukaan suorittamalla perään toisen ylläpito-operaation, mutta se ei ole mahdollista tällä välineellä. Operaatiossa tarvitaan Oraclen syntaksia, jossa sijoitettava arvo määrätään alikyselyllä. malli