Ce face INNER JOIN
Datele unei aplicații sunt împărțite în mai multe tabele: clienții într-unul, comenzile în altul. JOIN le pune la loc: pentru fiecare comandă, găsește clientul cu id-ul din coloana client_id.
INNER JOIN (sau simplu JOIN) păstrează doar rândurile care au pereche în ambele tabele. Un client fără comenzi nu apare. Pentru a-i păstra și pe ei, folosește LEFT JOIN.
Condiția de legare se scrie după ON. Când ambele tabele au coloane cu același nume, scrie și numele tabelului (sau aliasul): c.nume.
Parametri
| Parametru | Descriere |
|---|---|
tabel1, tabel2 |
Tabelele legate. De obicei primesc alias-uri scurte. |
ON conditie |
Cum se potrivesc rândurile, de obicei cheia străină egală cu cheia primară. |
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE clienti (
id INT PRIMARY KEY,
nume VARCHAR(50) NOT NULL,
oras VARCHAR(30),
email VARCHAR(100)
);
INSERT INTO clienti VALUES
(1, 'Ana Pop', 'Cluj', 'ana@exemplu.ro'),
(2, 'Bogdan Ionescu', 'Sibiu', NULL),
(3, 'Cristina Marin', 'Cluj', 'cristina@exemplu.ro'),
(4, 'Dan Stoica', 'Arad', NULL);
CREATE TABLE comenzi (
id INT PRIMARY KEY,
client_id INT,
data DATE,
total INT
);
INSERT INTO comenzi VALUES
(101, 1, '2026-09-03', 3580),
(102, 3, '2026-09-15', 650),
(103, 1, '2026-10-02', 1200),
(104, 2, '2026-10-11', 80);
Exemplul 1: Comenzile cu numele clientului
SELECT o.id, c.nume, o.total
FROM comenzi AS o
JOIN clienti AS c ON c.id = o.client_id
ORDER BY o.id;
Rezultat
+-----+----------------+-------+
| id | nume | total |
+-----+----------------+-------+
| 101 | Ana Pop | 3580 |
| 102 | Cristina Marin | 650 |
| 103 | Ana Pop | 1200 |
| 104 | Bogdan Ionescu | 80 |
+-----+----------------+-------+
Exemplul 2: JOIN cu WHERE și GROUP BY
SELECT c.oras, SUM(o.total) AS vanzari
FROM comenzi AS o
JOIN clienti AS c ON c.id = o.client_id
WHERE c.oras = 'Cluj'
GROUP BY c.oras;
Rezultat
+------+---------+
| oras | vanzari |
+------+---------+
| Cluj | 5430 |
+------+---------+
Greșeli frecvente
- Uiți condiția
ONsau pui o condiție greșită. Primești fiecare rând combinat cu fiecare rând (produs cartezian): 1.000 de clienți și 10.000 de comenzi dau 10 milioane de rânduri. - Scrii o coloană care există în ambele tabele fără prefix (
SELECT id) și primești eroareaColumn 'id' in field list is ambiguous.
Comenzi înrudite
LEFT JOIN: Leagă două tabele și păstrează toate rândurile din primul, chiar dacă nu au pereche în al doilea.AS (alias): Dă un nume nou (alias) unei coloane sau unui tabel în rezultatul interogării.FOREIGN KEY: Leagă o coloană de cheia primară din alt tabel și împiedică datele fără pereche.