Espressioni di Tabella Comuni

Manipolazione dei dati in SQL

Mona Khalil

Data Scientist, Greenhouse Software

Quando si aggiungono sottoquery...

  • La complessità delle query aumenta rapidamente!
    • Difficile tenere traccia delle informazioni

Soluzione: Espressioni di Tabella Comuni!

Manipolazione dei dati in SQL

Espressioni di Tabella Comuni

Espressioni di Tabella Comuni (CTE)

  • Tabella dichiarata prima della query principale
  • Nominata e riferita successivamente nel FROM

Impostare le CTE

WITH cte AS (
    SELECT col1, col2
    FROM table)

SELECT AVG(col1) AS avg_col FROM cte;
Manipolazione dei dati in SQL

Prendi una sottoquery in 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       |
Manipolazione dei dati in SQL

Mettilo all'inizio

(
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
Manipolazione dei dati in SQL

Mettilo all'inizio

WITH s AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
Manipolazione dei dati in SQL

Mostrami 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       |
Manipolazione dei dati in SQL

Mostrami tutte le CTE

WITH s1 AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10),
s2 AS (                              -- Nuova sottoquery
  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         -- Nuova colonna
FROM country AS c
INNER JOIN s1
ON c.id = s1.country_id
INNER JOIN s2                        -- Nuova join
ON c.id = s2.country_id
GROUP BY country;
Manipolazione dei dati in SQL

Perché usare le CTE?

  • Eseguito una volta

    • CTE poi memorizzata
    • Migliora le prestazioni
  • Migliora l'organizzazione delle query

  • Riferimento ad altre CTE

  • Riferimento a se stessa (SELF JOIN)
Manipolazione dei dati in SQL

Ayo berlatih!

Manipolazione dei dati in SQL

Preparing Video For Download...