V relačním databázovém systému můžete porovnávat datové záznamy v různých tabulkách mezi sebou. To umožňuje vytvářet spojení a extrahovat shodné hodnoty ze dvou různých tabulek. Tato úloha se v MariaDB provádí pomocí JOIN. Příkaz se používá v kombinaci s SELECT a lze jej rozdělit do různých kategorií. Níže podrobněji představíme INNER JOIN, LEFT OUTER JOIN a RIGHT OUTER JOIN.

Jaká je syntaxe pro JOIN?

JOIN chom vám pomohli porozumět různým příkazům v MariaDB, začneme představit základní syntaxi příkazu. Zde je syntaxe pro INNER JOIN:

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

Pomocí SELECT určíte sloupec (nebo sloupce), které chcete zahrnout. Nahraďte zástupný symbol „table_1“ první tabulkou a „table_2“ druhou tabulkou, kterou chcete spojit s první. Operace INNER JOIN porovná každý řádek v první tabulce s každým řádkem v druhé tabulce. V výsledkové tabulce se zobrazí pouze shodné záznamy (ty, které jsou přítomny v obou tabulkách). Neshodné záznamy jsou z výstupu vyloučeny.

Jak používat INNER JOIN v MariaDB

Abychom ukázali, jak funguje INNER JOIN v MariaDB, podívejme se na jednoduchý příklad. Použijeme databázi, která obsahuje dvě tabulky. První tabulka se jmenuje „Seznam zákazníků“ a druhá „Objednávky“. Tabulku „Seznam zákazníků“ můžeme vytvořit pomocí příkazu MariaDB CREATE TABLE. Tato tabulka obsahuje sloupce „ID zákazníka“, „Příjmení“, „Jméno“, „Město“ a „Datum vytvoření“. Kód vypadá takto:

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

Nyní vyplňme tuto tabulku některými hodnotami. K tomu 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

Poté vytvoříme tabulku „Objednávky“. Ta obsahuje sloupce „ID objednávky“, „ID produktu“, „Jméno zákazníka“ a „Datum objednávky“. Kód vypadá takto:

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

Tuto tabulku také 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

Nyní použijeme INNER JOIN pro MariaDB k filtrování zákazníků, kteří se objevují v seznamu zákazníků a zadali objednávku uvedenou v tabulce Objednávky. Odpovídající kód vypadá takto:

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

V tomto příkladu se zaměříme na příjmení v seznamu zákazníků a jméno zákazníka v objednávkách. Pokud se tyto hodnoty shodují, budou zahrnuty do výsledků. Jelikož zákazníci Meyer a Rodman se objevují v obou tabulkách, výstup bude vypadat takto:

ID zákazníka Jméno 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 podobném principu a používá téměř identickou syntaxi. Na rozdíl od INNER JOIN se však vypisují všechny datové záznamy z první nebo levé tabulky (v našem příkladu „CustomerList“) a pouze odpovídající datové záznamy z druhé nebo pravé tabulky („orders“). Pokud v druhé tabulce neexistuje ekvivalent, je hodnota specifikována jako NULL. V příkladu výše vypadá kód takto:

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

To nám dává následující výsledek:

Jméno 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 způsobem. Zde se data z druhé nebo pravé tabulky kombinují s odpovídajícími hodnotami z první nebo levé tabulky. Pokud se žádná shoda nenajde, výsledná hodnota bude NULL. Níže je uveden kód:

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

Takto vypadá výstup:

Jméno zákazníka ID produktu
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Přejít do hlavního menu