Expresii de tip Common Table Expression

Manipularea datelor în SQL

Mona Khalil

Data Scientist, Greenhouse Software

Când adăugați subinterogări...

  • Complexitatea interogărilor crește rapid!
    • Informațiile devin dificil de urmărit

Soluție: Common Table Expressions!

Manipularea datelor în SQL

Common Table Expressions

Common Table Expressions (CTE-uri)

  • Tabel declarat înaintea interogării principale
  • Denumit și referențiat ulterior în instrucțiunea FROM

Configurarea CTE-urilor

WITH cte AS (
    SELECT col1, col2
    FROM table)

SELECT AVG(col1) AS avg_col FROM cte;
Manipularea datelor în SQL

Utilizați o subinterogare în 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       |
Manipularea datelor în SQL

Plasați-o la început

(
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
Manipularea datelor în SQL

Plasați-o la început

WITH s AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
Manipularea datelor în SQL

Afișați CTE-ul

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       |
Manipularea datelor în SQL

Afișați toate CTE-urile

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;
Manipularea datelor în SQL

De ce să folosiți CTE-uri?

  • Executat o singură dată

    • CTE-ul este stocat în memorie
    • Îmbunătățește performanța interogării
  • Organizare mai bună a interogărilor

  • Referențierea altor CTE-uri

  • Referențierea propriului CTE (SELF JOIN)
Manipularea datelor în SQL

Vamos praticar!

Manipularea datelor în SQL

Preparing Video For Download...