Views

Hva er et view?

Et view er en logisk eller virtuell tabell. Denne tabellen er resultatet av en eller flere relasjonelle operasjoner på basistabellene. Lagres i Data Dictionary.
Basistabell:Tabell hvor innholdet lagres fysisk på en disk av et RDBMS.

Hva kan views brukes til

Problemer

Syntax

CREATE VIEW view_navn
AS SELECT statement
   FROM basis_tabell
   WHERE krav
WITH CHECK OPTION;
Ikke alle views har et WHERE-krav
ORDER BY kan ikke ligge i CREATE VIEW
GROUP BY er lov
WITH CHECK OPTION gjør at brukere ikke kan legge til data i basistabellen gjennom et view hvis WHERE-kravene ikke er innfridd.

Eksempel 1:

medlemsnr etternavn fornavn adresse postnr telefon fodt nivaa ant_aar_medlem
1 Olsen Per Glitterheimen 2 2033 79 126754 13-07-1970 Videregående 5
2 Johansen Elna Ilderhaug 2035 79 129845 21-02-1974 Medium 3
3 Nilsen Anders Jerpeveien 45 2196 79 117640 06-12-1975 Nybegynner 1
CREATE VIEW telefonliste
AS SELECT fornavn, etternavn, telefon
   FROM medlemsregister
WITH CHECK OPTION;

SELECT * 
FROM telefonliste
ORDER BY etternavn;
fornavn etternavn telefon
Elna Johansen 79 129845
Anders Nilsen 79 117640
Per Olsen 79 126754

Eksempel 2:

student

snr nvn adr postnr tlf email fodt
10432 Ola Normann Bleikerstredet 4 1454 68 215678 olanor@hiho.no 14-09-1967
16129 Emma Dalmann Sommerstigen 64 1467 68 218734 emmadaal@hiho.no 05-03-1973
18752 Ine Aalseth Bruddstykket 3 1489 68 220956 ineaal@hiho.no 10-02-1975

kursresultat

snr edato fag kar
10432 10-12-1991 Sosiologi 2.3
10432 15-05-1992 Psykologi 1.7
10432 01-06-1992 Praktisk pedagogikk 1.2
16129 06-05-1994 Kriminologi 4.5
16129 01-06-1995 Kriminologi 3.7
18752 17-05-1996 Psykologi 1.2
18752 10-06-1996 Allmennmedisin 1.7
18752 13-12-1998 Kirurgi 1.5
CREATE VIEW eksamensliste(studentnr, fag, karakter)
AS SELECT k.snr, fag, kar
   FROM student s, kursresultat k
   WHERE s.snr = k.snr;

SELECT * 
FROM eksamensliste
ORDER BY studentnr;

eksamensliste

studentnr fag karakter
10432 Sosiologi 2.3
10432 Psykologi 1.7
10432 Praktisk pedagogikk 1.2
16129 Kriminologi 3.7
16129 Kriminologi 4.5
18752 Psykologi 1.2
18752 Allmennmedisin 1.7
18752 Kirurgi 1.5
SELECT studentnr, MIN(karakter) AS  best_resultat
FROM eksamensliste
GROUP BY studentnr
ORDER BY best_resultat;

eksamensliste

studentnr best_resultat
10432 1.2
18752 1.2
16129 3.7


CREATE VIEW eksamensliste2(studentnr, beste_karakter)
AS SELECT k.snr, MIN(kar)
   FROM student s, kursresultat k
   WHERE s.snr = k.snr
   GROUP BY k.snr;

SELECT * 
FROM eksamensliste2;

eksamensliste2

studentnr beste_karakter
10432 1.2
16129 3.7
18752 1.2

UPDATE, INSERT og DELETE i views

Eksempel 1:

isbn tittel forfatter utgitt sider
51-87452-02-1 Jonas Jens Bjørnebo 1967 329
32-65342-98-6 Emil i Lønneberget Astrid Lindgren 1969 60
32-56342-56-0 Lotta på Bråkmakergaten Astrid Lindgren 1971 103
65-43987-20-6 Døden på Oslo S Ingvar Ambjørnsen 1985 191
32-76308-09-2 Madikken Astrid Lindgren 1980 81
CREATE VIEW astrid_lindgren
AS SELECT isbn, tittel, utgitt, sider
   FROM bok
   WHERE forfatter = 'Astrid Lindgren';

SELECT * FROM astrid_lindgren;
isbn tittel utgitt sider
32-65342-98-6 Emil i Lønneberget 1969 60
32-56342-56-0 Lotta på Bråkmakergaten 1971 103
32-76308-09-2 Madikken 1980 81
UPDATE astrid_lindgren
SET sider = 85
WHERE isbn = '32-65342-98-6';

SELECT * FROM astrid_lindgren;
isbn tittel utgitt sider
32-65342-98-6 Emil i Lønneberget 1969 85
32-56342-56-0 Lotta på Bråkmakergaten 1971 103
32-76308-09-2 Madikken 1980 81
SELECT * FROM bok;
isbn tittel forfatter utgitt sider
51-87452-02-1 Jonas Jens Bjørnebo 1967 329
32-65342-98-6 Emil i Lønneberget Astrid Lindgren 1969 85
32-56342-56-0 Lotta på Bråkmakergaten Astrid Lindgren 1971 103
65-43987-20-6 Døden på Oslo S Ingvar Ambjørnsen 1985 191
32-76308-09-2 Madikken Astrid Lindgren 1980 81
INSERT INTO astrid_lindgren
VALUES('67-76341-04-2', 'Brødrene Løvehjerte', 1970, 150);

SELECT * FROM astrid_lindgren;
isbn tittel utgitt sider
32-65342-98-6 Emil i Lønneberget 1969 85
32-56342-56-0 Lotta på Bråkmakergaten 1971 103
32-76308-09-2 Madikken 1980 81
SELECT * FROM bok;
isbn tittel forfatter utgitt sider
51-87452-02-1 Jonas Jens Bjørnebo 1967 329
32-65342-98-6 Emil i Lønneberget Astrid Lindgren 1969 85
32-56342-56-0 Lotta på Bråkmakergaten Astrid Lindgren 1971 103
65-43987-20-6 Døden på Oslo S Ingvar Ambjørnsen 1985 191
32-76308-09-2 Madikken Astrid Lindgren 1980 81
67-76341-04-2 Brødrene Løvehjerte   1970 150
DELETE FROM astrid_lindgren
WHERE  isbn = '32-56342-56-0';

SELECT * FROM astrid_lindgren;
isbn tittel utgitt sider
32-65342-98-6 Emil i Lønneberget 1969 85
32-76308-09-2 Madikken 1980 81
SELECT * FROM bok;
isbn tittel forfatter utgitt sider
51-87452-02-1 Jonas Jens Bjørnebo 1967 329
32-65342-98-6 Emil i Lønneberget Astrid Lindgren 1969 85
65-43987-20-6 Døden på Oslo S Ingvar Ambjørnsen 1985 191
32-76308-09-2 Madikken Astrid Lindgren 1980 81
67-76341-04-2 Brødrene Løvehjerte   1970 150

Eksempel 2:

isbn tittel forfatter utgitt sider
51-87452-02-1 Jonas Jens Bjørnebo 1967 329
32-65342-98-6 Emil i Lønneberget Astrid Lindgren 1969 60
32-56342-56-0 Lotta på Bråkmakergaten Astrid Lindgren 1971 103
65-43987-20-6 Døden på Oslo S Ingvar Ambjørnsen 1985 191
32-76308-09-2 Madikken Astrid Lindgren 1980 81
CREATE VIEW astrid_lindgren2
AS SELECT isbn, tittel, utgitt, sider
   FROM bok
   WHERE forfatter = 'Astrid Lindgren'
WITH CHECK OPTION;

SELECT * FROM astrid_lindgren2;
isbn tittel utgitt sider
32-65342-98-6 Emil i Lønneberget 1969 60
32-56342-56-0 Lotta på Bråkmakergaten 1971 103
32-76308-09-2 Madikken 1980 81
UPDATE astrid_lindgren2
SET sider = 85
WHERE isbn = '32-65342-98-6';

SELECT * FROM astrid_lindgren2;
isbn tittel utgitt sider
32-65342-98-6 Emil i Lønneberget 1969 85
32-56342-56-0 Lotta på Bråkmakergaten 1971 103
32-76308-09-2 Madikken 1980 81
SELECT * FROM bok;
isbn tittel forfatter utgitt sider
51-87452-02-1 Jonas Jens Bjørnebo 1967 329
32-65342-98-6 Emil i Lønneberget Astrid Lindgren 1969 85
32-56342-56-0 Lotta på Bråkmakergaten Astrid Lindgren 1971 103
65-43987-20-6 Døden på Oslo S Ingvar Ambjørnsen 1985 191
32-76308-09-2 Madikken Astrid Lindgren 1980 81
INSERT INTO astrid_lindgren2
VALUES('67-76341-04-2', 'Brødrene Løvehjerte', 1970, 150);

FEIL på linje 1:
ORA-01402: brudd på WITH CHECK OPTION-skranke for WHERE-ledd i utsnitt
DELETE FROM astrid_lindgren2
WHERE  isbn = '32-56342-56-0';

SELECT * FROM astrid_lindgren2;
isbn tittel utgitt sider
32-65342-98-6 Emil i Lønneberget 1969 85
32-76308-09-2 Madikken 1980 81
SELECT * FROM bok;
isbn tittel forfatter utgitt sider
51-87452-02-1 Jonas Jens Bjørnebo 1967 329
32-65342-98-6 Emil i Lønneberget Astrid Lindgren 1969 85
65-43987-20-6 Døden på Oslo S Ingvar Ambjørnsen 1985 191
32-76308-09-2 Madikken Astrid Lindgren 1980 81