V sistemu za upra­vlja­nje re­la­cij­skih baz podatkov lahko med seboj pri­mer­ja­te zapise podatkov v različnih tabelah. To omogoča ustvar­ja­nje povezav in iz­pi­so­va­nje uje­ma­jo­čih se vrednosti iz dveh različnih tabel. Ta naloga se v MariaDB izvaja z JOIN. Izjava se uporablja v kom­bi­na­ci­ji z SELECT in se lahko razdeli v različne ka­te­go­ri­je. V na­da­lje­va­nju bomo po­drob­ne­je pred­sta­vi­li INNER JOIN, LEFT OUTER JOIN in RIGHT OUTER JOIN.

Kakšna je sintaksa za JOIN?

Da bi vam pomagali razumeti različne JOIN izjave v MariaDB, bomo najprej pred­sta­vi­li osnovno sintakso izjave. Tukaj je sintaksa za INNER JOIN:

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

Z uporabo SELECT določite stolpec (ali stolpce), ki jih želite vključiti. Na­do­me­sti­te zaznamek „table_1” s prvo tabelo in „table_2” z drugo tabelo, ki jo želite združiti s prvo. Operacija INNER JOIN primerja vsako vrstico v prvi tabeli z vsako vrstico v drugi tabeli. V tabeli re­zul­ta­tov se prikažejo samo ujemajoči se zapisi (tisti, ki so prisotni v obeh tabelah). Ne­u­je­ma­nje zapisi so iz­klju­če­ni iz izhoda.

Kako upo­ra­blja­ti INNER JOIN v MariaDB

Da bi pokazali, kako deluje INNER JOIN v MariaDB, si oglejmo preprost primer. Uporabili bomo bazo podatkov, ki ima dve tabeli. Prva tabela se imenuje »Customer List« (Seznam strank), druga pa »Orders« (Naročila). Tabelo »Cu­sto­mer­List« lahko ustvarimo z uporabo MariaDB CREATE TABLE. Ta tabela vključuje stolpce »Customer ID« (ID stranke), »LastName« (Priimek), »FirstName« (Ime), »City« (Mesto) in »Cre­a­ti­on­Da­te« (Datum ustvar­ja­nja). Tako izgleda koda:

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

Sedaj napolnimo tabelo z nekaj vre­dnost­mi. Za to uporabimo 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

Nato ustvarimo tabelo »Naročila«. Ta vsebuje stolpce »OrderID«, »ProductID«, »Cu­sto­mer­Na­me« in »OrderDate«. Koda je naslednja:

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

To tabelo bomo tudi napolnili z vzorčnimi vre­dnost­mi:

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

Sedaj bomo uporabili INNER JOIN za MariaDB, da fil­tri­ra­mo stranke, ki so na seznamu strank in so oddale naročilo, navedeno v tabeli Naročila. Ustrezna koda je naslednja:

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

V tem primeru se osre­do­to­ča­mo na priimek v seznamu strank in ime stranke v naročilih. Ko se te vrednosti ujemajo, so vključene v rezultate. Ker sta stranki Meyer in Rodman navedeni v obeh tabelah, bi izpis izgledal takole:

ID stranke Ime stranke ID naročila ID izdelka
3 Meyer 102 332
2 Rodman 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN v MariaDB deluje po podobnem principu in uporablja skoraj identično sintakso. V nasprotju z INNER JOIN pa se izpišejo vsi po­dat­kov­ni zapisi iz prve ali leve tabele (v našem primeru »Cu­sto­mer­List«) in samo ujemajoči se po­dat­kov­ni zapisi iz druge ali desne tabele (»orders«). Če v drugi tabeli ni ustre­zne­ga zapisa, se vrednost določi kot NULL. V zgornjem primeru koda izgleda takole:

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

To nam da naslednji rezultat:

Ime stranke ID izdelka
Smith NULL
Rodman 191
Meyer 332
Garcia NULL
Davis NULL

RIGHT OUTER JOIN

V MariaDB deluje RIGHT OUTER JOIN nasprotno. Tukaj se podatki iz druge ali desne tabele združijo z uje­ma­jo­či­mi vre­dnost­mi iz prve ali leve tabele. Če ni ujemanja, bo končna vrednost NULL. Spodaj je koda:

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

Tako izgleda izhod:

Ime stranke ID izdelka
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Go to Main Menu