V relačnom systéme správy databáz môžete porovnávať dátové záznamy v rôznych tabuľkách medzi sebou. To umožňuje vytvárať prepojenia a extrahovať zhodné hodnoty z dvoch rôznych tabuliek. Táto úloha sa v MariaDB vykonáva pomocou JOIN. Inštrukcia sa používa v kombinácii s SELECT a dá sa rozdeliť do rôznych kategórií. Nižšie podrobnejšie predstavíme INNER JOIN, LEFT OUTER JOIN a RIGHT OUTER JOIN.

Aká je syntax pre JOIN?

Aby sme vám pomohli porozumieť rôznym JOIN príkazom v MariaDB, začneme predstavením základnej syntaxe príkazu. Tu je syntax pre INNER JOIN:

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

Pomocou SELECT určujete stĺpec (alebo stĺpce), ktoré chcete zahrnúť. Nahraďte zástupný symbol „table_1“ prvou tabuľkou a „table_2“ druhou tabuľkou, ktorú chcete spojiť s prvou. Operácia INNER JOIN porovnáva každý riadok v prvej tabuľke s každým riadkom v druhej tabuľke. V výslednej tabuľke sa zobrazia len zhodné záznamy (tie, ktoré sa nachádzajú v oboch tabuľkách). Nezhodné záznamy sú z výstupu vylúčené.

Ako používať INNER JOIN v MariaDB

Aby sme ukázali, ako funguje INNER JOIN v MariaDB, pozrime sa na jednoduchý príklad. Použijeme databázu, ktorá má dve tabuľky. Prvá tabuľka sa nazýva „Zoznam zákazníkov“ a druhá „Objednávky“. Tabuľku „Zoznam zákazníkov“ môžeme vytvoriť pomocou MariaDB CREATE TABLE. Táto tabuľka obsahuje stĺpce „ID zákazníka“, „Priezvisko“, „Meno“, „Mesto“ a „Dátum vytvorenia“. Takto vyzerá kód:

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

Teraz vyplňme túto tabuľku niektorými hodnotami. Na to použijeme INSERT INTO:

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

Potom vytvoríme tabuľku „Objednávky“. Táto tabuľka obsahuje stĺpce „ID objednávky“, „ID produktu“, „Meno zákazníka“ a „Dátum objednávky“. Kód vyzerá takto:

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

Túto tabuľku tiež vyplníme vzorovými hodnotami:

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

Teraz použijeme INNER JOIN pre MariaDB na filtrovanie zákazníkov, ktorí sa nachádzajú v zozname zákazníkov a zadali objednávku uvedenú v tabuľke Objednávky. Príslušný kód vyzerá takto:

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

V tomto príklade sa zameriavame na priezvisko v zozname zákazníkov a meno zákazníka v objednávkach. Ak sa tieto hodnoty zhodujú, sú zahrnuté do výsledkov. Keďže zákazníci Meyer a Rodman sa nachádzajú v oboch tabuľkách, výstup by vyzeral takto:

ID zákazníka Meno zákazníka ID objednávky ID produktu
3 Meyer 102 332
2 Rodman 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN v MariaDB funguje na podobnom princípe a používa takmer identickú syntax. Na rozdiel od INNER JOIN sa však vypisujú všetky dátové záznamy z prvej alebo ľavej tabuľky (v našom príklade „CustomerList“) a iba zodpovedajúce dátové záznamy z druhej alebo pravej tabuľky („orders“). Ak v druhej tabuľke neexistuje ekvivalent, hodnota sa určí ako NULL. Na základe vyššie uvedeného príkladu vyzerá kód takto:

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

To nám dáva nasledujúci výsledok:

Meno zákazníka ID produktu
Smith NULL
Rodman 191
Meyer 332
Garcia NULL
Davis NULL

RIGHT OUTER JOIN

V MariaDB funguje RIGHT OUTER JOIN opačným spôsobom. Tu sa údaje z druhej alebo pravej tabuľky kombinujú s zodpovedajúcimi hodnotami z prvej alebo ľavej tabuľky. Ak sa nezhodujú, výsledná hodnota bude NULL. Nižšie je uvedený kód:

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

Takto vyzerá výstup:

Meno zákazníka ID produktu
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Prejsť na hlavné menu