Jak dotazovat a slučovat záznamy pomocí MariaDB JOIN
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;sqlPomocí 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
);sqlNyní 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');sqlPoté 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
);sqlTuto 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');sqlNyní 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;sqlV 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;sqlTo 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;sqlTakto vypadá výstup:
| Jméno zákazníka | ID produktu |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |