# Kuidas küsida ja ühendada kirjeid MariaDB JOIN-i abil

Relatsioonilises andmebaasi haldussüsteemis on võimalik võrrelda eri tabelite andmeid omavahel. See võimaldab luua seoseid ja ekstraktida sobivaid väärtusi kahest erinevast tabelist. MariaDB-s täidetakse seda ülesannet `JOIN` abil. Seda käsku kasutatakse koos `SELECT` ja see võib jaguneda erinevatesse kategooriatesse. Allpool tutvustame `INNER JOIN`, `LEFT OUTER JOIN` ja `RIGHT OUTER JOIN` üksikasjalikumalt.

## Mis on `JOIN` süntaks?

Et aidata teil mõista MariaDB erinevaid `JOIN` käsklusi, alustame käskluse põhilise süntaksi tutvustamisest. Siin on `INNER JOIN` käskluse süntaks:

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

Kasutades `SELECT`, määrake veerg (või veerud), mida soovite lisada. Asendage asendusmärk „table\_1” esimese tabeliga ja „table\_2” teise tabeliga, mida soovite esimese tabeliga ühendada. `INNER JOIN` operatsioon **võrdleb esimese tabeli iga rida teise tabeli iga reaga**. Tulemustabelis kuvatakse ainult sobivad kirjed (need, mis on mõlemas tabelis). Mittevastavad kirjed jäetakse väljundist välja.

## Kuidas kasutada `INNER JOIN` MariaDB-s

Et näidata, kuidas `INNER JOIN` MariaDB-s töötab, vaatame lihtsat näidet. Kasutame andmebaasi, milles on kaks tabelit. Esimene tabel on nimega „Kliendiloend” ja teine „Tellimused”. Tabel „Kliendiloend” saab luua [MariaDB CREATE TABLE](https://www.ionos.com/et-ee/digitalguide/hosting/tehnilised-kuesimused/mariadb-loo-tabel/) abil. See tabel sisaldab veerge „Kliendi ID”, „Perekonnanimi”, „Eesnimi”, „Linn” ja „Loomise kuupäev”. Kood näeb välja järgmine:

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

Nüüd täitkem see tabel mõningate väärtustega. Selleks kasutame `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');
```

Seejärel loome tabeli „Orders”. See sisaldab veerge „OrderID”, „ProductID”, „CustomerName” ja „OrderDate”. Kood näeb välja järgmine:

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

Samuti täidame selle tabeli näidisväärtustega:

```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üüd kasutame MariaDB-s `INNER JOIN`, et filtreerida kliendid, kes **on kliendiloendis ja on esitanud tellimuse, mis** on loetletud tabelis „Tellimused”. Vastav kood näeb välja järgmine:

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

Selles näites keskendume kliendiloendi perekonnanimele ja tellimuste kliendi nimele. Kui need väärtused ühtivad, lisatakse need tulemustesse. Kuna kliendid Meyer ja Rodman esinevad mõlemas tabelis, näeks väljund välja järgmine:

<table>
  <thead>
    <tr>
      <th>Kliendi ID</th>
      <th>Kliendi nimi</th>
      <th>Tellimuse ID</th>
      <th>Toote 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` MariaDB-s töötab sarnase põhimõtte alusel ja kasutab peaaegu identseid süntaksireegleid. Erinevalt `INNER JOIN` väljastatakse aga **kõik andmed esimesest ehk vasakpoolsest tabelist** (meie näites „CustomerList”) ja ainult vastavad andmed teisest ehk parempoolsest tabelist („orders”). Kui teises tabelis pole vastet, **määratakse väärtuseks NULL**. Eespool toodud näite puhul näeb kood välja järgmine:

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

See annab meile järgmise tulemuse:

<table>
  <thead>
    <tr>
      <th>Kliendi nimi</th>
      <th>Toote 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`

MariaDB-s toimib `RIGHT OUTER JOIN` vastupidiselt. Siin **kombineeritakse teise ehk parempoolse tabeli andmed esimese ehk vasakpoolse tabeli vastavate väärtustega**. Kui vastavust ei leita, on tulemuseks NULL. Allpool on toodud kood:

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

Väljund näeb välja järgmine:

<table>
  <thead>
    <tr>
      <th>Kliendi nimi</th>
      <th>Toote 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 Meie digitaalsest juhendist leiate palju kasulikke õpetusi ja artikleid MariaDB kohta. Näiteks on seal MariaDB ja MySQL võrdlus, õpetus MariaDB installimise kohta ja juhised MariaDB root-parooli lähtestamiseks.


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/hosting/tehnilised-kuesimused/mariadb-liitumine/](https://www.ionos.com/et-ee/digitalguide/hosting/tehnilised-kuesimused/mariadb-liitumine/) for AI/LLM consumption.