# Kuinka kysellä ja yhdistää tietueita MariaDB JOIN:n avulla

Suhteellisessa tietokannan hallintajärjestelmässä voit verrata eri taulukoiden tietueita keskenään. Tämä mahdollistaa yhteyksien luomisen ja vastaavien arvojen poimimisen kahdesta eri taulukosta. Tämä tehtävä suoritetaan MariaDB:ssä komennolla `JOIN`. Komentoa käytetään yhdessä `SELECT` kanssa, ja se voidaan jakaa eri luokkiin. Esittelemme `INNER JOIN`, `LEFT OUTER JOIN` ja `RIGHT OUTER JOIN` tarkemmin alla.

## Mikä on syntaksi numerolle `JOIN`?

Jotta voisit ymmärtää MariaDB:n `JOIN` eri lauseketta, esitämme ensin lausekkeen perusrakenteen. Tässä on `INNER JOIN`n rakenne:

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

Käyttämällä `SELECT` määrität sarakkeen (tai sarakkeet), jotka haluat sisällyttää. Korvaa paikkamerkki “table\_1” ensimmäisellä taulukolla ja “table\_2” toisella taulukolla, jonka haluat liittää ensimmäiseen. `INNER JOIN` **vertaa ensimmäisen taulukon jokaista riviä toisen taulukon jokaiseen riviin**. Vain vastaavat tietueet (jotka ovat molemmissa taulukoissa) näytetään tulostaulukossa. Epäyhtenevät tietueet jätetään tuloksesta pois.

## Kuinka käyttää `INNER JOIN` MariaDB:ssä

Esitämme yksinkertaisen esimerkin, joka havainnollistaa `INNER JOIN` toimintaa MariaDB:ssä. Käytämme tietokantaa, jossa on kaksi taulukkoa. Ensimmäisen taulukon nimi on “Customer List” ja toisen “Orders”. Voimme luoda “CustomerList”-taulukon [MariaDB CREATE TABLE](https://www.ionos.com/fi-fi/digitalguide/isaennoeinti/tekniset-asiat/mariadb-luo-taulukko/)-komennolla. Taulukko sisältää sarakkeet “Customer ID”, “LastName”, “FirstName”, “City” ja “CreationDate”. Koodi näyttää seuraavalta:

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

Täytetään nyt tämä taulukko arvoilla. Tätä varten käytämme `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');
```

Sitten luomme taulukon “Orders”. Se sisältää sarakkeet “OrderID”, “ProductID”, “CustomerName” ja “OrderDate”. Koodi näyttää tältä:

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

Täytämme myös tämän taulukon esimerkkilukujen avulla:

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

Nyt käytämme MariaDB:n `INNER JOIN` suodattaaksemme asiakkaat, jotka **näkyvät asiakasluettelossa ja ovat tehneet tilauksen, joka** on listattu Tilaukset-taulukossa. Vastaava koodi näyttää tältä:

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

Tässä esimerkissä keskitymme asiakastietojen luettelon sukunimeen ja tilausten asiakkaan nimeen. Kun nämä arvot vastaavat toisiaan, ne sisällytetään tuloksiin. Koska asiakkaat Meyer ja Rodman esiintyvät molemmissa taulukoissa, tulos näyttää seuraavalta:

<table>
  <thead>
    <tr>
      <th>Asiakastunnus</th>
      <th>Asiakkaan nimi</th>
      <th>Tilausnumero</th>
      <th>Tuotetunnus</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` MariaDB:ssä toimii samanlaisella periaatteella ja käyttää myös lähes identtistä syntaksia. Toisin kuin `INNER JOIN`, **kaikki ensimmäisen tai vasemman taulukon** (esimerkissämme ”CustomerList”) **tietueet** tulostetaan ja vain vastaavat toisen tai oikean taulukon (”orders”) tietueet. Jos toisessa taulukossa ei ole vastaavaa, **arvoksi määritetään NULL**. Yllä olevan esimerkin perusteella koodi näyttää seuraavalta:

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

Tämä antaa meille seuraavan tuloksen:

<table>
  <thead>
    <tr>
      <th>Asiakkaan nimi</th>
      <th>Tuotteen tunnus</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`

MariaDB:ssä `RIGHT OUTER JOIN` toimii päinvastoin. Tässä tapauksessa **toisen tai oikean taulukon tiedot yhdistetään ensimmäisen tai vasemman taulukon vastaaviin arvoihin**. Jos vastaavuutta ei löydy, tuloksena oleva arvo on NULL. Alla on koodi:

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

Tulos näyttää tältä:

<table>
  <thead>
    <tr>
      <th>Asiakkaan nimi</th>
      <th>Tuotetunnus</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>

Vinkki Digitaalisesta oppaastamme löydät monia hyödyllisiä oppaita ja artikkeleita MariaDB:stä. Siellä on esimerkiksi MariaDB:n ja MySQL:n vertailu, opas MariaDB:n asentamisesta ja ohjeet MariaDB:n pääkäyttäjän salasanan nollaamisesta.


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/isaennoeinti/tekniset-asiat/mariadb-liity/](https://www.ionos.com/fi-fi/digitalguide/isaennoeinti/tekniset-asiat/mariadb-liity/) for AI/LLM consumption.