# Hvordan spørre og slå sammen poster ved hjelp av MariaDB JOIN

I et relasjonsdatabasestyringssystem kan du sammenligne dataposter i forskjellige tabeller med hverandre. Dette gjør det mulig å opprette koblinger og hente ut samsvarende verdier fra to forskjellige tabeller. Denne oppgaven utføres med `JOIN` i MariaDB. Setningen brukes i kombinasjon med `SELECT` og kan deles inn i forskjellige kategorier. Vi vil presentere `INNER JOIN`, `LEFT OUTER JOIN` og `RIGHT OUTER JOIN` mer detaljert nedenfor.

## Hva er syntaksen for `JOIN`?

For å hjelpe deg med å forstå de ulike `JOIN` i MariaDB, begynner vi med å presentere den grunnleggende syntaksen til setningen. Her er syntaksen for `INNER JOIN`:

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

Ved å bruke `SELECT` angir du kolonnen (eller kolonnene) du vil inkludere. Erstatt plassholderen «table\_1» med den første tabellen og «table\_2» med den andre tabellen du vil koble sammen med den første. Operasjonen `INNER JOIN` **sammenligner hver rad i den første tabellen med hver rad i den andre tabellen**. Bare samsvarende poster (de som finnes i begge tabellene) vises i resultattabellen. Ikke-samme poster blir ekskludert fra utdataene.

## Hvordan bruke `INNER JOIN` i MariaDB

For å demonstrere hvordan `INNER JOIN` fungerer i MariaDB, la oss se på et enkelt eksempel. Vi bruker en database som har to tabeller. Den første tabellen heter «Customer List», og den andre heter «Orders». Vi kan opprette tabellen «CustomerList» ved hjelp av [MariaDB CREATE TABLE](https://www.ionos.com/nb-no/digitalguide/hosting/tekniske-spoersmaal/mariadb-opprett-tabell/). Denne tabellen inneholder kolonnene «Customer ID», «LastName», «FirstName», «City» og «CreationDate». Slik ser koden ut:

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

La oss nå fylle denne tabellen med noen verdier. For å gjøre dette bruker 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');
```

Deretter oppretter vi tabellen «Orders». Denne inneholder kolonnene «OrderID», «ProductID», «CustomerName» og «OrderDate». Koden ser slik ut:

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

Vi skal også fylle denne tabellen med eksempelverdier:

```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');
```

Nå skal vi bruke `INNER JOIN` for MariaDB til å filtrere etter kunder som **vises i kundelisten og har lagt inn en ordre** som er oppført i tabellen Orders. Den tilhørende koden ser slik ut:

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

I dette eksemplet fokuserer vi på etternavnet i kundelisten og kundenavnet i ordrene. Når disse verdiene samsvarer, inkluderes de i resultatene. Siden kundene Meyer og Rodman finnes i begge tabellene, vil resultatet se slik ut:

<table>
  <thead>
    <tr>
      <th>Kunde-ID</th>
      <th>Kundenavn</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 etter et lignende prinsipp og bruker også en nesten identisk syntaks. I motsetning til `INNER JOIN` blir imidlertid **alle dataposter fra den første eller venstre tabellen** (i vårt eksempel «CustomerList») vist, og bare de matchende datapostene fra den andre eller høyre tabellen («orders»). Hvis det ikke finnes noen ekvivalent i den andre tabellen, **angis** verdien **som NULL**. Ved å bruke eksemplet ovenfor ser koden slik ut:

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

Dette gir oss følgende resultat:

<table>
  <thead>
    <tr>
      <th>Kundenavn</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å motsatt måte. Her **kombineres data fra den andre eller høyre tabellen med matchende verdier fra den første eller venstre tabellen**. Hvis det ikke er noen match, vil den resulterende verdien være NULL. Nedenfor er koden:

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

Slik ser resultatet ut:

<table>
  <thead>
    <tr>
      <th>Kundenavn</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 vår digitale guide finner du mange nyttige veiledninger og artikler om MariaDB. For eksempel finnes det en sammenligning av MariaDB og MySQL, en veiledning om hvordan du installerer MariaDB og instruksjoner om hvordan du tilbakestiller root-passordet ditt i MariaDB.


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