Skip to content

Cum să folosești JOIN-uri în SQL — INNER, LEFT, RIGHT, FULL OUTER

DodaTech Updated 2025-01-15 3 min read

In this tutorial, you'll learn about Cum să folosești JOIN. We cover key concepts, practical examples, and best practices.

Cum să folosești JOIN-uri în SQL pentru a combina date din mai multe tabele folosind INNER JOIN, LEFT JOIN, RIGHT JOIN și FULL OUTER JOIN, cu exemple practice pentru fiecare tip.

Problema

Într-o bază de date relațională, datele sunt distribuite în tabele multiple legate prin chei străine. Fără JOIN-uri, dezvoltătorii scriu interogări separate sau combină date în aplicație, ceea ce duce la cod lent și greu de întreținut.

The Wrong Way

Combinarea manuală a datelor fără JOIN, folosind un produs cartezian urmat de WHERE:

SELECT employees.name, departments.name
FROM employees, departments
WHERE employees.department_id = departments.id;

Output:

   name    |   name
-----------+----------
 Ana Pop   | IT
 Ion Ionescu | HR

Problema: Această sintaxă veche (implicit CROSS JOIN) este greu de citit și poate genera accidental produse carteziene uriașe dacă uiți clauza WHERE.

The Right Way

Folosește sintaxa modernă JOIN pentru claritate și siguranță:

SELECT e.name, d.name AS department
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;

Output:

   name    | department
-----------+------------
 Ana Pop   | IT
 Ion Ionescu| HR

Tipuri de JOIN explicite

INNER JOIN

Returnază doar rândurile cu potrivire în ambele tabele:

SELECT e.name, d.name AS department
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;

Output: 8 angajați care au un departament asignat.

LEFT JOIN

Returnază toate rândurile din stânga și potrivirile din dreapta (NULL unde nu există potrivire):

SELECT e.name, d.name AS department
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;

Output: 10 angajați — cei fără departament vor avea NULL.

RIGHT JOIN

Returnază toate rândurile din dreapta și potrivirile din stânga:

SELECT e.name, d.name AS department
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;

Output: toate departamentele, inclusiv cele fără angajați.

FULL OUTER JOIN

Returnază toate rândurile din ambele părți:

SELECT e.name, d.name AS department
FROM employees e
FULL OUTER JOIN departments d ON e.department_id = d.id;

Output: toți angajații și toate departamentele, cu NULL acolo unde nu există potrivire.

Prevention Tips

  • Folosește întotdeauna sintaxa JOIN ... ON în loc de virgule în FROM
  • Prefixează coloanele cu aliasul tabelei (e.name, d.name)
  • Verifică NULL-urile în LEFT/RIGHT JOIN cu IS NULL sau IS NOT NULL
  • Testează fiecare JOIN separat înainte de a le combina

Greșeli comune cu JOIN-uri

  1. Lipsa aliasurilor — coloanele ambigue cauzează erori "ambiguous column"
  2. Confuzia LEFT vs RIGHT — gândește "LEFT = păstrează tabela din stânga"
  3. Condiții ON greșite= pe coloana greșită duce la rezultate incorecte
  4. Produs cartezian accidental — omiterea condiției ON combină fiecare rând cu fiecare
  5. JOIN-uri multiple fără paranteze — poți controla ordinea cu paranteze

Exercițiu practic

Scrie o interogare care afișează numele angajatului, numele departamentului și numele managerului, folosind 3 tabele (employees, departments, employees ca manageri).

Soluție:

SELECT e.name AS angajat,
       d.name AS departament,
       m.name AS manager
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id
LEFT JOIN employees m ON e.manager_id = m.id;

FAQ

### Ce diferență este între JOIN și INNER JOIN?

Sunt identice. JOIN este prescurtarea pentru INNER JOIN. La fel, LEFT JOIN și LEFT OUTER JOIN sunt același lucru.

Cât de multe JOIN-uri pot avea într-o interogare?

Nu există o limită strictă, dar peste 5-6 JOIN-uri într-o singură interogare pot afecta performanța. Pentru cazuri complexe, consideră view-uri materializate.

LEFT JOIN include NULL-uri?

Da. Rândurile din tabela din stânga fără potrivire în dreapta vor avea valorile coloanelor din dreapta setate la NULL.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Uneltele DodaTech se integrează nativ cu bazele de date pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro