Hvordan spørre og slå sammen poster ved hjelp av MariaDB JOIN
I et relasjonsdatabasestyringssystem kan du sammenligne dataposter i forskjellige tabeller med hverandre. Dette gjør det mulig å opprette koblinger og hente ut samsvarende verdier fra to forskjellige tabeller. Denne oppgaven utføres med JOIN i MariaDB. Setningen brukes i kombinasjon med SELECT og kan deles inn i forskjellige kategorier. Vi vil presentere INNER JOIN, LEFT OUTER JOIN og RIGHT OUTER JOIN mer detaljert nedenfor.
Hva er syntaksen for JOIN?
For å hjelpe deg med å forstå de ulike JOIN i MariaDB, begynner vi med å presentere den grunnleggende syntaksen til setningen. Her er syntaksen for INNER JOIN:
SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;sqlVed å bruke SELECT angir du kolonnen (eller kolonnene) du vil inkludere. Erstatt plassholderen «table_1» med den første tabellen og «table_2» med den andre tabellen du vil koble sammen med den første. Operasjonen INNER JOIN sammenligner hver rad i den første tabellen med hver rad i den andre tabellen. Bare samsvarende poster (de som finnes i begge tabellene) vises i resultattabellen. Ikke-samme poster blir ekskludert fra utdataene.
Hvordan bruke INNER JOIN i MariaDB
For å demonstrere hvordan INNER JOIN fungerer i MariaDB, la oss se på et enkelt eksempel. Vi bruker en database som har to tabeller. Den første tabellen heter «Customer List», og den andre heter «Orders». Vi kan opprette tabellen «CustomerList» ved hjelp av MariaDB CREATE TABLE. Denne tabellen inneholder kolonnene «Customer ID», «LastName», «FirstName», «City» og «CreationDate». Slik ser koden ut:
CREATE TABLE CustomerList (
CustomerID INT PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
City VARCHAR(50),
CreationDate DATE
);sqlLa oss nå fylle denne tabellen med noen verdier. For å gjøre dette bruker vi 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');sqlDeretter oppretter vi tabellen «Orders». Denne inneholder kolonnene «OrderID», «ProductID», «CustomerName» og «OrderDate». Koden ser slik ut:
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
ProductID INT,
CustomerName VARCHAR(50),
OrderDate DATE
);sqlVi skal også fylle denne tabellen med eksempelverdier:
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å skal vi bruke INNER JOIN for MariaDB til å filtrere etter kunder som vises i kundelisten og har lagt inn en ordre som er oppført i tabellen Orders. Den tilhørende koden ser slik ut:
SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlI dette eksemplet fokuserer vi på etternavnet i kundelisten og kundenavnet i ordrene. Når disse verdiene samsvarer, inkluderes de i resultatene. Siden kundene Meyer og Rodman finnes i begge tabellene, vil resultatet se slik ut:
| Kunde-ID | Kundenavn | Ordre-ID | Produkt-ID |
|---|---|---|---|
| 3 | Meyer | 102 | 332 |
| 2 | Rodman | 104 | 191 |
LEFT OUTER JOIN
LEFT OUTER JOIN i MariaDB fungerer etter et lignende prinsipp og bruker også en nesten identisk syntaks. I motsetning til INNER JOIN blir imidlertid alle dataposter fra den første eller venstre tabellen (i vårt eksempel «CustomerList») vist, og bare de matchende datapostene fra den andre eller høyre tabellen («orders»). Hvis det ikke finnes noen ekvivalent i den andre tabellen, angis verdien som NULL. Ved å bruke eksemplet ovenfor ser koden slik ut:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
LEFT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlDette gir oss følgende resultat:
| Kundenavn | Produkt-ID |
|---|---|
| Smith | NULL |
| Rodman | 191 |
| Meyer | 332 |
| Garcia | NULL |
| Davis | NULL |
RIGHT OUTER JOIN
I MariaDB fungerer RIGHT OUTER JOIN på motsatt måte. Her kombineres data fra den andre eller høyre tabellen med matchende verdier fra den første eller venstre tabellen. Hvis det ikke er noen match, vil den resulterende verdien være NULL. Nedenfor er koden:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlSlik ser resultatet ut:
| Kundenavn | Produkt-ID |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |