### 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;
### 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;
### 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.
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;