Hogyan lehet lekérdezni és egyesíteni a rekordokat a MariaDB JOIN segítségével?
Egy relációs adatbázis-kezelő rendszerben össze lehet hasonlítani a különböző táblákban található adatrekordokat. Ez lehetővé teszi kapcsolatok létrehozását és az egyező értékek kivonását két különböző táblából. Ez a feladat a MariaDB-ben JOIN paranccsal hajtható végre. A parancs SELECT paranccsal együtt használható, és különböző kategóriákba sorolható. Az alábbiakban részletesebben bemutatjuk INNER JOIN, LEFT OUTER JOIN és RIGHT OUTER JOIN.
Mi a JOIN szintaxisa?
A MariaDB JOIN különböző utasításának megértéséhez először bemutatjuk az utasítás alapvető szintaxisát. Íme a INNER JOIN szintaxisa:
SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;sqlSELECT segítségével megadhatja a beillesztendő oszlopot (vagy oszlopokat). Cserélje ki a „table_1” helyőrzőt az első táblára, a „table_2” helyőrzőt pedig a második táblára, amelyet az elsővel szeretne összekapcsolni. A INNER JOIN művelet összehasonlítja az első táblában található összes sort a második táblában található összes sorral. Csak az egyező rekordok (azok, amelyek mindkét táblában megtalálhatók) jelennek meg az eredménytáblában. Az egyező rekordok nem kerülnek be a kimenetbe.
A INNER JOIN használata a MariaDB-ben
Hogy bemutassuk, hogyan működik INNER JOIN a MariaDB-ben, nézzünk meg egy egyszerű példát. Egy két táblát tartalmazó adatbázist fogunk használni. Az első táblát „Customer List” (Ügyféllista) névvel, a másodikat pedig „Orders” (Megrendelések) névvel fogjuk elnevezni. A „CustomerList” táblát a MariaDB CREATE TABLE paranccsal hozhatjuk létre. Ez a táblázat a „Customer ID” (Ügyfélazonosító), „LastName” (Vezetéknév), „FirstName” (Keresztnév), „City” (Város) és „CreationDate” (Létrehozás dátuma) oszlopokat tartalmazza. A kód így néz ki:
CREATE TABLE CustomerList (
CustomerID INT PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
City VARCHAR(50),
CreationDate DATE
);sqlMost töltsük meg ezt a táblázatot néhány értékkel. Ehhez INSERT INTO használjuk:
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');sqlEzután létrehozzuk az „Orders” táblázatot. Ez tartalmazza az „OrderID”, „ProductID”, „CustomerName” és „OrderDate” oszlopokat. A kód így néz ki:
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
ProductID INT,
CustomerName VARCHAR(50),
OrderDate DATE
);sqlEzt a táblázatot is kitöltjük mintaértékekkel:
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');sqlMost a MariaDB INNER JOIN használjuk arra, hogy kiszűrjük azokat az ügyfeleket, akik szerepelnek az ügyféllistán, és akik megrendelést adtak le a Megrendelések táblában. A megfelelő kód így néz ki:
SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlEbben a példában a vevőlista vezetéknevére és a megrendelésekben szereplő vevő nevére koncentrálunk. Ha ezek az értékek megegyeznek, akkor bekerülnek az eredményekbe. Mivel Meyer és Rodman vevők mindkét táblázatban szerepelnek, a kimenet így fog kinézni:
| Ügyfél azonosító | Ügyfél neve | Rendelés azonosító | Termék azonosító |
|---|---|---|---|
| 3 | Meyer | 102 | 332 |
| 2 | Rodman | 104 | 191 |
LEFT OUTER JOIN
A MariaDB-benLEFT OUTER JOIN hasonló elven működik, és szinte azonos szintaxist használ. INNER JOIN eltérően azonban az első vagy bal oldali táblázat (példánkban a „CustomerList”) összes adatrekordja kinyomtatásra kerül, és csak a második vagy jobb oldali táblázat („orders”) megfelelő adatrekordjai. Ha a második táblázatban nincs megfelelő, az érték NULL-ként kerül megadásra. A fenti példát használva a kód így néz ki:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
LEFT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlEz a következő eredményt adja:
| Ügyfél neve | Termékazonosító |
|---|---|
| Smith | NULL |
| Rodman | 191 |
| Meyer | 332 |
| Garcia | NULL |
| Davis | NULL |
RIGHT OUTER JOIN
A MariaDB-ben RIGHT OUTER JOIN ellentétesen működik. Itt a második vagy jobb oldali táblázat adatai az első vagy bal oldali táblázat megfelelő értékeivel kerülnek összevonásra. Ha nincs egyezés, az eredmény értéke NULL lesz. Az alábbiakban látható a kód:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlÍgy néz ki a kimenet:
| Ügyfél neve | Termékazonosító |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |