159 lines
6.3 KiB
Markdown
159 lines
6.3 KiB
Markdown
---
|
|
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 |
|
|
+----------+--------------+------------+------------+----------------+
|
|
```
|
|
|