Commit 298ed7e1 authored by K9272's avatar K9272
Browse files

H2-4

parent 535e9de6
......@@ -3,4 +3,10 @@
Tietokannat-opintojakson palautukset
## Viikkotehtävät
[H1](harjoitukset/1.md)
\ No newline at end of file
[H1](harjoitukset/H1.md)
[H2](harjoitukset/H2.md) (Myöhässä)
[H3](harjoitukset/H3.md) (Myöhässä)
[H4](harjoitukset/H4.md)
\ No newline at end of file
# Viikko 2 SQL-perusteet, työkalujen peruskäyttöä
## T1
A. Hae kaikki kaupungit (cities); kaikki sarakkeet näkyviin
![](H2/T1A.png)
B. Hae kaikkien kaupunkien nimet ja asukasluvut. Lajittele asukasmäärän mukaan pienimmästä suurimpaan.
![](H2/T1B.png)
C. Mitä eri silmien värejä opiskelijoilla on? Kukin väri saa tulostua vain kerran ja tulosjoukossa saa olla vain yksi sarake.
![](H2/T1C.png)
D. Hae opiskelijoiden suku- ja etunimet, silmien väri ja tulot (incomes): incomes-sarakkeen otsikoksi pitää tulla Vuosipalkka.
![](H2/T1D.png)
E. Lajittele edellinen tehtävä ensijaisesti suku ja toissijaisesti etunimen mukaan kummatkin laskevassa järjestyksessä (käänteinen aakkosjärjestys).
![](H2/T1E.png)
## T2
A. Hae niiden opiskelijoiden suku- ja etunimet, joiden silmien väri on 'Sininen'.
```
MariaDB [student_db]> SELECT lastname, firstname FROM students WHERE eyecolor = "Sininen";
+----------+-----------+
| lastname | firstname |
+----------+-----------+
| Tiainen | Sini |
| Vainio | Vilja |
| Vainio | Elo |
+----------+-----------+
3 rows in set (0.000 sec)
```
B. Listaa ne opiskelijat, joilla on pienemmät tulot kuin 14010.22? Hae nimet ja tulot.
```
MariaDB [student_db]> SELECT lastname,firstname,incomes FROM students WHERE incomes < 14010.22;
+----------+-----------+----------+
| lastname | firstname | incomes |
+----------+-----------+----------+
| Guru | Ken | 12010.12 |
| Vainio | Vilja | 0.00 |
| Vainio | Elo | 0.00 |
| Rahainen | Muu | 13010.12 |
+----------+-----------+----------+
4 rows in set (0.000 sec)
```
C. Listaa ne opiskelijat, joilla on pienemmät tai yhtäsuuret tulot kuin 14010.22? Hae nimet ja tulot. Lajittele palkan mukaan laskevasti.
```
MariaDB [student_db]> SELECT lastname,firstname,incomes FROM students
-> WHERE incomes <= 14010.22
-> ORDER BY incomes DESC;
+----------+-----------+----------+
| lastname | firstname | incomes |
+----------+-----------+----------+
| Saurus | Tino | 14010.22 |
| Rahainen | Muu | 13010.12 |
| Guru | Ken | 12010.12 |
| Vainio | Vilja | 0.00 |
| Vainio | Elo | 0.00 |
+----------+-----------+----------+
5 rows in set (0.000 sec)
```
D. Hae ne turkulaiset (hometown = 1) opiskelijat, joiden silmien väri on 'Sininen'. Tulosta sarakkeet studentID, lastname, firstname, eyecolor ja hometown (kokonaisluku).
```
MariaDB [student_db]> SELECT studentID,lastname,firstname,eyecolor,hometown FROM students
-> WHERE hometown = 1 and eyecolor = "Sininen";
+-----------+----------+-----------+----------+----------+
| studentID | lastname | firstname | eyecolor | hometown |
+-----------+----------+-----------+----------+----------+
| 2003 | Tiainen | Sini | Sininen | 1 |
+-----------+----------+-----------+----------+----------+
1 row in set (0.000 sec)
```
E. Listaa kaikki turkulaiset opiskelijat ja heidän lisäksi kaikki silmien väriltään harmaat. Tulosta kaikki sarakkeet.
```
MariaDB [student_db]> SELECT studentID,lastname,firstname,eyecolor,hometown FROM students
-> WHERE hometown = 1 OR eyecolor = "Harmaa";
+-----------+----------+-----------+----------+----------+
| studentID | lastname | firstname | eyecolor | hometown |
+-----------+----------+-----------+----------+----------+
| 2001 | Guru | Ken | Ruskea | 1 |
| 2002 | Saurus | Tino | Ruskea | 1 |
| 2003 | Tiainen | Sini | Sininen | 1 |
| 2006 | Rahainen | Muu | Harmaa | 2 |
+-----------+----------+-----------+----------+----------+
4 rows in set (0.000 sec)
```
## T3
A. Hae kaikki sarakkeet opiskelijoista, joiden veroprosentti (taxrate) ei ole 0.00
![](H2/T3A.png)
B. Hae turkulaisista tai tamperelaisista opiskelijoista ne, joiden tulot ovat yli 14000.
![](H2/T3B.png)
C. Hae turkulaisista tai tamperelaisista opiskelijoista ne, joiden tulot ovat joko 12010.12 tai 18010.12
![](H2/T3C.png)
D. Hae opiskelijat, joiden sukunimi alkaa A-kirjaimella.
![](H2/T3D.png)
E. Hae opiskelijat, joiden sukunimessä esiintyy merkkijono 'ai'
![](H2/T3E.png)
## T4
A. Hae opiskelijat, joiden sukunimen toinen merkki ei ole a.
B. Hae opiskelijat, joiden veroprosentti on välillä 0.00 - 5.10 Lajittele veroprosentin mukaan. (Käytä BETWEEN-määrettä)
C. Hae opiskelijat, joiden veroprosentti on 0.00, 6.20 tai 7.30 (käytä IN-määrettä)
D. Hae opiskelijat, joiden kotikunta ei ole tiedossa (on NULL)
E. Hae opiskelijat, joiden silmien värin EI tiedetä olevan 'Sininen'.
Tehty [python skriptillä](H1/T4.py), joka käyttää mariadb moduulia.
```
(base) PS C:\Users\teemu\source\JAMK\ttc2020-tietokannat> python .\harjoitukset\H2\H4.py
SELECT * FROM students WHERE lastname NOT LIKE "_a%"
(2001, 'Guru', 'Ken', datetime.date(2001, 11, 11), 'Ruskea', Decimal('12010.12'), Decimal('5.10'), 1)
(2003, 'Tiainen', 'Sini', datetime.date(2003, 11, 11), 'Sininen', Decimal('16010.32'), Decimal('7.30'), 1)
(2007, 'Alainen', 'Kim', datetime.date(2007, 11, 11), None, Decimal('18010.12'), Decimal('8.80'), 2)
(2008, 'Ana', 'Ruut', datetime.date(2008, 11, 11), None, Decimal('20010.12'), Decimal('9.90'), None)
SELECT * FROM students WHERE taxrate BETWEEN 0.00 AND 5.10 ORDER BY taxrate
(2004, 'Vainio', 'Vilja', datetime.date(2004, 11, 11), 'Sininen', Decimal('0.00'), Decimal('0.00'), 3)
(2005, 'Vainio', 'Elo', datetime.date(2005, 11, 11), 'Sininen', Decimal('0.00'), Decimal('0.00'), 3)
(2001, 'Guru', 'Ken', datetime.date(2001, 11, 11), 'Ruskea', Decimal('12010.12'), Decimal('5.10'), 1)
SELECT * FROM students WHERE taxrate IN (0.00, 6.20, 7.30)
(2002, 'Saurus', 'Tino', datetime.date(2002, 11, 11), 'Ruskea', Decimal('14010.22'), Decimal('6.20'), 1)
(2003, 'Tiainen', 'Sini', datetime.date(2003, 11, 11), 'Sininen', Decimal('16010.32'), Decimal('7.30'), 1)
(2004, 'Vainio', 'Vilja', datetime.date(2004, 11, 11), 'Sininen', Decimal('0.00'), Decimal('0.00'), 3)
(2005, 'Vainio', 'Elo', datetime.date(2005, 11, 11), 'Sininen', Decimal('0.00'), Decimal('0.00'), 3)
SELECT * FROM students WHERE hometown IS NULL
(2008, 'Ana', 'Ruut', datetime.date(2008, 11, 11), None, Decimal('20010.12'), Decimal('9.90'), None)
SELECT * FROM students WHERE eyecolor != "Sininen" OR eyecolor IS NULL
(2001, 'Guru', 'Ken', datetime.date(2001, 11, 11), 'Ruskea', Decimal('12010.12'), Decimal('5.10'), 1)
(2002, 'Saurus', 'Tino', datetime.date(2002, 11, 11), 'Ruskea', Decimal('14010.22'), Decimal('6.20'), 1)
(2006, 'Rahainen', 'Muu', datetime.date(2006, 11, 11), 'Harmaa', Decimal('13010.12'), Decimal('5.80'), 2)
(2007, 'Alainen', 'Kim', datetime.date(2007, 11, 11), None, Decimal('18010.12'), Decimal('8.80'), 2)
(2008, 'Ana', 'Ruut', datetime.date(2008, 11, 11), None, Decimal('20010.12'), Decimal('9.90'), None)
```
## T5
Vertaile ytimekkäästi (2-5 virkettä) mysql-, MySQL Workbench- ja HeidiSQL-ohjelmien ensikäyttökokemuksia ja soveltuvuutta eri käyttötarpeisiin. Voitko käyttää kaikkia ohjelmia kotoa käsin ja millä ehdoilla? Tämän tehtävän palautus tekstimuodossa SQL-vastaustesi jälkeen (jos kaikki vastauksesi tekstimuodossa yhdessä tiedostossa) tai muulla haluamallasi tavalla esim.
* HeidiSQL:n saa kätevästi käyntiin ilman asennuksia.
* Workbenchissä on autocomplete esimerkiksi kenttien nimille.
* mysql toimii vaikka ssh:n yli.
**[Oma kanta on käytössä](H2/OMA.png)**
\ No newline at end of file
# T4:n kyselyt mariadb moduulia käyttäen
# Perustuu https://mariadb.com/resources/blog/how-to-connect-python-programs-to-mariadb/
# Module Imports
import mariadb
import sys
# Connect to MariaDB Platform
try:
conn = mariadb.connect(
user="Eipä",
password="Tallenneta",
host="Näitä",
port="Julkisesti",
database="Tänne"
)
except mariadb.Error as e:
print(f"Error connecting to MariaDB Platform: {e}")
sys.exit(1)
# Get Cursor
cur = conn.cursor()
kyselyt=['SELECT * FROM students WHERE lastname NOT LIKE "_a%"',
'SELECT * FROM students WHERE taxrate BETWEEN 0.00 AND 5.10 ORDER BY taxrate',
'SELECT * FROM students WHERE taxrate IN (0.00, 6.20, 7.30)',
'SELECT * FROM students WHERE hometown IS NULL',
'SELECT * FROM students WHERE eyecolor != "Sininen" OR eyecolor IS NULL']
for kysely in kyselyt:
cur.execute(kysely)
print(cur.statement)
result = cur.fetchall()
for row in result:
print(row)
print()
conn.close()
\ No newline at end of file
# Viikko 3 Tietokantojen suunnittelu, käsiteanalyysi, käsitemallinnus
## T1
![](H3/T1.drawio.png)
* Opintojaksolle voi kuulua tehtäväsarjoja, Tehtäväsarja kuuluu yhdelle opintojaksolle
* Tehtäväsarjalle voi kuulua tehtäviä, tehtävä kuuluu yhdelle tehtäväsarjalle
* Tehtävään voi kuulua palautuksia, mutta vain yksi per opiskelija.
* Opiskelijalla voi olla useita palautuksia, mutta kunkin palautuksen voi olla palauttanut vain yksi opiskelija.
## T2
![](H3/T2.drawio.png)
*Päätin, että päivämäärä tallennetaan reissun yhteyteen, vaikka tarkempaa dataa saisi tallettamalla sen jokaiselle saaliille erikseen. Lisäksi teoriassa reissu voi kestää useamman päivän...*
* Kalareissulle osallistuu yksi kalastaja ja kalareissu kohdistuu yhteen kalapaikkaan
* Kalastajalla voi olla useita kalareissuja
* Kalapaikkaan voi olla useita kalareissuja
* Kalareissuilta voidaan saada useita kalasaaliita, kalasaalis voidaan saada vain yhdeltä kalareissulta
<mxfile host="app.diagrams.net" modified="2022-02-06T17:43:04.592Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4814.0 Safari/537.36 Edg/99.0.1135.5" etag="Prg8VL-IGK9TwR24YEwv" version="16.4.3" type="device"><diagram id="KepP1VvvUNOVQlGIHu2y" name="Page-1">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</diagram></mxfile>
\ No newline at end of file
<mxfile host="app.diagrams.net" modified="2022-02-06T17:42:23.259Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4814.0 Safari/537.36 Edg/99.0.1135.5" etag="AlUjv_9Q9ra6MhJhpu-K" version="16.4.3" type="device"><diagram id="97AjwD97zR6HUY8Gz25j" name="Page-1">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</diagram></mxfile>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment