---
geometry: margin=30mm
author: Felix Albrigtsen
...

# Øving 6

## Oppgave a
### Lag en datamodell (ER-modell der dere bruker UML-notasjon)
  ![ER-Modell](er_modell.png)

## Oppgave b
### Oversett til relasjonsmodellen

> kandidat(telefon\*, fornavn, etternavn, epost)

> kandidatkvalifikasjon(kandidat\_id*,kvalifikasjon*)

> bedrift(orgnummer\*, navn, epost, telefon)

> oppdrag(oppdrag\_id\*, <u>orgnummer</u>, kvalifikasjon, starttid, sluttid)

> jobbhistorikk(<u>oppdrag\_id\*</u>, <u>kandidat tlf</u>, starttid, sluttid, arbeidstimer)

> sluttatest(<u>oppdrag_id\*</u>, attest)

### Er det rimelig at noen av fremmednøklene kan være NULL? Hva betyr det i tilfelle?

Jeg bruker fire fremmednøkler i besvarelsen.
- oppdrag.orgnummer kan ikke være NULL, da alle jobber må høre til en bedrift.
- jobbhistorikk.oppdrag\_id kan ikke være NULL, da man ikke kan ha jobbet om det ikke fantes et oppdrag.
- jobbhistorikk.kandidat\_tlf kan ikke være NULL, da et oppdrag ikke kan være utført om det ikke gjøres av en kandidat.
- sluttatest.oppdrag\_id kan ikke være NULL, da man ikke kan skrive attest til en jobb som ikke er utført.

## Oppgave c
### Opprett databasetabellene med primær-og fremmednøkleri MySQL, dvs. lag CREATE TABLE og evt. ALTER TABLE-setninger. (Prøv å) bruk datatypen DATE for dato.

SQL-setningene finnes i [vikar.sql](./vikar.sql)

## Oppgave d

### Lag en liste over alle bedriftene. Navn, telefon og epost til bedriften skal skrives ut.

```sql
SELECT navn, epost, telefon 
FROM bedrift;
```

```sql
MariaDB [idatt2103_ov6]> SELECT navn, epost, telefon FROM bedrift;
+----------------------+--------------+----------+
| navn                 | epost        | telefon  |
+----------------------+--------------+----------+
| Bjarnes Butikk       | bb@gmail.com | 12345670 |
| Vidars Verksted      | vv@gmail.com | 12345671 |
| Arnes Arkivtjenester | aa@gmail.com | 12345672 |
+----------------------+--------------+----------+
``` 

### Lag en liste over alle oppdragene. Om hvert oppdrag skal du skrive ut oppdragets nummer samt navn og telefonnummer til bedriften som tilbyr oppdraget.

```sql
SELECT oppdrag_id, navn, telefon, epost 
FROM oppdrag 
LEFT JOIN bedrift 
ON oppdrag.orgnummer = bedrift.orgnummer;
```
```sql
MariaDB [idatt2103_ov6]> SELECT oppdrag_id, navn, telefon, epost FROM oppdrag LEFT JOIN bedrift ON oppdrag.orgnummer = bedrift.orgnummer;
+------------+----------------------+----------+--------------+
| oppdrag_id | navn                 | telefon  | epost        |
+------------+----------------------+----------+--------------+
|          1 | Bjarnes Butikk       | 12345670 | bb@gmail.com |
|          2 | Arnes Arkivtjenester | 12345672 | aa@gmail.com |
|          3 | Arnes Arkivtjenester | 12345672 | aa@gmail.com |
|          4 | Arnes Arkivtjenester | 12345672 | aa@gmail.com |
+------------+----------------------+----------+--------------+
```

### Lag en liste over kandidater og kvalifikasjoner. Kandidatnavn og kvalifikasjonsbeskrivelse skal med i utskriften i tillegg til løpenumrene som identifiserer kandidat og kvalifikasjon.

Jeg har ikke brukt noen løpenummer, da ingen kandidater kan ha samme telefonnummer, og telefon+kvalifikasjon er tilstrekkelig primærnøkkel.

```sql
SELECT k.telefon, CONCAT (k.fornavn, ' ',  k.etternavn) AS navn, kvalifikasjon 
FROM kandidat k 
RIGHT JOIN kandidatkvalifikasjon kk 
ON k.telefon = kk.telefon;
```

```sql
MariaDB [idatt2103_ov6]> SELECT k.telefon, CONCAT (k.fornavn, ' ',  k.etternavn) AS navn, kvalifikasjon FROM kandidat k RIGHT JOIN kandidatkvalifikasjon kk ON k.telefon = kk.telefon;
+----------+-----------------+---------------+
| telefon  | navn            | kvalifikasjon |
+----------+-----------------+---------------+
| 12345678 | Kari Aas        | Kasse         |
| 12345678 | Kari Aas        | Kundeservice  |
| 12345679 | Anne Berg       | Kasse         |
| 12345679 | Anne Berg       | Kundeservice  |
| 12345680 | Gunnar Svendsen | Excel         |
| 12345680 | Gunnar Svendsen | Word          |
| 12345681 | Svein Wold      | Excel         |
| 12345681 | Svein Wold      | Word          |
+----------+-----------------+---------------+

```

### Som oppgave 3d), men få med de kandidatene som ikke er registrert med kvalifikasjoner.

```sql
SELECT k.telefon, CONCAT (k.fornavn, ' ', k.etternavn) AS navn, kvalifikasjon 
FROM kandidat k 
LEFT JOIN kandidatkvalifikasjon kk 
ON k.telefon = kk.telefon;
```

```sql
MariaDB [idatt2103_ov6]>  SELECT k.telefon, CONCAT (k.fornavn, ' ', k.etternavn) AS navn, kvalifikasjon FROM kandidat k LEFT JOIN kandidatkvalifikasjon kk ON k.telefon = kk.telefon;
+----------+-----------------+---------------+
| telefon  | navn            | kvalifikasjon |
+----------+-----------------+---------------+
| 12345678 | Kari Aas        | Kasse         |
| 12345678 | Kari Aas        | Kundeservice  |
| 12345679 | Anne Berg       | Kasse         |
| 12345679 | Anne Berg       | Kundeservice  |
| 12345680 | Gunnar Svendsen | Excel         |
| 12345680 | Gunnar Svendsen | Word          |
| 12345681 | Svein Wold      | Excel         |
| 12345681 | Svein Wold      | Word          |
| 12345682 | Hans Jensen     | NULL          |
+----------+-----------------+---------------+

```


### Skriv ut jobbhistorikken til en bestemt vikar, gitt kandidatnr. Vikarnavn, sluttdato, oppdragsnr og bedriftsnavn skal med.

```sql
SELECT k.telefon, CONCAT(k.fornavn, ' ', k.etternavn) as kandidatnavn, j.slutttid, j.oppdrag_id, b.navn 
FROM jobbhistorikk j 
LEFT JOIN oppdrag o 
  ON j.oppdrag_id = o.oppdrag_id 
LEFT JOIN bedrift b 
  ON o.orgnummer = b.orgnummer 
LEFT JOIN kandidat k 
  ON j.kandidat_tlf = k.telefon 
WHERE kandidat_tlf = 12345678;
```

```sql
MariaDB [idatt2103_ov6]> SELECT k.telefon, CONCAT(k.fornavn, ' ', k.etternavn) as kandidatnavn, j.slutttid, j.oppdrag_id, b.navn FROM jobbhistorikk j LEFT JOIN oppdrag o ON j.oppdrag_id = o.oppdrag_id LEFT JOIN bedrift b ON o.orgnummer = b.orgnummer LEFT JOIN kandidat k ON j.kandidat_tlf = k.telefon WHERE kandidat_tlf = 12345678;
+----------+--------------+------------+------------+----------------+
| telefon  | kandidatnavn | slutttid   | oppdrag_id | navn           |
+----------+--------------+------------+------------+----------------+
| 12345678 | Kari Aas     | 2022-01-31 |          1 | Bjarnes Butikk |
+----------+--------------+------------+------------+----------------+
```

