# Sådan forespørges og flettes poster ved hjælp af MariaDB JOIN

I et relationsdatabasesystem kan du sammenligne dataposter i forskellige tabeller med hinanden. Dette gør det muligt at oprette forbindelser og udtrække matchende værdier fra to forskellige tabeller. Denne opgave udføres med `JOIN` i MariaDB. Sætningen bruges i kombination med `SELECT` og kan opdeles i forskellige kategorier. Vi vil præsentere `INNER JOIN`, `LEFT OUTER JOIN` og `RIGHT OUTER JOIN` mere detaljeret nedenfor.

## Hvad er syntaksen for `JOIN`?

For at hjælpe dig med at forstå de forskellige `JOIN` i MariaDB vil vi starte med at præsentere den grundlæggende syntaks for sætningen. Her er syntaksen for `INNER JOIN`:

```sql
SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;
```

Ved hjælp af `SELECT` angiver du den eller de kolonner, du vil medtage. Erstat pladsholderen ‘table\_1’ med den første tabel og ‘table\_2’ med den anden tabel, som du vil sammenføje med den første. Operation `INNER JOIN` **sammenligner hver række i den første tabel med hver række i den anden tabel**. Kun matchende poster (dem, der findes i begge tabeller) vises i resultattabellen. Ikke-matchende poster udelades fra outputtet.

## Sådan bruges `INNER JOIN` i MariaDB

For at demonstrere, hvordan `INNER JOIN` fungerer i MariaDB, skal vi se på et enkelt eksempel. Vi bruger en database med to tabeller. Den første tabel hedder ‘Kundeliste’, og den anden hedder ‘Ordrer’. Vi kan oprette tabellen ‘Kundeliste’ ved hjælp af [MariaDB CREATE TABLE](https://www.ionos.com/da-dk/digitalguide/hosting/tekniske-spoergsmaal/mariadb-opret-tabel/). Denne tabel indeholder kolonnerne ‘Kunde-ID’, ‘Efternavn’, ‘Fornavn’, ‘By’ og ‘Oprettelsesdato’. Sådan ser koden ud:

```sql
CREATE TABLE CustomerList (
	CustomerID INT PRIMARY KEY,
	LastName VARCHAR(50),
	FirstName VARCHAR(50),
	City VARCHAR(50),
	CreationDate DATE
);
```

Lad os nu udfylde denne tabel med nogle værdier. Til dette bruger vi `INSERT INTO`:

```sql
INSERT INTO CustomerList VALUES
(1, 'Smith', 'Martina', 'London', '2022-07-19'),
(2, 'Rodman', 'Daniel', 'Aberdeen', '2023-03-03'),
(3, 'Meyer', 'Peter', 'Cardiff', '2023-07-09'),
(4, 'Garcia', 'Laura', 'Preston', '2023-12-10'),
(5, 'Davis', 'Lisa', 'Bournemouth', '2024-01-17');
```

Derefter opretter vi tabellen “Ordrer”. Den indeholder kolonnerne “OrdreID”, “ProduktID”, “Kundens navn” og “Ordredato”. Koden ser således ud:

```sql
CREATE TABLE Orders (
	OrderID INT AUTO_INCREMENT PRIMARY KEY,
	ProductID INT,
	CustomerName VARCHAR(50),
	OrderDate DATE
);
```

Vi vil også udfylde denne tabel med eksempelværdier:

```sql
INSERT INTO Orders VALUES
(101, 247, 'Jackson', '2024-02-20'),
(102, 332, 'Meyer', '2024-03-03'),
(103, 247, 'Anderson', '2024-03-09'),
(104, 191, 'Rodman', '2024-03-17'),
(105, 499, 'Martinez', '2024-03-17');
```

Nu bruger vi `INNER JOIN` til MariaDB til at filtrere de kunder, der **vises på kundelisten og har afgivet en ordre**, der er angivet i tabellen Orders. Den tilhørende kode ser således ud:

```sql
SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;
```

I dette eksempel fokuserer vi på efternavnet i kundelisten og kundens navn i ordrerne. Når disse værdier stemmer overens, medtages de i resultaterne. Da kunderne Meyer og Rodman forekommer i begge tabeller, vil resultatet se således ud:

<table>
  <thead>
    <tr>
      <th>Kundekode</th>
      <th>Kundens navn</th>
      <th>Ordre-ID</th>
      <th>Produkt-ID</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>3</td>
      <td>Meyer</td>
      <td>102</td>
      <td>332</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Rodman</td>
      <td>104</td>
      <td>191</td>
    </tr>
  </tbody>
</table>

## `LEFT OUTER JOIN`

`LEFT OUTER JOIN` i MariaDB fungerer efter et lignende princip og bruger også en næsten identisk syntaks. I modsætning til `INNER JOIN` udskrives dog **alle dataposter fra den første eller venstre tabel** (i vores eksempel ‘CustomerList’) og kun de matchende dataposter fra den anden eller højre tabel (‘orders’). Hvis der ikke er noget tilsvarende i den anden tabel, **angives** værdien **som NULL**. Ved hjælp af eksemplet ovenfor ser koden således ud:

```sql
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
LEFT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;
```

Dette giver os følgende resultat:

<table>
  <thead>
    <tr>
      <th>Kundens navn</th>
      <th>Produkt-ID</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Smith</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>Rodman</td>
      <td>191</td>
    </tr>
    <tr>
      <td>Meyer</td>
      <td>332</td>
    </tr>
    <tr>
      <td>Garcia</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>Davis</td>
      <td>NULL</td>
    </tr>
  </tbody>
</table>

## `RIGHT OUTER JOIN`

I MariaDB fungerer `RIGHT OUTER JOIN` på den modsatte måde. Her **kombineres data fra den anden eller højre tabel med matchende værdier fra den første eller venstre tabel**. Hvis der ikke er noget match, vil den resulterende værdi være NULL. Nedenfor er koden:

```sql
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;
```

Sådan ser resultatet ud:

<table>
  <thead>
    <tr>
      <th>Kundens navn</th>
      <th>Produkt-ID</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>NULL</td>
      <td>247</td>
    </tr>
    <tr>
      <td>Meyer</td>
      <td>332</td>
    </tr>
    <tr>
      <td>NULL</td>
      <td>247</td>
    </tr>
    <tr>
      <td>Rodman</td>
      <td>191</td>
    </tr>
    <tr>
      <td>NULL</td>
      <td>499</td>
    </tr>
  </tbody>
</table>

Tip I vores digitale guide finder du mange nyttige vejledninger og artikler om MariaDB. Der er for eksempel en sammenligning af MariaDB og MySQL, en vejledning i installation af MariaDB og instruktioner i, hvordan du nulstiller din MariaDB-root-adgangskode.


This is a markdown version of: [https://www.ionos.com/da-dk/digitalguide/hosting/tekniske-spoergsmaal/mariadb-join/](https://www.ionos.com/da-dk/digitalguide/hosting/tekniske-spoergsmaal/mariadb-join/) for AI/LLM consumption.