Re­lat­sioo­ni­li­ses and­me­ba­asi hal­dus­süs­tee­mis on võimalik võrrelda eri tabelite andmeid omavahel. See võimaldab luua seoseid ja ekst­rak­tida sobivaid väärtusi kahest erinevast tabelist. MariaDB-s täi­de­takse seda ülesannet JOIN abil. Seda käsku ka­su­ta­takse koos SELECT ja see võib jaguneda eri­ne­va­tesse ka­te­goo­riatesse. Allpool tut­vus­tame INNER JOIN, LEFT OUTER JOIN ja RIGHT OUTER JOIN ük­sik­as­ja­li­ku­malt.

Mis on JOIN süntaks?

Et aidata teil mõista MariaDB erinevaid JOIN käsklusi, alustame käskluse põhilise süntaksi tut­vus­ta­mi­sest. Siin on INNER JOIN käskluse süntaks:

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

Kasutades SELECT, määrake veerg (või veerud), mida soovite lisada. Asendage asen­dus­märk „table_1” esimese tabeliga ja „table_2” teise tabeliga, mida soovite esimese tabeliga ühendada. INNER JOIN ope­rat­sioon võrdleb esimese tabeli iga rida teise tabeli iga reaga. Tu­le­mus­ta­be­lis kuvatakse ainult sobivad kirjed (need, mis on mõlemas tabelis). Mit­te­vas­ta­vad kirjed jäetakse väl­jun­dist välja.

Kuidas kasutada INNER JOIN MariaDB-s

Et näidata, kuidas INNER JOIN MariaDB-s töötab, vaatame lihtsat näidet. Kasutame and­me­ba­asi, milles on kaks tabelit. Esimene tabel on nimega „Klien­di­loend” ja teine „Tel­li­mu­sed”. Tabel „Klien­di­loend” saab luua MariaDB CREATE TABLE abil. See tabel sisaldab veerge „Kliendi ID”, „Pe­re­kon­na­nimi”, „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
);
sql

Nüüd täitkem see tabel mõningate väär­tus­tega. 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');
sql

Seejärel loome tabeli „Orders”. See sisaldab veerge „OrderID”, „ProductID”, „Cus­to­mer­Name” 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
);
sql

Samuti täidame selle tabeli näi­dis­väär­tus­tega:

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

Nüüd kasutame MariaDB-s INNER JOIN, et filt­ree­rida kliendid, kes on klien­di­loen­dis ja on esitanud tellimuse, mis on loetletud tabelis „Tel­li­mu­sed”. 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;
sql

Selles näites kes­ken­dume klien­di­loendi pe­re­kon­na­ni­mele ja tel­li­muste kliendi nimele. Kui need väärtused ühtivad, lisatakse need tu­le­mus­tesse. 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ün­tak­si­reeg­leid. Erinevalt INNER JOIN väl­jas­ta­takse aga kõik andmed esimesest ehk va­sak­pool­sest tabelist (meie näites „Cus­to­mer­List”) ja ainult vastavad andmed teisest ehk pa­rem­pool­sest tabelist („orders”). Kui teises tabelis pole vastet, mää­ra­takse väär­tu­seks 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;
sql

See 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 vas­tu­pi­di­selt. Siin kom­bi­nee­ri­takse teise ehk pa­rem­poolse tabeli andmed esimese ehk va­sak­poolse tabeli vastavate väär­tus­tega. Kui vastavust ei leita, on tu­le­mu­seks NULL. Allpool on toodud kood:

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

Väljund näeb välja järgmine:

Kliendi nimi Toote ID
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Go to Main Menu