# Kaip užklausti ir sujungti įrašus naudojant MariaDB JOIN

Reliacinėje duomenų bazių valdymo sistemoje galite palyginti skirtingų lentelių duomenų įrašus tarpusavyje. Tai leidžia kurti ryšius ir išgauti atitinkančias reikšmes iš dviejų skirtingų lentelių. Ši užduotis atliekama naudojant `JOIN` MariaDB. Šis teiginys naudojamas kartu su `SELECT` ir gali būti suskirstytas į skirtingas kategorijas. Toliau pateiksime išsamesnę informaciją apie `INNER JOIN`, `LEFT OUTER JOIN` ir `RIGHT OUTER JOIN`.

## Kokia yra `JOIN` sintaksė?

Kad galėtumėte geriau suprasti įvairias `JOIN` MariaDB instrukcijas, pradėsime nuo pagrindinės instrukcijos sintaksės pristatymo. Štai `INNER JOIN` sintaksė:

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

Naudodami `SELECT`, nurodote stulpelį (arba stulpelius), kurį norite įtraukti. Pakeiskite vietos laikiklį „table\_1“ pirmuoju stalu ir „table\_2“ antruoju stalu, kurį norite sujungti su pirmuoju. `INNER JOIN` operacija **palygina kiekvieną pirmojo stalo eilutę su kiekviena antrojo stalo eilute**. Rezultatų stale bus rodomi tik atitinkantys įrašai (esantys abiejuose staluose). Nesutampantys įrašai iš rezultatų yra pašalinami.

## Kaip naudoti `INNER JOIN` MariaDB

Norėdami parodyti, kaip `INNER JOIN` veikia MariaDB, pažiūrėkime paprastą pavyzdį. Naudosime duomenų bazę, kurioje yra dvi lentelės. Pirmoji lentelė vadinasi „Klientų sąrašas“, o antroji – „Užsakymai“. Lentelę „Klientų sąrašas“ galime sukurti naudodami [MariaDB CREATE TABLE](https://www.ionos.com/lt-lt/digitalguide/priegloba/techniniai-klausimai/mariadb-sukurti-lentele/). Šioje lentelėje yra stulpeliai „Kliento ID“, „Pavardė“, „Vardas“, „Miestas“ ir „Sukūrimo data“. Štai kaip atrodo kodas:

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

Dabar užpildykime šią lentelę kai kuriais reikšmėmis. Tam naudojame `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');
```

Tada sukuriame lentelę „Užsakymai“. Joje yra stulpeliai „UžsakymoID“, „ProduktoID“, „KlientoVardas“ ir „UžsakymoData“. Kodas atrodo taip:

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

Taip pat užpildysime šią lentelę pavyzdinėmis reikšmėmis:

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

Dabar panaudosime `INNER JOIN` MariaDB, kad atrinktume klientus, kurie **yra klientų sąraše ir yra pateikę užsakymą**, įtrauktą į užsakymų lentelę. Atitinkamas kodas atrodo taip:

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

Šiame pavyzdyje mes sutelkiame dėmesį į pavardę klientų sąraše ir kliento vardą užsakymuose. Kai šios reikšmės sutampa, jos įtraukiamos į rezultatus. Kadangi klientai Meyer ir Rodman yra abiejose lentelėse, rezultatas atrodytų taip:

<table>
  <thead>
    <tr>
      <th>Kliento ID</th>
      <th>Kliento vardas</th>
      <th>Užsakymo ID</th>
      <th>Produkto 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 veikia pagal panašų principą ir taip pat naudoja beveik identišką sintaksę. Tačiau, skirtingai nei `INNER JOIN`, išvedami **visi duomenų įrašai iš pirmosios arba kairės lentelės** (mūsų pavyzdyje „CustomerList“) ir tik atitinkami duomenų įrašai iš antrosios arba dešinės lentelės („orders“). Jei antrojoje lentelėje nėra atitikmens, vertė **nurodomas kaip NULL**. Naudojant aukščiau pateiktą pavyzdį, kodas atrodo taip:

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

Tai duoda mums tokį rezultatą:

<table>
  <thead>
    <tr>
      <th>Kliento vardas</th>
      <th>Produkto 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 sistemoje `RIGHT OUTER JOIN` veikia priešingai. Čia **duomenys iš antrosios arba dešinės lentelės yra sujungiami su atitinkančiais duomenimis iš pirmosios arba kairės lentelės**. Jei atitikimo nėra, galutinė reikšmė bus NULL. Toliau pateikiamas kodas:

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

Štai kaip atrodo rezultatas:

<table>
  <thead>
    <tr>
      <th>Kliento vardas</th>
      <th>Produkto 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 Mūsų skaitmeniniame vadove rasite daug naudingų pamokų ir straipsnių apie MariaDB. Pavyzdžiui, čia yra MariaDB ir MySQL palyginimas, pamoka apie MariaDB diegimą ir instrukcijos, kaip atkurti MariaDB root slaptažodį.


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/priegloba/techniniai-klausimai/mariadb-prisijungti/](https://www.ionos.com/lt-lt/digitalguide/priegloba/techniniai-klausimai/mariadb-prisijungti/) for AI/LLM consumption.