En aquest tema, explorarem les operacions JOIN en SQL, que són fonamentals per treballar amb dades distribuïdes en múltiples taules. Les operacions JOIN permeten combinar registres de dues o més taules en una sola consulta, basant-se en una relació lògica entre les taules.
Objectius d'aprenentatge
- Comprendre què són les operacions JOIN.
- Aprendre els diferents tipus de JOIN.
- Saber quan i com utilitzar cada tipus de JOIN.
Què és una operació JOIN?
Una operació JOIN en SQL s'utilitza per combinar registres de dues o més taules en una base de dades. Les taules es combinen basant-se en una condició comuna, sovint una clau primària en una taula i una clau forana en una altra.
Tipus de JOIN
Hi ha diversos tipus de JOIN en SQL, cadascun amb el seu propi comportament i ús específic:
- INNER JOIN: Retorna només les files que tenen coincidències en ambdues taules.
- LEFT JOIN (o LEFT OUTER JOIN): Retorna totes les files de la taula esquerra i les files coincidents de la taula dreta. Si no hi ha coincidència, es retorna NULL per les columnes de la taula dreta.
- RIGHT JOIN (o RIGHT OUTER JOIN): Retorna totes les files de la taula dreta i les files coincidents de la taula esquerra. Si no hi ha coincidència, es retorna NULL per les columnes de la taula esquerra.
- FULL OUTER JOIN: Retorna totes les files quan hi ha una coincidència en una de les taules. Si no hi ha coincidència, es retorna NULL per les columnes que no tenen coincidència.
Sintaxi bàsica de JOIN
La sintaxi general per a una operació JOIN és la següent:
SELECT column1, column2, ... FROM table1 JOIN_TYPE table2 ON table1.common_column = table2.common_column;
Exemples pràctics
INNER JOIN
L'INNER JOIN retorna només les files que tenen coincidències en ambdues taules.
SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.id;
Explicació:
employees
idepartments
són les taules que estem combinant.employees.department_id
és la clau forana que es relaciona ambdepartments.id
, la clau primària.
LEFT JOIN
El LEFT JOIN retorna totes les files de la taula esquerra i les files coincidents de la taula dreta.
SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id;
Explicació:
- Retorna tots els empleats, inclosos aquells que no tenen un departament assignat. En aquests casos,
department_name
serà NULL.
RIGHT JOIN
El RIGHT JOIN retorna totes les files de la taula dreta i les files coincidents de la taula esquerra.
SELECT employees.name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.id;
Explicació:
- Retorna tots els departaments, inclosos aquells que no tenen empleats assignats. En aquests casos,
name
serà NULL.
FULL OUTER JOIN
El FULL OUTER JOIN retorna totes les files quan hi ha una coincidència en una de les taules.
SELECT employees.name, departments.department_name FROM employees FULL OUTER JOIN departments ON employees.department_id = departments.id;
Explicació:
- Retorna totes les files de
employees
idepartments
. Si no hi ha coincidència, les columnes de la taula que no té coincidència seran NULL.
Exercicis pràctics
Exercici 1: Utilitzar INNER JOIN
Enunciat:
Tens dues taules, students
i courses
. La taula students
té les columnes student_id
, name
i course_id
. La taula courses
té les columnes course_id
i course_name
. Escriu una consulta per obtenir els noms dels estudiants i els noms dels cursos en què estan inscrits.
Solució:
SELECT students.name, courses.course_name FROM students INNER JOIN courses ON students.course_id = courses.course_id;
Exercici 2: Utilitzar LEFT JOIN
Enunciat:
Tens dues taules, orders
i customers
. La taula orders
té les columnes order_id
, order_date
i customer_id
. La taula customers
té les columnes customer_id
i customer_name
. Escriu una consulta per obtenir tots els noms dels clients i les dates de les seves comandes, incloent els clients que no tenen comandes.
Solució:
SELECT customers.customer_name, orders.order_date FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id;
Exercici 3: Utilitzar FULL OUTER JOIN
Enunciat:
Tens dues taules, products
i suppliers
. La taula products
té les columnes product_id
, product_name
i supplier_id
. La taula suppliers
té les columnes supplier_id
i supplier_name
. Escriu una consulta per obtenir tots els noms dels productes i els noms dels proveïdors, incloent els productes sense proveïdors i els proveïdors sense productes.
Solució:
SELECT products.product_name, suppliers.supplier_name FROM products FULL OUTER JOIN suppliers ON products.supplier_id = suppliers.supplier_id;
Resum
En aquesta secció, hem après sobre les operacions JOIN en SQL, incloent els diferents tipus de JOIN i com utilitzar-los per combinar dades de múltiples taules. Hem vist exemples pràctics de cada tipus de JOIN i hem practicat amb exercicis per reforçar els conceptes apresos. En el següent tema, aprofundirem en l'ús específic de l'INNER JOIN.
Curs de SQL
Mòdul 1: Introducció a SQL
Mòdul 2: Consultes bàsiques de SQL
Mòdul 3: Treballar amb múltiples taules
Mòdul 4: Filtratge avançat de dades
- Utilitzar LIKE per a coincidències de patrons
- Operadors IN i BETWEEN
- Valors NULL i IS NULL
- Agrupar dades amb GROUP BY
- Clàusula HAVING
Mòdul 5: Manipulació de dades
Mòdul 6: Funcions avançades de SQL
Mòdul 7: Subconsultes i consultes niades
- Introducció a les subconsultes
- Subconsultes correlacionades
- EXISTS i NOT EXISTS
- Utilitzar subconsultes en les clàusules SELECT, FROM i WHERE
Mòdul 8: Índexs i optimització del rendiment
- Comprendre els índexs
- Crear i gestionar índexs
- Tècniques d'optimització de consultes
- Analitzar el rendiment de les consultes
Mòdul 9: Transaccions i concurrència
- Introducció a les transaccions
- Propietats ACID
- Instruccions de control de transaccions
- Gestionar la concurrència
Mòdul 10: Temes avançats
Mòdul 11: SQL en la pràctica
- Casos d'ús del món real
- Millors pràctiques
- SQL per a l'anàlisi de dades
- SQL en el desenvolupament web