Les subconsultes són una eina poderosa en SQL que permeten incrustar una consulta dins d'una altra. Aquestes poden ser utilitzades per a una varietat de propòsits, com ara filtrar resultats, calcular valors agregats o fins i tot unir taules de manera més complexa. En aquest tema, explorarem els diferents tipus de subconsultes i com utilitzar-les efectivament a BigQuery.
Tipus de Subconsultes
- Subconsulta en la clàusula
SELECT
:- Utilitzada per calcular valors que seran retornats com a part del conjunt de resultats.
- Subconsulta en la clàusula
FROM
:- Tractada com una taula temporal que pot ser utilitzada en la consulta principal.
- Subconsulta en la clàusula
WHERE
:- Utilitzada per filtrar els resultats de la consulta principal basant-se en els resultats de la subconsulta.
- Subconsulta en la clàusula
HAVING
:- Similar a la subconsulta en la clàusula
WHERE
, però aplicada després de l'agregació de dades.
- Similar a la subconsulta en la clàusula
Subconsulta en la clàusula SELECT
Exemple
Explicació
- Aquesta subconsulta calcula el salari mitjà de tots els empleats.
- El resultat de la subconsulta es retorna com una columna addicional
avg_salary
en el conjunt de resultats de la consulta principal.
Subconsulta en la clàusula FROM
Exemple
SELECT department, AVG(salary) AS avg_salary FROM (SELECT department, salary FROM employees WHERE salary > 50000) GROUP BY department;
Explicació
- La subconsulta selecciona els empleats amb un salari superior a 50,000.
- La consulta principal calcula el salari mitjà per departament només per als empleats seleccionats per la subconsulta.
Subconsulta en la clàusula WHERE
Exemple
Explicació
- La subconsulta calcula el salari mitjà de tots els empleats.
- La consulta principal selecciona els empleats amb un salari superior al salari mitjà calculat per la subconsulta.
Subconsulta en la clàusula HAVING
Exemple
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) > (SELECT AVG(salary) FROM employees);
Explicació
- La subconsulta calcula el salari mitjà de tots els empleats.
- La consulta principal calcula el salari mitjà per departament i només retorna aquells departaments on el salari mitjà és superior al salari mitjà global calculat per la subconsulta.
Exercicis Pràctics
Exercici 1
Descripció: Selecciona els noms dels empleats que treballen en un departament on el salari mitjà és superior a 60,000.
SELECT name FROM employees WHERE department IN ( SELECT department FROM employees GROUP BY department HAVING AVG(salary) > 60000 );
Exercici 2
Descripció: Troba els departaments on el nombre d'empleats és superior a la mitjana del nombre d'empleats per departament.
SELECT department FROM employees GROUP BY department HAVING COUNT(*) > ( SELECT AVG(dept_count) FROM (SELECT COUNT(*) AS dept_count FROM employees GROUP BY department) );
Solucions
Solució Exercici 1
SELECT name FROM employees WHERE department IN ( SELECT department FROM employees GROUP BY department HAVING AVG(salary) > 60000 );
Solució Exercici 2
SELECT department FROM employees GROUP BY department HAVING COUNT(*) > ( SELECT AVG(dept_count) FROM (SELECT COUNT(*) AS dept_count FROM employees GROUP BY department) );
Errors Comuns i Consells
- Error: Subconsulta retorna més d'un valor:
- Assegura't que la subconsulta en una clàusula
WHERE
oHAVING
retorna un sol valor. Utilitza agregacions o limitacions adequades.
- Assegura't que la subconsulta en una clàusula
- Error: Subconsulta no correlacionada:
- Si la subconsulta necessita referenciar una columna de la consulta principal, assegura't que està correctament correlacionada.
- Consell: Optimització:
- Les subconsultes poden ser costoses en termes de rendiment. Considera utilitzar
JOIN
oWITH
(CTEs) per a optimitzar les consultes complexes.
- Les subconsultes poden ser costoses en termes de rendiment. Considera utilitzar
Conclusió
Les subconsultes són una eina essencial per a realitzar consultes SQL més complexes i poderoses. Comprendre com i quan utilitzar-les pot millorar significativament la teva capacitat per a manipular i analitzar dades a BigQuery. Practica amb els exercicis proporcionats per a consolidar els teus coneixements i prepara't per a temes més avançats en SQL.
Curs de BigQuery
Mòdul 1: Introducció a BigQuery
- Què és BigQuery?
- Configurar el teu entorn de BigQuery
- Comprendre l'arquitectura de BigQuery
- Visió general de la consola de BigQuery
Mòdul 2: SQL bàsic a BigQuery
Mòdul 3: SQL intermedi a BigQuery
Mòdul 4: SQL avançat a BigQuery
- Unions avançades
- Camps niats i repetits
- Funcions definides per l'usuari (UDFs)
- Particionament i agrupament
Mòdul 5: Gestió de dades a BigQuery
- Carregar dades a BigQuery
- Exportar dades de BigQuery
- Transformació i neteja de dades
- Gestió de conjunts de dades i taules
Mòdul 6: Optimització del rendiment de BigQuery
- Tècniques d'optimització de consultes
- Comprendre els plans d'execució de consultes
- Ús de vistes materialitzades
- Optimització de l'emmagatzematge
Mòdul 7: Seguretat i compliment de BigQuery
Mòdul 8: Integració i automatització de BigQuery
- Integració amb serveis de Google Cloud
- Ús de BigQuery amb Dataflow
- Automatització de fluxos de treball amb Cloud Functions
- Programació de consultes amb Cloud Scheduler
Mòdul 9: Aprenentatge automàtic a BigQuery (BQML)
- Introducció a BigQuery ML
- Creació i entrenament de models
- Avaluació i predicció amb models
- Funcions avançades de BQML