Kā veikt vaicājumus un apvienot ierakstus, izmantojot MariaDB JOIN
Relāciju datu bāzes pārvaldības sistēmā var salīdzināt datu ierakstus dažādās tabulās. Tas ļauj izveidot saiknes un iegūt atbilstošas vērtības no divām dažādām tabulām. Šo uzdevumu MariaDB veic ar JOIN. Šo izteikumu lieto kopā ar SELECT, un to var iedalīt dažādās kategorijās. Turpmāk sīkāk izklāstīsim INNER JOIN, LEFT OUTER JOIN un RIGHT OUTER JOIN.
Kāda ir sintakse skaitlim JOIN?
Lai palīdzētu jums izprast dažādās JOIN instrukcijas MariaDB, sāksim ar instrukcijas pamata sintakses izklāstīšanu. Šeit ir sintakse INNER JOIN:
SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;sqlIzmantojot SELECT, norādiet kolonnu (vai kolonnu), kuru vēlaties iekļaut. Aizstājiet vietas turētāju „table_1” ar pirmo tabulu un „table_2” ar otro tabulu, kuru vēlaties apvienot ar pirmo. INNER JOIN darbība salīdzina katru rindu pirmajā tabulā ar katru rindu otrajā tabulā. Rezultātu tabulā tiks parādīti tikai atbilstošie ieraksti (tie, kas ir abās tabulās). Neatbilstošie ieraksti tiek izslēgti no izvades.
Kā lietot INNER JOIN MariaDB
Lai parādītu, kā INNER JOIN darbojas MariaDB, aplūkosim vienkāršu piemēru. Izmantosim datu bāzi, kurā ir divas tabulas. Pirmā tabula ir nosaukta „Klientu saraksts”, bet otrā – „Pasūtījumi”. Tabulu „Klientu saraksts” var izveidot, izmantojot MariaDB CREATE TABLE. Šajā tabulā ir kolonnas „Klienta ID”, „Uzvārds”, „Vārds”, „Pilsēta” un „Izveides datums”. Šāds ir koda izskats:
CREATE TABLE CustomerList (
CustomerID INT PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
City VARCHAR(50),
CreationDate DATE
);sqlTagad piepildīsim šo tabulu ar dažām vērtībām. Lai to izdarītu, izmantosim 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');sqlTad izveidojam tabulu „Orders”. Tajā ir kolonnas „OrderID”, „ProductID”, „CustomerName” un „OrderDate”. Kods izskatās šādi:
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
ProductID INT,
CustomerName VARCHAR(50),
OrderDate DATE
);sqlMēs arī aizpildīsim šo tabulu ar paraugu vērtībām:
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');sqlTagad izmantosim INNER JOIN MariaDB, lai filtrētu klientus, kuri parādās klientu sarakstā un ir veikuši pasūtījumu, kas uzskaitīts tabulas Orders. Atbilstošais kods izskatās šādi:
SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlŠajā piemērā mēs koncentrējamies uz uzvārdu klientu sarakstā un klienta vārdu pasūtījumos. Ja šīs vērtības saskan, tās tiek iekļautas rezultātos. Tā kā klienti Meyer un Rodman ir abās tabulās, izvade izskatīsies šādi:
| Klienta ID | Klienta vārds | Pasūtījuma ID | Produkta ID |
|---|---|---|---|
| 3 | Meyer | 102 | 332 |
| 2 | Rodman | 104 | 191 |
LEFT OUTER JOIN
LEFT OUTER JOIN MariaDB darbojas pēc līdzīga principa un izmanto gandrīz identisku sintaksi. Tomēr, atšķirībā no INNER JOIN, tiek izvadīti visi datu ieraksti no pirmās vai kreisās tabulas (mūsu piemērā „CustomerList”) un tikai atbilstošie datu ieraksti no otrās vai labās tabulas („orders”). Ja otrajā tabulā nav ekvivalenta, vērtība tiek norādīta kā NULL. Izmantojot iepriekš minēto piemēru, kods izskatās šādi:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
LEFT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlTas dod mums šādu rezultātu:
| Klienta vārds | Produkta ID |
|---|---|
| Smith | NULL |
| Rodman | 191 |
| Meyer | 332 |
| Garcia | NULL |
| Davis | NULL |
RIGHT OUTER JOIN
MariaDB datu bāzē RIGHT OUTER JOIN darbojas pretēji. Šeit dati no otrās vai labās tabulas tiek apvienoti ar atbilstošajām vērtībām no pirmās vai kreisās tabulas. Ja atbilstības nav, rezultātā iegūtā vērtība būs NULL. Zemāk ir redzams kods:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlŠādi izskatās rezultāts:
| Klienta vārds | Produkta ID |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |