Kaip užklausti ir sujungti įrašus naudojant MariaDB JOIN
Reliacinėje duomenų bazių valdymo sistemoje galite palyginti skirtingų lentelių duomenų įrašus tarpusavyje. Tai leidžia kurti ryšius ir išgauti atitinkančias reikšmes iš dviejų skirtingų lentelių. Ši užduotis atliekama naudojant JOIN MariaDB. Šis teiginys naudojamas kartu su SELECT ir gali būti suskirstytas į skirtingas kategorijas. Toliau pateiksime išsamesnę informaciją apie INNER JOIN, LEFT OUTER JOIN ir RIGHT OUTER JOIN.
Kokia yra JOIN sintaksė?
Kad galėtumėte geriau suprasti įvairias JOIN MariaDB instrukcijas, pradėsime nuo pagrindinės instrukcijos sintaksės pristatymo. Štai INNER JOIN sintaksė:
SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;sqlNaudodami SELECT, nurodote stulpelį (arba stulpelius), kurį norite įtraukti. Pakeiskite 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 atitinkantys įrašai (esantys abiejuose staluose). Nesutampantys įrašai iš rezultatų yra pašalinami.
Kaip naudoti INNER JOIN MariaDB
Norėdami parodyti, kaip INNER JOIN veikia MariaDB, pažiūrėkime 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 stulpeliai „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
);sqlDabar užpildykime š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');sqlTada sukuriame lentelę „Užsakymai“. Joje yra stulpeliai „UžsakymoID“, „ProduktoID“, „KlientoVardas“ ir „UžsakymoData“. Kodas atrodo taip:
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
ProductID INT,
CustomerName VARCHAR(50),
OrderDate DATE
);sqlTaip pat užpildysime šią lentelę pavyzdinė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');sqlDabar panaudosime INNER JOIN MariaDB, kad atrinktume klientus, kurie yra klientų sąraše ir yra pateikę užsakymą, įtrauktą į užsakymų lentelę. Atitinkamas 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 sutelkiame dėmesį į pavardę klientų sąraše ir kliento vardą užsakymuose. Kai šios reikšmės sutampa, jos įtraukiamos į rezultatus. Kadangi klientai Meyer ir Rodman yra abiejose lentelėse, rezultatas 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, skirtingai nei INNER JOIN, išvedami visi duomenų įrašai iš pirmosios arba kairės lentelės (mūsų pavyzdyje „CustomerList“) ir tik atitinkami duomenų įrašai iš antrosios arba dešinės lentelės („orders“). Jei antrojoje lentelėje nėra atitikmens, 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;sqlTai 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šingai. Čia duomenys iš antrosios arba dešinės lentelės yra sujungiami su atitinkančiais duomenimis iš pirmosios arba kairės lentelės. Jei atitikimo nėra, galutinė reikšmė bus NULL. Toliau pateikiamas kodas:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlŠtai kaip atrodo rezultatas:
| Kliento vardas | Produkto ID |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |