Cum să folosești JOIN-uri în SQL — INNER, LEFT, RIGHT, FULL OUTER
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 NULLsauIS NOT NULL - Testează fiecare JOIN separat înainte de a le combina
Greșeli comune cu JOIN-uri
- Lipsa aliasurilor — coloanele ambigue cauzează erori "ambiguous column"
- Confuzia LEFT vs RIGHT — gândește "LEFT = păstrează tabela din stânga"
- Condiții ON greșite —
=pe coloana greșită duce la rezultate incorecte - Produs cartezian accidental — omiterea condiției ON combină fiecare rând cu fiecare
- 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
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