Tehtävä H1 - Noppa

Tietokantojen perusteet 2015
Huomaa, että tämän dokumentin lopussa on kotitehtävä, joka sinun tulee ratkaista itsenäisesti ja esitellä
tuo ratkaisusi seuraavissa harjoituksissa opettajalle.
SQL-harjoitus
Alla olevassa ohjeessa kirjoitettava koodi on korostettu courier-fontilla. Mikäli jokin osa komennosta
on korvattava jollakin muulla tekstillä, se osa on merkitty <hakasten väliin>, tällöin itse ympäröiviä hakasia
ei tule kirjoittaa komennon yhteydessä.
Yhteyden luominen palvelimelle, jossa MySQL sijaitsee (Linux, Mac)
•
•
Avaa järjestelmän Terminal-ikkuna.
Avaa SSH-yhteys palvelimelle opetus-tol.oulu.fi kirjoittamalla komentoriville:
ssh -l <käyttäjätunnus ilman sulkuja> opetus-tol.oulu.fi
−
Käyttäjätunnuksena käy pajun tunnus ja salasanana pajun salasana.
MySQL:n käyttö
Kirjoita seuraava komento, jossa tietokannan käyttäjätunnus on pääsääntöisesti sama kuin pajun
tunnuksesi ja salasanan saat harjoitusten vetäjältä. Huomaa, että pajun salasana ei käy, koska
palvelinkone (=opetus-tol.oulu.fi) ja mysql-palvelin sillä ovat eri asioita!
mysql –u <käyttäjätunnus_tähän_ilman_sulkuja> –p
(siis esim.: mysql –u testitunnus –p )
Edellä käynnistetään “MySQL monitor”-ohjelma. Komennolla mysql –-help saa selville valitsimien
merkityksen (tehtävä ennen SQL-ikkunan avaamista).
Hakutehtävien esimerkkitietokanta on tol
(use tol)
MySQL monitor -ohjelmasta poistutaan komennoilla quit tai exit.
Omat ratkaisut voi ja kannattaa tallettaa halutessaan tekstitiedostoon.
Muutama peruskomento
SHOW DATABASES;
Näyttää kaikki tietokannat - myös sellaiset, joihin ei oikeuksia.
USE <DATABASE>;
Valitaan käytettävä tietokanta.
SHOW TABLES;
Näyttää valitun tietokannan taulut.
SELECT * FROM <TABLE>; Tulostaa taulun kaikki tiedot.
DESCRIBE <TABLE>; Näyttää taulun rakenteen (sarakkeiden nimet ja tietotyypit).
Tietokantojen perusteet 2015
Yksinkertaiset select-lauseet
1. Tulosta kaikkien osastojen kaikki tiedot.
2. Hae kaikkien projektien nimet ja budjetit.
3. Tulosta kaikkien niiden projektien numerot, joille joku työntekijä työskentelee (vihje: DISTINCT).
Ehdolliset select-lauseet
4. Hae kaikki puolison tai avopuolison roolissa olevat omaiset.
5. Hae niiden Oulussa asuvien työntekijöiden nimet ja henkilötunnukset, joiden palkka on suurempi kuin
30000 ja joilla on ohjaaja (vihje: IS NOT NULL). Tulosta henkilöt nimen mukaan aakkosjärjestyksessä.
6. Tulosta kaikki niiden projektien nimet, joiden osasto alkaa B-kirjaimella.
Ehdolliset select-lauseet, joissa käytetään funktioita
7. Hae osastolla A1 työskentelevien työntekijöiden lukumäärä ja heihin kuluvien palkkamenojen
kokonaissuuruus (= palkkojen summa).
8. Hae kuinka paljon keskimäärin työntekijä käyttää työtunteja projekteissa E10-E20 (vihje: AVG).
9. Tulosta kaikkien työntekijöiden nimet, joiden katuosoitteessa esiintyy t-kirjain (vihje: kenttä LIKE
'%etsittävä%' esim. nimi LIKE '%mu%' toteutuu Sumulalla).
Yksinkertaiset (luonnolliset) liitokset
10. Tee kysely, joka tulostaa kaikkien osastojen nimet ja budjetit sekä niiden ko. osastojen projektien nimet
ja budjetit. järjestä tulosjoukko osaston nimen mukaan.
12. Tulosta projektiin HUUHKAJA jokaisen työntekijän joka ko. projektille on tehnyt työtä työtunnit.
Liitokset itseensä
14. Tulosta niiden työntekijöiden nimet, joiden kotipaikkakunta on eri kuin ohjaajansa. (vihje: FROM
tyolainen a, tyolainen b).
Alikyselyt
15. Tulosta niiden projektien nimet, joille ei kukaan työskentele yhtäkään tuntia.
Tietokantojen perusteet 2015
Taulun luonti
Oheinen ER-kaavio voisi olla osa elektronisen kaupankäynnin järjestelmää. Luo ER-kaavion pohjalta
seuraavansisältöiset taulurakenteet:
Tuote: numero, nimi, hinta, ryhmä, kuvaus
Asiakas: tunnus, salasana, nimi, email, VISA
Ostoskori: tilauspäivä, tuote (FK), asiakas (FK)
Valitse yksittäisille sarakkeille (attribuutit) “järkevät” tietotyypit ja tauluille perusavaimet. Tietotyyppien
valinnasta
löytyy
alustavasti
vinkkiä
Developer
Shed
-yhteisön
MySQL-oppaasta:
http://www.devshed.com/c/a/MySQL/Beginning-MySQL-Tutorial/2/
salasana
nimi
numero
tilauspäivä
hinta
TUOTE
tuoteryhmä
N
kuvaus
Ostoskori
tunnus
nimi
ASIAKAS
M
email
VISA
CREATE TABLE-komennon esimerkki:
CREATE TABLE taulu (
attribuutti1
int(4) NOT NULL,
attribuutti2
varchar(20),
attribuutti3
varchar(40),
PRIMARY KEY(attribuutti1),
FOREIGN KEY(attribuutti2) REFERENCES taulu2(attribuuttiX)
ON DELETE CASCADE
);
Tarkista aluksi CREATE TABLE komennon syntaksi MySQL-oppaasta ja mieti mitä kukin esimerkin rivi
tekee.
16. Luo jokaisesta taulurakenteesta CREATE TABLE-käskyllä tietokantataulu test -kantaan (käytä use
test -komentoa ensin) tai oman tunnuksesi nimiseen kantaan. test-kantaa käyttäessäsi nimeä jokainen
taulu siten, että nimen loppuun liität oman tunnuksesi, esim tuote_testitunnus. Tällöin työsi ei mene
sekaisin toisten harjoitusten kanssa.
Lisäys, poisto ja muokkaus
17. Luo jokaiseen tauluun ainakin yksi rivi. Käytä INSERT-komentoa (tarkista syntaksi).
18. Muokkaa jonkin tuotteen hintaa. (Käytä UPDATE-komentoa).
19. Muokkaa ostoskorin sisältöä siten, että asiakkaan tunnus ja tilauspäivä säilyvät, mutta tuotteen
numeroksi tulee arvo NULL
Tietokantojen perusteet 2015
20. Lisää vielä kaksi riviä jokaiseen tauluun.
21. Poista Asiakas-taulusta keskimmäinen asiakas. (Voit käyttää jotakin asiakkaan tunnistavaa kenttää
yksilöimään ”keskimmäisen” asiakkaan.)
22. Poista tuote-taulusta viimeisin tuote.
Lopuksi...
23.
Poista luomasi taulut tunnuksesi nimisestä kannasta komennolla
DROP TABLE <taulun_nimi>;
Kotitehtävä:
Tavoite: kertaa ohjelmoinnin peruskäsitteet, ja tutustu miten ne toteutetaan Javalla.
Tutustu kurssisivuilla olevaan materiaaliin ja tee seuraavat vaatimukset täyttävä Java-ohjelma nimeltä Muistipeli:
Ohjelma kysyy käyttäjältä 10 lukua ja 10 merkkijonoa tekstiä pareittain (luku, merkkijono, luku merkkijono,...), luo
jokaisesta luku-merkkijono -parista oman olion ja tallettaa ko. olion samaan taulukkoon toisten vastaavien olioiden
kanssa. Kun kaikki 10 oliota ovat taulukossa, ohjelma arpoo yhden kokonaisluvun väliltä 1-10, ja kysyy käyttäjältä
mikä on kyseistä numeroa vastaava syötetty merkkijono. Käyttäjä syöttää merkkijonon, ja mikäli merkkijono on sama
kuin aiemmin olioon syötetty, tulostaa ohjelma onnitteluviestin ja päättyy. Mikäli merkkijonot eivät ole samat,
ohjelma tulostaa tästäkin tiedotteen (mutta siis erilaisen kuin onnistuneessa tapauksessa), ja päättyy.
Pyri tekemään ohjelma, joka toimii ja täyttää kaikki em. ehdot. Mikäli tämä ei onnistu, tee joka tapauksessa
toimiva Java-ohjelma, ja täytä edellä mainituista ehdoista mahdollisimman monta. Tarkoitus on tutustua
mahdollisimman moneen Java-kielen elementtiin, joita tarvitaan osion 5 suorittamisessa, joten teet tätä tehtävää
omaksi hyödyksesi, etkä niinkään kurssin suorittamiseksi.