Omslaget. Klicka här för att gå till bokens hemsida.

Databasteknik: Svar till övningar - kapitel 8

Övning 1

select count(*)
from Webbsida;

Övning 2

Det här ger bara ungefär rätt svar, eftersom till exempel webbsidan http://www.foo.dk/blaha.semla kommer med i svaret! Om man har en databashanterare som klarar similar to och inte bara like, kan man skriva ett bättre where-villkor.
select count(*)
from Webbsida
where Adress like '%.se%';

Övning 3

I den första tryckningen av boken råkade det här bli samma fråga som i övning 7 här nedan, nämligen om hur många ord som det i genomsnitt finns på en webbsida.

Inför den nya tryckning som gjordes våren 2007, ändrades övningen till att i stället handla om på hur många webbsidor som ordet flogiston förekommer. Svaret på den nya frågan:

select count(*)
from Sokord, Finns
where Sokord.Id = Finns.Sokord
and Sokord.Ord = 'flogiston';

Övning 4

Vi väljer att tolka "gör en tabell" inte som att en tabell ska skapas med create table, utan som att man vill ha tabellen som svaret på en fråga.
select Sokord.Id, Sokord.Ord, count(*) as Antal
from Sokord, Finns
where Sokord.Id = Finns.Sokord
group by Sokord.Id, Sokord.Ord
order by Antal desc;

Övning 5

create view VanligaOrd as
select Sokord.Id, Sokord.Ord, count(*) as Antal
from Sokord, Finns
where Sokord.Id = Finns.Sokord
group by Sokord.Id, Sokord.Ord;

select Ord
from VanligaOrd
where Antal = (select max(Antal)
               from vanligaord);

Övning 6

Vi väljer att tolka "gör en tabell" inte som att en tabell ska skapas med create table, utan som att man vill ha tabellen som svaret på en fråga.
select Sokord.Id, Sokord.Ord, count(Finns.Sokord)
from Sokord left outer join Finns on Sokord.Id = Finns.Sokord
group by Sokord.Id, Sokord.Ord
order by Sokord.Ord;

Övning 7

Vi antar att frågan gäller antalet unika ord, och inte antalet förekomster, för antalet förekomster finns ju inte i databasen.
create view Ordantal(Webbsida, Antal) as
select Webbsida, count(*)
from Finns
group by Webbsida;

select avg(Antal)
from Ordantal;

Övning 8

create view Ordantal(Webbsida, Antal) as
select Webbsida, count(*)
from Webbsida, Finns
where Webbsida.Id = Finns.Webbsida
and Adress like '%.se%'
group by Webbsida;

select avg(Antal)
from Ordantal;

Övning 9

create view Ordantal(Webbsida, Antal) as
select Webbsida.Id, count(Finns.Sokord)
from Webbsida left outer join Finns on Webbsida.Id = Finns.Webbsida
where Adress like '%.se%'
group by Webbsida.Id;

select avg(Antal)
from Ordantal;


Av Thomas Padron-McCarthy (e-post: boken@databasteknik.se)
Senaste ändring: 31 januari 2007