4 Harjoitus 3: SQL:n perusteet
Harjoituksen sisältö - Harjoituksessa tehdään muutamia SQL-hakuja.
Harjoituksen tavoite - Harjoituksen tarkoituksena on tutustua SQL-kieleen.
4.0.1 Valmistautuminen
Avaa pgAdmin selaimeen ja kirjaudu sisään. Avaa Query Tool (Valitse trainingdatabase -> Ylhäältä Tools -> Query Tool).
4.0.2 Yksinkertaisia SQL-hakuja
4.1 Harjoitus 3.1
Seuraavaksi tutkitaan hiukan edellisessä harjoituksessa ladattuja paikkatietoaineistoja:
SELECT
kunta_ni1
FROM
nlsfi.hallintoalue;Hakuja voidaan rajoittaa WHERE–lausekkeella:
SELECT
kunta_ni1, wkb_geometry
FROM
nlsfi.hallintoalue
WHERE
maaku_ni1 = 'Lappi';SQL-lauseisiin voidaan myös liittää erilaisia funktioita. Funktioiden avulla voidaan esimerkiksi laskea keskiarvoja tai keskihajontoja. Seuraavassa tarkastellaan kuntien nimien pituuksia:
SELECT
avg(char_length(kunta_ni1)), stddev(char_length(kunta_ni1))
FROM
nlsfi.hallintoalue
WHERE
maaku_ni1 = 'Uusimaa';Seuraavalla SQL-lauseella saamme selville, missä maakunnissa on keskimäärin pisimmät kuntien nimet:
SELECT
maaku_ni1, avg(char_length(kunta_ni1))
FROM
nlsfi.hallintoalue
GROUP BY
maaku_ni1
ORDER BY
avg(char_length(kunta_ni1)) desc;4.2 Harjoitus 3.2
Missä maakunnassa on keskimäärin pisimmät kuntien nimet?
SELECT
...
FROM
...
GROUP BY
...
ORDER BY
... desc
LIMIT ...;-- Täydennä tähän kyselyyn oikeat sarakkeet, skeema ja taulu. Tarkista millä funktiolla
-- saat laskettua keskiarvon. Käytä char_length() funktiota, jolla saat palautettua
-- merkkijonon pituuden.
SELECT
maakunta, keskiarvo_funktio(char_length(kunta))
FROM
skeema.taulu
GROUP BY
maakunta
ORDER BY
keskiarvo_funktio(char_length(kunta)) desc
LIMIT 1;SELECT
maaku_ni1, avg(char_length(kunta_ni1))
FROM
nlsfi.hallintoalue
GROUP BY
maaku_ni1
ORDER BY
avg(char_length(kunta_ni1)) desc
LIMIT 1;4.3 Harjoitus 3.3
Missä maakunnassa on keskimäärin lyhimmät kuntien nimet?
SELECT
...
FROM
...
GROUP BY
...
ORDER BY
... asc
LIMIT ...;-- Täydennä tähän kyselyyn oikeat sarakkeet, skeema ja taulu. Tarkista millä funktiolla
-- saat laskettua keskiarvon. Käytä char_length() funktiota, jolla saat palautettua
-- merkkijonon pituuden.
SELECT
maakunta, keskiarvo_funktio(char_length(kunta))
FROM
skeema.taulu
GROUP BY
maakunta
ORDER BY
keskiarvo_funktio(char_length(kunta)) asc
LIMIT 1;SELECT
maaku_ni1, avg(char_length(kunta_ni1))
FROM
nlsfi.hallintoalue
GROUP BY
maaku_ni1
ORDER BY
avg(char_length(kunta_ni1)) asc
LIMIT 1;4.4 Harjoitus 3.4
Mikä on Suomen pisin kunnan nimi?
SELECT
...
FROM
...
ORDER BY
...
LIMIT-- Täydennä tähän kyselyyn oikeat sarakkeet, skeema ja taulu. Valitse funktio,
-- jolla saat tietoon merkkijonon pituuden.
SELECT
kunta
FROM
skeema.taulu
ORDER BY
merkkijonon_pituus(kunta) desc
LIMIT 1;SELECT
kunta_ni1 as "Kunta"
FROM
nlsfi.hallintoalue
ORDER BY
char_length(kunta_ni1) desc
LIMIT 1;4.5 Harjoitus 3.5
Montako 5 kirjaimista suomenkielistä kunnan nimeä Suomessa on?
WITH ... AS
(
SELECT ...
UNION
SELECT ...
)
SELECT
...
FROM
...;-- käytä CTE (Common Table Expression)- lauseketta
WITH ltr5 AS
(
-- Valitse kunnat, jossa kunnan ykköskieli (kieli_ni1) on 'Suomi' ja kunnan suomenkielinen nimi on
-- viisi merkkiä pitkä.
SELECT
...
FROM
...
WHERE
... AND ...
UNION -- yhdistä kyselyiden tulokset UNION- operaattorilla
-- valitse kunnat, jossa kunnan kakkoskieli (kieli_ni2) on 'Suomi' ja kunnan suomenkielinen nimi on
-- viisi merkkiä pitkä.
-- Huomioi oikea kunnan nimen sarake (kunta_ni1 vai kunta_ni2)
SELECT
...
FROM
...
WHERE
... AND ...
)
SELECT
count() AS ... -- käytä count() funktiota (valitse yllä määritellystä CTE:stä sopiva sarake).
-- Voit myös määrittää sille aliaksen 'AS'- lausekkeen jälkeen.
FROM
...; -- viittaa aikaisemmin määriteltyyn CTE:henWITH ltr5 AS
(
SELECT
kunta_ni1 as "Kunta", maaku_ni1 as "Maakunta", char_length(kunta_ni1) as "Pituus",
kieli_ni1, 'Ykköskieli' as "Kielisyys"
FROM
nlsfi.hallintoalue
WHERE
char_length(kunta_ni1) = 5 AND kieli_ni1 = 'Suomi'
UNION
SELECT
kunta_ni2 as "Kunta", maaku_ni2 as "Maakunta", char_length(kunta_ni2) as "Pituus",
kieli_ni2, 'Kakkoskieli' as "Kielisyys"
FROM
nlsfi.hallintoalue
WHERE
char_length(kunta_ni2) = 5 AND kieli_ni2 = 'Suomi'
)
SELECT
count("Kunta") AS "5-kirjaimisia suomenkielisiä kunta"
FROM
ltr5;4.6 Harjoitus 3.6
Missä kunnissa suomen- ja ruotsinkielinen nimi on eri, mutta samanpituinen? Järjestä tulokset kunnan nimen pituuden mukaan laskevasti.
SELECT
...
FROM
...
WHERE
...
ORDER BY
... DESC;-- Täydennä oikeat sarakkeet
SELECT
kunnan_nimi_fi, kunnan_nimi_sv, char_length(kunnan_nimi_fi) AS "Pituus"
FROM
nlsfi.hallintoalue
WHERE
kunnan_nimi_fi ... kunnan_nimi_sv AND char_length(kunnan_nimi_fi) ... char_length(kunnan_nimi_sv)
-- korvaa tyhjäksi jätetyt kohdat '...' oikeilla operaattoreilla
-- kts. tarvittaessa linkki alhaalta dokumentaatioon
ORDER BY
char_length(kunnan_nimi_fi) DESC;SELECT
kunta_ni1, kunta_ni2, char_length(kunta_ni1) AS "Pituus"
FROM
nlsfi.hallintoalue
WHERE
kunta_ni1 <> kunta_ni2 AND char_length(kunta_ni1) = char_length(kunta_ni2)
ORDER BY
char_length(kunta_ni1) DESC;