IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi...

35
Andmebaasid IV praktikum Päringud

Transcript of IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi...

Page 1: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Andmebaasid

IV praktikum

Päringud

Page 2: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

PÄRINGUD

Page 3: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

SELECT

SELECT [DISTINCT]

{<veeruavaldised>}

FROM {<tabelid>}

[WHERE {<piirangud>}]

[GROUP BY {<veerud>}

[HAVING {<tingimus>}]]

[ORDER BY {<veerud>}];

Page 4: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

SELECT eesnimi, perenimi

FROM isik;

Arvo Mets

Maari Mustikas

Pjotr Pustota

Kalle Kivine

Malle Maasikas

Linda Sammal

Arvo Angervaks

Andrei Sosnov

Helina Hiis

Henno Hiis

Irys Sisalik

Maria Murakas

Maria Medvedovna

Ilona Polje

Liis Metsonen

Taivo Remmelgas

Anna Ristik

Mihkel Maakamar

Artur Muld

Urmas Ubin

Jelena Pirn

Toomas Umnik

Nadja Puhasmaa

SELECT * FROM isik;

Page 5: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

DISTINCT

SELECT DISTINCT eesnimi FROM isik;

SELECT DISTINCT eesnimi, perenimi

FROM isik ; ??

Arvo

Maari

Pjotr

Kalle

Malle

Linda

Andrei

Helina

Henno

Irys

Maria

Ilona

Liis

Taivo

Anna

Mihkel

Artur

Urmas

Jelena

Toomas

Nadja

Page 6: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

SELECT DISTINCT klubi FROM isik;

51

54

59

57

58

55

Page 7: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Avaldised

Veerud

Konstandid

Lihtoperatsioonid (liitmine, järjest kirjutamine, ..)

Funktsioonid

Agregeerivad funktsioonid

Page 8: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Konstandid

SELECT nimi, 0, CURRENT DATE, NULL FROM klubi;

Musta kivi kummardajad 0 2014-10-21 null

Võitmatu Valge 0 2014-10-21 null

Ruudu Liine 0 2014-10-21 null

Laudnikud 0 2014-10-21 null

Ajurebend 0 2014-10-21 null

Valge Mask 0 2014-10-21 null

Page 9: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Operaatorid

SELECT perenimi || ', ' || eesnimi, klubi + id

FROM isik;

Angervaks, Arvo 136

Sosnov, Andrei 137

Hiis, Helina 134

Hiis, Henno 135

Sisalik, Irys 132

Murakas, Maria 136

……..

Page 10: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

IF operaator

SELECT IF eesnimi='Maria' THEN

'***' ELSE eesnimi ENDIF,

perenimi FROM isik;

Arvo Mets

Maari Mustikas

Pjotr Pustota

Kalle Kivine

Malle Maasikas

Linda Sammal

Arvo Angervaks

Andrei Sosnov

Helina Hiis

Henno Hiis

Irys Sisalik

*** Murakas

*** Medvedovna

Ilona Polje

Liis Metsonen

Taivo Remmelgas

Anna Ristik

Mihkel Maakamar

Artur Muld

Urmas Ubin

Jelena Pirn

Toomas Umnik

Nadja Puhasmaa

Page 11: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Funktsioonid

SELECT

LEFT(eesnimi,1),

SUBSTRING(perenimi, 2, 4),

YEAR(CURRENT DATE)

FROM isik;

A ets 2014

M usti 2014

P usto 2014

K ivin 2014

M aasi 2014

L amma 2014

A nger 2014

A osno 2014

H iis 2014

H iis 2014

I isal 2014

M urak 2014

M edve 2014

I olje 2014

L etso 2014

T emme 2014

A isti 2014

M aaka 2014

A uld 2014

U bin 2014

J irn 2014

T mnik 2014

N uhas 2014

Page 12: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Agregeerivad funktsioonid

Count(*),

Count(distinct <veerg>)

Max(<avaldis>),

Min(<avaldis>)

Sum(<avaldis>)

NB! Ei saa kasutada niisama lihtsalt segiläbi

mitteagregeeritavate avaldistega!

SELECT eesnimi, COUNT(*) FROM isik; → VIGANE!

Page 13: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Agregeerivate f-nide näited

SELECT COUNT(*) FROM isik;

SELECT COUNT(DISTINCT eesnimi) FROM isik;

SELECT MIN(klubi), MAX(klubi) FROM isik;

SELECT MAX(eesnimi), MIN(perenimi) FROM isik;

SELECT AVG(klubi), SUM(IF klubi<id THEN klubi

ELSE id ENDIF) FROM isik;

Page 14: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Tulemustabeli veergude

nimed

SELECT perenimi || ', ' || eesnimi AS nimi FROM isik;

SELECT COUNT(*) AS arv FROM isik;

AS

Page 15: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Piiramine

WHERE {<loogiline avaldis>}

Loogiline avaldis:

[NOT] <avaldis> <operaator> <avaldis> |

<loogiline avaldis> [AND|OR] <loog.avald>

Operaatorid:

=, <, >, <> (!=) , ...., LIKE, IS, IN, BETWEEN,

...

Page 16: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

SELECT * FROM isik WHERE klubi=55 OR klubi=57;

SELECT * FROM isik WHERE klubi IN (55,57);

SELECT * FROM isik WHERE klubi BETWEEN 55 AND 57;

SELECT * FROM isik WHERE isikukood IS NULL;

Page 17: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

LIKE operaator

SELECT * FROM isik WHERE eesnimi LIKE 'm%';

SELECT * FROM isik WHERE eesnimi LIKE '_alle';

SELECT * FROM isik WHERE eesnimi LIKE

'a__[aeiouõäöü]%';

SELECT * FROM isik WHERE id LIKE '[8-9][1,3-4]';

Page 18: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

LIKE ohud

SELECT * FROM klubi WHERE nimi LIKE 'valge mask';

SELECT * FROM klubi WHERE nimi = 'valge mask';

Viimasel juhul kasutatakse indeksit (kiirem)!

Page 19: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Alampäringud

SELECT * FROM turniir

WHERE EXISTS (SELECT * FROM partii WHERE

partii.turniir = turniir.id AND (valge = 72 OR must = 72));

Page 20: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Järjestamine

... ORDER BY <veerud> [ASC | DESC]

SELECT eesnimi FROM isik ORDER BY eesnimi ASC

SELECT eesnimi FROM isik ORDER BY eesnimi DESC

SELECT eesnimi, perenimi FROM isik ORDER BY perenimi, eesnimi;

SELECT eesnimi, perenimi FROM isik ORDER BY 2, 1;

Page 21: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Mitme tabeli sidumine

päringusse

... FROM <tabel1> [[AS] <alias1>], <tabel2>...

Page 22: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

SELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi

FROM isik, klubi WHERE perenimi = 'Hiis';

Helina Hiis 55 59 Musta kivi kummardajad

Helina Hiis 55 57 Võitmatu Valge

Helina Hiis 55 55 Ruudu Liine

Helina Hiis 55 51 Laudnikud

Helina Hiis 55 54 Ajurebend

Helina Hiis 55 58 Valge Mask

Henno Hiis 55 59 Musta kivi kummardajad

Henno Hiis 55 57 Võitmatu Valge

Henno Hiis 55 55 Ruudu Liine

Henno Hiis 55 51 Laudnikud

Henno Hiis 55 54 Ajurebend

Henno Hiis 55 58 Valge Mask

Page 23: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

SELECT eesnimi, perenimi, klubi, klubi.id,

klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'

AND isik.klubi = klubi.id;

Helina Hiis 55 55 Ruudu Liine

Henno Hiis 55 55 Ruudu Liine

Page 24: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

WHERE vs JOIN

...FROM isik JOIN klubi ON isik.klubi = klubi.id

WHERE perenimi = 'Hiis';

...FROM isik KEY JOIN klubi WHERE perenimi = 'Hiis';

AGA, kui on mitu välisvõtit samasse tabelisse:

SELECT * FROM isik KEY JOIN partii; – VIGANE!

Page 25: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

“Loomulik side”

ABS otsib sarnaste nimedega veerge:

SELECT * FROM isik NATURAL JOIN klubi;

Toimub sidumine isik.id = klubi.id

Page 26: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Kes mängisid valgetega ja võitsid:

SELECT DISTINCT eesnimi, perenimi, valge_tulemus FROM

isik JOIN partii ON isik.id=partii.valge AND valge_tulemus=2;

Aga lisaks kõik teised isikud:

SELECT DISTINCT eesnimi, perenimi, valge_tulemus FROM

isik LEFT OUTER JOIN partii ON isik.id=partii.valge AND

valge_tulemus=2;

Page 28: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Grupeerimine

SELECT turniir, COUNT(*) FROM partii GROUP BY

turniir;

41 25

42 83

SELECT turniir.nimi, COUNT(*) FROM turniir, partii

WHERE turniir.id=partii.turniir GROUP BY turniir.nimi;

või

SELECT nimi, COUNT(*) FROM turniir KEY JOIN partii

GROUP BY nimi;

Page 29: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Kui palju on sama tähega algavaid perenimesid:

SELECT LEFT(perenimi,1) AS pn,

COUNT(*) AS arv FROM isik GROUP BY pn

ORDER BY arv DESC, pn ASC;

M 8

P 4

S 3

H 2

R 2

U 2

A 1

K 1

Page 30: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Palju on klubides liikmeid:

SELECT klubi.nimi, COUNT(*) FROM klubi KEY

JOIN

isik GROUP BY klubi.nimi ORDER BY klubi.nimi;

Ajurebend 4

Laudnikud 3

Musta kivi kummardajad 4

Ruudu Liine 3

Valge Mask 5

Võitmatu Valge 4

Page 31: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Piirang grupile - HAVING

Piirang agregeeritud väärtusele

Milliseid eesnimesid on rohkem kui 1:

SELECT eesnimi, COUNT(*) AS arv FROM isik

GROUP BY eesnimi HAVING arv > 1;

Maria 2

Arvo 2

Page 32: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Mitu päringut - üks tulemus

SELECT <päring1>

UNION [ALL] SELECT <päring2> ...

[ORDER BY <järjestus>]

Päringud on ilma ORDER BY’ta!

Päringute SELECT-osa struktuur peab olema samasugune!

Väärtused kordusteta, kui tahate kõiki -> ALL

Page 33: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Mitu päringut - üks tulemus (Näide)

SELECT LEFT(perenimi,1), COUNT(*),'p' FROM isik

GROUP BY LEFT(perenimi,1)

UNION ALL

SELECT LEFT(eesnimi,1), COUNT(*),'e' FROM isik

GROUP BY LEFT(eesnimi,1)

ORDER BY 2 DESC, 1;

Millist tähte kasutatakse enam nime alguses?

Vaadelda nii pere- kui ka eesnimesid. Järjestada tulemus

– nime algustäht, esinemiste arv ja ‘p’ või ‘e’ (perenimi /

eesnimi) mitte kasvavalt korduste arvu järgi.

Page 34: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

Ülesanne nr 4

Seletuseks järgnevatele ülesannetele:

• Info saada ühe päringuga.

• Konstante, mida küsimuses pole küsitud, mitte kasutada.

• Visuaalset vaatlemist mitte kasutada!

• Päring peab andma täpse tulemuse.

• Kirjutage enda jaoks päringud üles!

Page 35: IV praktikum Päringud - utSELECT eesnimi, perenimi, klubi, klubi.id, klubi.nimi FROM isik, klubi WHERE perenimi = 'Hiis'; Helina Hiis 55 59 Musta kivi kummardajad Helina Hiis 55 57

1. Leida klubi ‘Laudnikud’ liikmete nimekiri (eesnimi, perenimi) tähestiku

järjekorras.

2. Leida klubi ‘Laudnikud’ liikmete arv.

3. Leida V-tähega algavate klubide M-tähega algavate eesnimedega isikute

perekonnanimed (ja ei muud).

4. Leida kõige esimesena alanud partii algusaeg.

5. Leida partiide mängijad (valge ja must), mis algasid 04. märtsil ajavahemikus

9:00 kuni 11:00.

6. Leida valgetega võitnute (valge_tulemus=2) nimed (eesnimi, perenimi), kus

partii kestis 9 kuni 11 minutit (vt funktsiooni datediff()).

7. Leida rohkem kui 1 kord esinevad perekonnanimed (ja ei muud).

8. Leida klubid, kus on alla 4 liikme.

9. Leida kõigi Arvode poolt valgetega mängitud partiide arv.

10. Leida kõigi Arvode poolt valgetega mängitud partiide arv turniiride lõikes.

11. Leida kõigi Mariade mustadega mängitud mängudest saadud punktide arv

(tulemus = 2 on võit ja annab 1 punkti, tulemus = 1 on viik ja annab pool punkti).

12. Leida partiide keskmine kestvus turniiride kaupa (tulemuseks on tabel 2

veeruga: turniiri nimi, keskmine partii pikkus)