Kako poizvedovati in združevati zapise z uporabo MariaDB JOIN
V sistemu za upravljanje relacijskih baz podatkov lahko med seboj primerjate zapise podatkov v različnih tabelah. To omogoča ustvarjanje povezav in izpisovanje ujemajočih se vrednosti iz dveh različnih tabel. Ta naloga se v MariaDB izvaja z JOIN. Izjava se uporablja v kombinaciji z SELECT in se lahko razdeli v različne kategorije. V nadaljevanju bomo podrobneje predstavili 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 predstavili 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;sqlZ uporabo SELECT določite stolpec (ali stolpce), ki jih želite vključiti. Nadomestite 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 rezultatov se prikažejo samo ujemajoči se zapisi (tisti, ki so prisotni v obeh tabelah). Neujemanje zapisi so izključeni iz izhoda.
Kako uporabljati 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 »CustomerList« lahko ustvarimo z uporabo MariaDB CREATE TABLE. Ta tabela vključuje stolpce »Customer ID« (ID stranke), »LastName« (Priimek), »FirstName« (Ime), »City« (Mesto) in »CreationDate« (Datum ustvarjanja). Tako izgleda koda:
CREATE TABLE CustomerList (
CustomerID INT PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
City VARCHAR(50),
CreationDate DATE
);sqlSedaj napolnimo tabelo z nekaj vrednostmi. 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');sqlNato ustvarimo tabelo »Naročila«. Ta vsebuje stolpce »OrderID«, »ProductID«, »CustomerName« in »OrderDate«. Koda je naslednja:
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
ProductID INT,
CustomerName VARCHAR(50),
OrderDate DATE
);sqlTo tabelo bomo tudi napolnili z vzorčnimi vrednostmi:
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');sqlSedaj bomo uporabili INNER JOIN za MariaDB, da filtriramo 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;sqlV tem primeru se osredotočamo 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 podatkovni zapisi iz prve ali leve tabele (v našem primeru »CustomerList«) in samo ujemajoči se podatkovni zapisi iz druge ali desne tabele (»orders«). Če v drugi tabeli ni ustreznega 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;sqlTo 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 ujemajočimi vrednostmi 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;sqlTako izgleda izhod:
| Ime stranke | ID izdelka |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |