Expresiones de tabla comunes

Manipulación de datos en SQL

Mona Khalil

Data Scientist, Greenhouse Software

Al añadir subconsultas...

  • ¡La complejidad de las consultas aumenta rápidamente!
    • Puede resultar difícil llevar un control de la información

Solución: ¡Expresiones de tabla comunes!

Manipulación de datos en SQL

Expresiones de tabla comunes

Expresiones de tabla comunes (CTE)

  • Tabla declarada antes de la consulta principal
  • Mencionado y citado más adelante en la sentencia FROM

Configuración de CTE

WITH cte AS (
    SELECT col1, col2
    FROM table)

SELECT AVG(col1) AS avg_col FROM cte;
Manipulación de datos en SQL

Toma una subconsulta en FROM

SELECT
  c.name AS country,
  COUNT(s.id) AS matches
FROM country AS c
INNER JOIN (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10) AS s
ON c.id = s.country_id
GROUP BY country;
| country     | matches |
|-------------|---------|
| England     | 3       |
| Germany     | 1       |
| Netherlands | 1       |
| Spain       | 4       |
Manipulación de datos en SQL

Colócalo al principio

(
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
Manipulación de datos en SQL

Colócalo al principio

WITH s AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
Manipulación de datos en SQL

Enséñame la CTE

WITH s AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
SELECT
  c.name AS country,
  COUNT(s.id) AS matches
FROM country AS c
INNER JOIN s
ON c.id = s.country_id
GROUP BY country;
| country     | matches |
|-------------|---------|
| England     | 3       |
| Germany     | 1       |
| Netherlands | 1       |
| Spain       | 4       |
Manipulación de datos en SQL

Enséñame todas las CTE

WITH s1 AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10),
s2 AS (                              -- New subquery
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) <= 1
)
SELECT
  c.name AS country,
  COUNT(s1.id) AS high_scores,
  COUNT(s2.id) AS low_scores         -- New column
FROM country AS c
INNER JOIN s1
ON c.id = s1.country_id
INNER JOIN s2                        -- New join
ON c.id = s2.country_id
GROUP BY country;
Manipulación de datos en SQL

¿Por qué utilizar las CTE?

  • Ejecutado una vez

    • A continuación, la CTE se almacena en memoria
    • Mejora el rendimiento de las consultas
  • Mejorar la organización de las consultas

  • Referencia a otras CTE

  • Autorreferencia (SELF JOIN)
Manipulación de datos en SQL

¡Vamos a practicar!

Manipulación de datos en SQL

Preparing Video For Download...