Kuidas küsida ja ühendada kirjeid MariaDB JOIN-i abil
Relatsioonilises andmebaasi haldussüsteemis on võimalik võrrelda eri tabelite andmeid omavahel. See võimaldab luua seoseid ja ekstraktida sobivaid väärtusi kahest erinevast tabelist. MariaDB-s täidetakse seda ülesannet JOIN abil. Seda käsku kasutatakse koos SELECT ja see võib jaguneda erinevatesse kategooriatesse. Allpool tutvustame INNER JOIN, LEFT OUTER JOIN ja RIGHT OUTER JOIN üksikasjalikumalt.
Mis on JOIN süntaks?
Et aidata teil mõista MariaDB erinevaid JOIN käsklusi, alustame käskluse põhilise süntaksi tutvustamisest. Siin on INNER JOIN käskluse süntaks:
SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;sqlKasutades SELECT, määrake veerg (või veerud), mida soovite lisada. Asendage asendusmärk „table_1” esimese tabeliga ja „table_2” teise tabeliga, mida soovite esimese tabeliga ühendada. INNER JOIN operatsioon võrdleb esimese tabeli iga rida teise tabeli iga reaga. Tulemustabelis kuvatakse ainult sobivad kirjed (need, mis on mõlemas tabelis). Mittevastavad kirjed jäetakse väljundist välja.
Kuidas kasutada INNER JOIN MariaDB-s
Et näidata, kuidas INNER JOIN MariaDB-s töötab, vaatame lihtsat näidet. Kasutame andmebaasi, milles on kaks tabelit. Esimene tabel on nimega „Kliendiloend” ja teine „Tellimused”. Tabel „Kliendiloend” saab luua MariaDB CREATE TABLE abil. See tabel sisaldab veerge „Kliendi ID”, „Perekonnanimi”, „Eesnimi”, „Linn” ja „Loomise kuupäev”. Kood näeb välja järgmine:
CREATE TABLE CustomerList (
CustomerID INT PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
City VARCHAR(50),
CreationDate DATE
);sqlNüüd täitkem see tabel mõningate väärtustega. Selleks kasutame 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');sqlSeejärel loome tabeli „Orders”. See sisaldab veerge „OrderID”, „ProductID”, „CustomerName” ja „OrderDate”. Kood näeb välja järgmine:
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
ProductID INT,
CustomerName VARCHAR(50),
OrderDate DATE
);sqlSamuti täidame selle tabeli näidisväärtustega:
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');sqlNüüd kasutame MariaDB-s INNER JOIN, et filtreerida kliendid, kes on kliendiloendis ja on esitanud tellimuse, mis on loetletud tabelis „Tellimused”. Vastav kood näeb välja järgmine:
SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlSelles näites keskendume kliendiloendi perekonnanimele ja tellimuste kliendi nimele. Kui need väärtused ühtivad, lisatakse need tulemustesse. Kuna kliendid Meyer ja Rodman esinevad mõlemas tabelis, näeks väljund välja järgmine:
| Kliendi ID | Kliendi nimi | Tellimuse ID | Toote ID |
|---|---|---|---|
| 3 | Meyer | 102 | 332 |
| 2 | Rodman | 104 | 191 |
LEFT OUTER JOIN
LEFT OUTER JOIN MariaDB-s töötab sarnase põhimõtte alusel ja kasutab peaaegu identseid süntaksireegleid. Erinevalt INNER JOIN väljastatakse aga kõik andmed esimesest ehk vasakpoolsest tabelist (meie näites „CustomerList”) ja ainult vastavad andmed teisest ehk parempoolsest tabelist („orders”). Kui teises tabelis pole vastet, määratakse väärtuseks NULL. Eespool toodud näite puhul näeb kood välja järgmine:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
LEFT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlSee annab meile järgmise tulemuse:
| Kliendi nimi | Toote ID |
|---|---|
| Smith | NULL |
| Rodman | 191 |
| Meyer | 332 |
| Garcia | NULL |
| Davis | NULL |
RIGHT OUTER JOIN
MariaDB-s toimib RIGHT OUTER JOIN vastupidiselt. Siin kombineeritakse teise ehk parempoolse tabeli andmed esimese ehk vasakpoolse tabeli vastavate väärtustega. Kui vastavust ei leita, on tulemuseks NULL. Allpool on toodud kood:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlVäljund näeb välja järgmine:
| Kliendi nimi | Toote ID |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |