Databasteknik: Teoriövning 4, om SQL

Välj själv om du vill göra övningen ensam eller i någon typ av grupp. Det gör inget om en del av frågorna skulle vara svåra att svara på, för de är kanske avsedda att inleda en diskussion snarare än att ha ett enda rätt svar.

Det är inte förbjudet att använda dator, men tanken är inte att man ska behöva det.

Förberedelser

Innan denna övning bör du ha tittat på föreläsning nummer fem, om SQL, på YouTube (uppdelad i två Youtube-videor). Man kan också läsa i kursboken eller motsvarande.

En exempeldatabas

I teoriövning 1 skulle man rita ett ER-diagram som beskriver maskar som bor i äpplen som växer på träd, och i teoriövning 3 översatte vi ER-diagrammet till tabeller. Så här kunde ett ER-diagram för databasen se ut:

ER-diagram för maskdatabasen

När vi översatt ER-diagrammet till tabeller kan de se ut så här:

Maskar
ID Namn Längd Bor i
1 Max 11 1
2 Bengt 12 1
3 Kurt null 2
5 Bravo 13 3
4 Alpha 13 2
   
Äpplen
ID Färg Växer på
1 Rött 1
2 Rött 2
3 Grönt 1
   
Träd
ID Höjd
1 11
2 12
3 13

Här är SQL-kommandon för att skapa tabellerna och för att lägga in exempeldata.

Dessa kommandon är bara med för fullständighets skull och som referens, så bry er inte för mycket om detaljerna (än)!

create table Träd
(ID integer not null primary key,
Höjd integer not null);

create table Äpplen
(ID integer not null primary key,
Färg varchar(10) not null,
VäxerPå integer not null references Träd(ID));

create table Maskar
(ID integer not null primary key,
Namn varchar(10) not null,
Längd integer,
BorI integer not null references Äpplen(ID));

insert into Träd values (1, 11);
insert into Träd values (2, 12);
insert into Träd values (3, 13);

insert into Äpplen values (1, 'Rött', 1);
insert into Äpplen values (2, 'Rött', 2);
insert into Äpplen values (3, 'Grönt', 1);

insert into Maskar values (1, 'Max', 11, 1);
insert into Maskar values (2, 'Bengt', 12, 1);
insert into Maskar values (3, 'Kurt', null, 2);
insert into Maskar values (5, 'Bravo', 13, 3);
insert into Maskar values (4, 'Alpha', 13, 2);

Uppgift 1

Vi vill se vilka maskar som finns i databasen, så vi ställer följande SQL-fråga:
select * from Maskar;
Databashanteraren svarar:

ID Namn Längd Bor i
1 Max 11 1
2 Bengt 12 1
3 Kurt null 2
4 Alpha 13 2
5 Bravo 13 3

Om man jämför med vad vi la in i databasen med insert-kommandona, så blev det ju fel ordning på raderna! Vad var det som hände? Förklara!

Uppgift 2

Några SQL-frågor som bara handlar om en enda tabell:

a) Hur lång är mask nummer 2?
b) Vilka maskar är 12 centimeter långa?
c) Vad heter de maskar som är längre än 12 centimeter?
d) Vad heter de maskar som är mellan 11 och 12 centimeter långa?
e) Vilka maskar har ett namn som börjar på bokstaven B?
f) Vilka maskar har ett namn som slutar på bokstaven B?
g) Vilka maskar har ett namn som innehåller bokstaven R?
h) Hur långa är maskarna Bengt och Kurt?
i) Vilka maskar som är minst 13 cm långa har ett namn som börjar på bokstaven B?
j) Vilka maskar vet vi inte längden på? (Ledtråd: is null)
k) Vilka maskar vet vi längden på?
l) Vilka maskar som bor i äpple 2 vet vi längden på?
m) På vilka träd finns det röda äpplen?
n) Vilka färger har äpplena som växer på träd nummer 2?

Uppgift 3

Några SQL-frågor som handlar om flera tabeller:

a) Vad heter de maskar som bor i röda äpplen?
b) Vad är det för färg på äpplet som masken Max bor i?
c) Vad heter de maskar som är längre än 12 centimeter och bor i röda äpplen?
d) Vad heter de maskar som bor i träd som är minst 12 meter höga?
e) Hur högt är trädet som masken Kurt bor i?

Kan man skriva frågorna på flera sätt?

Uppgift 4

Skriv en SQL-fråga som ger oss en utskrift av varje masks namn, tillsammans med färgen på äpplet som masken bor i, och höjden på trädet som äpplet växer på. Så här kan resultatet se ut:

Namn Färg Höjd
Max Rött 11
Bengt Rött 11
Kurt Rött 12
Alpha Rött 12
Bravo Grönt 11

Förslag på lösningar

Det finns lösningsförslag till en del av uppgifterna, men försök lösa dem själv först.


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 15 november 2022