Ako vyhľadávať a zlučovať záznamy pomocou MariaDB JOIN
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;sqlPomocou 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
);sqlTeraz 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');sqlPotom 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
);sqlTú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');sqlTeraz 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;sqlV 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;sqlTo 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;sqlTakto vyzerá výstup:
| Meno zákazníka | ID produktu |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |