# Kako poizvedovati in združevati zapise z uporabo MariaDB JOIN

V sistemu za upravljanje relacijskih baz podatkov lahko med seboj primerjate zapise podatkov v različnih tabelah. To omogoča ustvarjanje povezav in izpisovanje ujemajočih se vrednosti iz dveh različnih tabel. Ta naloga se v MariaDB izvaja z `JOIN`. Izjava se uporablja v kombinaciji z `SELECT` in se lahko razdeli v različne kategorije. V nadaljevanju bomo podrobneje predstavili `INNER JOIN`, `LEFT OUTER JOIN` in `RIGHT OUTER JOIN`.

## Kakšna je sintaksa za `JOIN`?

Da bi vam pomagali razumeti različne `JOIN` izjave v MariaDB, bomo najprej predstavili osnovno sintakso izjave. Tukaj je sintaksa za `INNER JOIN`:

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

Z uporabo `SELECT` določite stolpec (ali stolpce), ki jih želite vključiti. Nadomestite zaznamek „table\_1” s prvo tabelo in „table\_2” z drugo tabelo, ki jo želite združiti s prvo. Operacija `INNER JOIN` **primerja vsako vrstico v prvi tabeli z vsako vrstico v drugi tabeli**. V tabeli rezultatov se prikažejo samo ujemajoči se zapisi (tisti, ki so prisotni v obeh tabelah). Neujemanje zapisi so izključeni iz izhoda.

## Kako uporabljati `INNER JOIN` v MariaDB

Da bi pokazali, kako deluje `INNER JOIN` v MariaDB, si oglejmo preprost primer. Uporabili bomo bazo podatkov, ki ima dve tabeli. Prva tabela se imenuje »Customer List« (Seznam strank), druga pa »Orders« (Naročila). Tabelo »CustomerList« lahko ustvarimo z uporabo [MariaDB CREATE TABLE](https://www.ionos.com/sl-si/digitalguide/gostovanje/tehnicne-zadeve/mariadb-ustvari-tabelo/). Ta tabela vključuje stolpce »Customer ID« (ID stranke), »LastName« (Priimek), »FirstName« (Ime), »City« (Mesto) in »CreationDate« (Datum ustvarjanja). Tako izgleda koda:

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

Sedaj napolnimo tabelo z nekaj vrednostmi. Za to uporabimo `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');
```

Nato ustvarimo tabelo »Naročila«. Ta vsebuje stolpce »OrderID«, »ProductID«, »CustomerName« in »OrderDate«. Koda je naslednja:

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

To tabelo bomo tudi napolnili z vzorčnimi vrednostmi:

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

Sedaj bomo uporabili `INNER JOIN` za MariaDB, da filtriramo stranke, ki **so na seznamu strank in so oddale naročilo**, navedeno v tabeli Naročila. Ustrezna koda je naslednja:

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

V tem primeru se osredotočamo na priimek v seznamu strank in ime stranke v naročilih. Ko se te vrednosti ujemajo, so vključene v rezultate. Ker sta stranki Meyer in Rodman navedeni v obeh tabelah, bi izpis izgledal takole:

<table>
  <thead>
    <tr>
      <th>ID stranke</th>
      <th>Ime stranke</th>
      <th>ID naročila</th>
      <th>ID izdelka</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` v MariaDB deluje po podobnem principu in uporablja skoraj identično sintakso. V nasprotju z `INNER JOIN` pa se izpišejo **vsi podatkovni zapisi iz prve ali leve tabele** (v našem primeru »CustomerList«) in samo ujemajoči se podatkovni zapisi iz druge ali desne tabele (»orders«). Če v drugi tabeli ni ustreznega zapisa, **se** vrednost **določi kot NULL**. V zgornjem primeru koda izgleda takole:

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

To nam da naslednji rezultat:

<table>
  <thead>
    <tr>
      <th>Ime stranke</th>
      <th>ID izdelka</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`

V MariaDB deluje `RIGHT OUTER JOIN` nasprotno. Tukaj **se podatki iz druge ali desne tabele združijo z ujemajočimi vrednostmi iz prve ali leve tabele**. Če ni ujemanja, bo končna vrednost NULL. Spodaj je koda:

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

Tako izgleda izhod:

<table>
  <thead>
    <tr>
      <th>Ime stranke</th>
      <th>ID izdelka</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 V našem digitalnem vodniku boste našli številne koristne vodiče in članke za MariaDB. Na primer, primerjava MariaDB in MySQL, vodič za namestitev MariaDB in navodila za ponastavitev gesla root za MariaDB.


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/gostovanje/tehnicne-zadeve/mariadb-pridruzi-se/](https://www.ionos.com/sl-si/digitalguide/gostovanje/tehnicne-zadeve/mariadb-pridruzi-se/) for AI/LLM consumption.