INNER JOIN în MySQL

Legarea tabelelor (JOIN) Toate versiunile MySQL și MariaDB

Combină rândurile din două tabele care au o valoare comună, de exemplu comenzile cu clienții lor.

Sintaxă
SELECT ... FROM tabel1 JOIN tabel2 ON tabel1.coloana = tabel2.coloana;

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 ON sau 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 eroarea Column '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.