Mis on VIEW SQL-is?
VIEW on salvestatud SELECT-päring nimega — käitub nagu virtuaalne tabel. Andmeid ei salvestata eraldi, vaid iga kord kui kasutad vaadet, loetakse andmed originaaltabelitest.
Millal kasutada?
- Pikk ja keeruline päring, mida kasutad tihti
- Tahad varjata keerukust — kasutaja näeb ainult lihtsat tabelit
- Turvalisus — saad lubada ligipääsu vaatele, mitte originaaltabelile
Süntaks
sql
CREATE VIEW vaate_nimi AS
SELECT veerg1, veerg2
FROM tabel
WHERE tingimus;
Kasutamine:
sql
SELECT * FROM vaate_nimi;
Kustutamine:
sql
DROP VIEW vaate_nimi;
Sinu faili näited
Vaade 1 — mitu praktikakoha on igal firmal:
sql
CREATE VIEW vw_firma_praktikakohad AS
SELECT
firma.firmanimi,
COUNT(praktikabaas.praktikabaasID) AS praktikakohti
FROM praktikabaas
JOIN firma ON firma.firmaID = praktikabaas.firmaID
GROUP BY firma.firmanimi;
-- Kasutamine:
SELECT * FROM vw_firma_praktikakohad;
Ilma vaateta peaksid seda JOIN + COUNT + GROUP BY kombinatsiooni iga kord uuesti kirjutama.
Vaade 2 — sügisel sündinud juhendajad (sept, okt, nov):
sql
CREATE VIEW vw_sugisel_sundinud_juhendajad AS
SELECT *
FROM praktikajuhendaja
WHERE MONTH(synniaeg) IN (9, 10, 11);
-- Kasutamine:
SELECT * FROM vw_sugisel_sundinud_juhendajad;
Lisa näited
Vaade 3 — juhendajad koos nende firmaga ja palgaga:
sql
CREATE VIEW vw_juhendajad_firmaga AS
SELECT
praktikajuhendaja.eesnimi,
praktikajuhendaja.perekonnanimi,
praktikajuhendaja.palk,
firma.firmanimi
FROM praktikabaas
JOIN praktikajuhendaja
ON praktikabaas.juhendajaID = praktikajuhendaja.praktikajuhendajaID
JOIN firma
ON praktikabaas.firmaID = firma.firmaID;
SELECT * FROM vw_juhendajad_firmaga;
Vaade 4 — ainult üle keskmise palgaga juhendajad:
sql
CREATE VIEW vw_korgepalgalised AS
SELECT eesnimi, perekonnanimi, palk
FROM praktikajuhendaja
WHERE palk > (SELECT AVG(palk) FROM praktikajuhendaja);
SELECT * FROM vw_korgepalgalised;
VIEW vs tabel — lühidalt
| VIEW | Tabel | |
|---|---|---|
| Andmed salvestatud? | Loeb alati originaalist | Jah |
| Uueneb automaatselt? | Jah | Ainult kui ise lisad |
| Loomise käsk | CREATE VIEW | CREATE TABLE |
