Les subconsultes són una eina poderosa en SQL que permeten realitzar consultes dins d'altres consultes. Aquestes poden ser utilitzades en diverses parts d'una instrucció SQL, com en les claus SELECT
, FROM
, WHERE
, i altres. En aquest tema, explorarem què són les subconsultes, com utilitzar-les i veurem exemples pràctics per entendre millor el seu funcionament.
Què és una Subconsulta?
Una subconsulta és una consulta SQL que es troba dins d'una altra consulta SQL. La subconsulta es pot utilitzar per retornar dades que seran utilitzades per la consulta principal. Les subconsultes poden ser utilitzades en diverses parts d'una instrucció SQL, com ara:
- En la clàusula
SELECT
per retornar valors calculats. - En la clàusula
FROM
per crear una taula temporal. - En la clàusula
WHERE
per filtrar resultats basats en una condició.
Tipus de Subconsultes
Hi ha dos tipus principals de subconsultes:
- Subconsultes Escalares: Retornen un sol valor.
- Subconsultes de Taula: Retornen un conjunt de files.
Exemples de Subconsultes
Subconsulta en la Clàusula SELECT
En aquest exemple, la subconsulta (SELECT AVG(price) FROM products)
calcula el preu mitjà de tots els productes i el retorna com a average_price
per a cada fila de la consulta principal.
Subconsulta en la Clàusula FROM
SELECT sub.product_id, sub.total_sales FROM (SELECT product_id, SUM(quantity) AS total_sales FROM sales GROUP BY product_id) AS sub;
En aquest exemple, la subconsulta dins de la clàusula FROM
crea una taula temporal sub
que conté el total de vendes per a cada producte. La consulta principal després selecciona dades d'aquesta taula temporal.
Subconsulta en la Clàusula WHERE
En aquest exemple, la subconsulta (SELECT AVG(price) FROM products)
calcula el preu mitjà de tots els productes. La consulta principal després selecciona tots els productes que tenen un preu superior al preu mitjà.
Exercicis Pràctics
Exercici 1: Subconsulta en la Clàusula SELECT
Enunciat: Escriu una consulta que mostri el product_id
, product_name
i el preu mitjà de tots els productes com a average_price
.
Solució:
Exercici 2: Subconsulta en la Clàusula FROM
Enunciat: Escriu una consulta que mostri el product_id
i el total de vendes (total_sales
) per a cada producte.
Solució:
SELECT sub.product_id, sub.total_sales FROM (SELECT product_id, SUM(quantity) AS total_sales FROM sales GROUP BY product_id) AS sub;
Exercici 3: Subconsulta en la Clàusula WHERE
Enunciat: Escriu una consulta que mostri el product_id
i product_name
de tots els productes que tenen un preu superior al preu mitjà de tots els productes.
Solució:
Errors Comuns i Consells
-
Error Comú: Utilitzar una subconsulta que retorna múltiples files en una clàusula que espera un sol valor.
- Solució: Assegura't que la subconsulta retorni un sol valor quan s'utilitza en contextos escalares.
-
Error Comú: No aliasar la subconsulta en la clàusula
FROM
.- Solució: Sempre proporciona un àlies a la subconsulta per poder referenciar-la correctament en la consulta principal.
Conclusió
Les subconsultes són una eina essencial en SQL que permeten realitzar consultes complexes de manera eficient. Hem vist com utilitzar subconsultes en diverses parts d'una instrucció SQL i hem practicat amb exemples concrets. Amb aquesta base, estàs preparat per aplicar subconsultes en les teves pròpies consultes SQL i resoldre problemes més avançats.
Curs de PostgreSQL
Mòdul 1: Introducció a PostgreSQL
Mòdul 2: Operacions bàsiques de SQL
Mòdul 3: Consultes SQL avançades
Mòdul 4: Disseny de bases de dades i normalització
Mòdul 5: Funcionalitats avançades de PostgreSQL
Mòdul 6: Optimització i millora del rendiment
- Optimització de consultes
- Estratègies d'indexació
- Analitzant el rendiment de les consultes
- Vacuuming i manteniment
Mòdul 7: Seguretat i gestió d'usuaris
- Rols d'usuari i permisos
- Mètodes d'autenticació
- Encriptació de dades
- Còpia de seguretat i restauració
Mòdul 8: Treballant amb JSON i funcionalitats NoSQL
Mòdul 9: Extensions i eines avançades
- PostGIS per a dades geoespacials
- Cerca de text complet
- Wrappers de dades externes
- PL/pgSQL i altres llenguatges procedimentals