Re­lia­ci­nė­je duomenų bazių valdymo sistemoje galite palyginti skirtingų lentelių duomenų įrašus tar­pu­sa­vy­je. Tai leidžia kurti ryšius ir išgauti ati­tin­kan­čias reikšmes iš dviejų skirtingų lentelių. Ši užduotis atliekama naudojant JOIN MariaDB. Šis teiginys nau­do­ja­mas kartu su SELECT ir gali būti su­skirs­ty­tas į skir­tin­gas ka­te­go­ri­jas. Toliau pa­teik­si­me išsamesnę in­for­ma­ci­ją apie INNER JOIN, LEFT OUTER JOIN ir RIGHT OUTER JOIN.

Kokia yra JOIN sintaksė?

Kad ga­lė­tu­mė­te geriau suprasti įvairias JOIN MariaDB inst­ruk­ci­jas, pradėsime nuo pag­rin­di­nės inst­ruk­ci­jos sintaksės pri­sta­ty­mo. Štai INNER JOIN sintaksė:

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

Naudodami SELECT, nurodote stulpelį (arba stul­pe­lius), kurį norite įtraukti. Pa­kei­s­ki­te vietos laikiklį „table_1“ pirmuoju stalu ir „table_2“ antruoju stalu, kurį norite sujungti su pirmuoju. INNER JOIN operacija palygina kiekvieną pirmojo stalo eilutę su kiekviena antrojo stalo eilute. Rezultatų stale bus rodomi tik ati­tin­kan­tys įrašai (esantys abiejuose staluose). Ne­su­tam­pan­tys įrašai iš rezultatų yra pa­ša­li­na­mi.

Kaip naudoti INNER JOIN MariaDB

Norėdami parodyti, kaip INNER JOIN veikia MariaDB, pa­žiū­rė­ki­me paprastą pavyzdį. Naudosime duomenų bazę, kurioje yra dvi lentelės. Pirmoji lentelė vadinasi „Klientų sąrašas“, o antroji – „Užsakymai“. Lentelę „Klientų sąrašas“ galime sukurti naudodami MariaDB CREATE TABLE. Šioje lentelėje yra stul­pe­liai „Kliento ID“, „Pavardė“, „Vardas“, „Miestas“ ir „Sukūrimo data“. Štai kaip atrodo kodas:

CREATE TABLE CustomerList (
	CustomerID INT PRIMARY KEY,
	LastName VARCHAR(50),
	FirstName VARCHAR(50),
	City VARCHAR(50),
	CreationDate DATE
);
sql

Dabar už­pil­dy­ki­me šią lentelę kai kuriais reikš­mė­mis. Tam naudojame 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

Tada sukuriame lentelę „Užsakymai“. Joje yra stul­pe­liai „Už­sa­ky­mo­ID“, „Pro­duk­to­ID“, „Kli­en­to­Var­das“ ir „Už­sa­kymo­Da­ta“. Kodas atrodo taip:

CREATE TABLE Orders (
	OrderID INT AUTO_INCREMENT PRIMARY KEY,
	ProductID INT,
	CustomerName VARCHAR(50),
	OrderDate DATE
);
sql

Taip pat už­pil­dy­si­me šią lentelę pa­vyz­di­nė­mis reikš­mė­mis:

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

Dabar pa­nau­do­si­me INNER JOIN MariaDB, kad at­rink­tu­me klientus, kurie yra klientų sąraše ir yra pateikę užsakymą, įtrauktą į užsakymų lentelę. Ati­tin­ka­mas kodas atrodo taip:

SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;
sql

Šiame pavyzdyje mes su­tel­kia­me dėmesį į pavardę klientų sąraše ir kliento vardą už­sa­ky­muo­se. Kai šios reikšmės sutampa, jos įtrau­kia­mos į re­zul­ta­tus. Kadangi klientai Meyer ir Rodman yra abiejose lentelėse, re­zul­ta­tas atrodytų taip:

Kliento ID Kliento vardas Užsakymo ID Produkto ID
3 Meyer 102 332
2 Rodman 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN MariaDB veikia pagal panašų principą ir taip pat naudoja beveik identišką sintaksę. Tačiau, skir­tin­gai nei INNER JOIN, išvedami visi duomenų įrašai iš pirmosios arba kairės lentelės (mūsų pavyzdyje „Cus­to­mer­List“) ir tik ati­tin­ka­mi duomenų įrašai iš antrosios arba dešinės lentelės („orders“). Jei antrojoje lentelėje nėra ati­tik­mens, vertė nurodomas kaip NULL. Naudojant aukščiau pateiktą pavyzdį, kodas atrodo taip:

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

Tai duoda mums tokį rezultatą:

Kliento vardas Produkto ID
Smith NULL
Rodman 191
Meyer 332
Garcia NULL
Davis NULL

RIGHT OUTER JOIN

MariaDB sistemoje RIGHT OUTER JOIN veikia prie­šin­gai. Čia duomenys iš antrosios arba dešinės lentelės yra su­jun­gia­mi su ati­tin­kan­čiais duo­me­ni­mis iš pirmosios arba kairės lentelės. Jei atitikimo nėra, galutinė reikšmė bus NULL. Toliau pa­tei­kia­mas kodas:

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

Štai kaip atrodo re­zul­ta­tas:

Kliento vardas Produkto ID
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Go to Main Menu