Subconsultas e Common Table Expressions

Introdução ao Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

Subconsulta

  • Consultas aninhadas
  • Usadas nas cláusulas FROM, WHERE, HAVING ou SELECT
  • Exemplo:
    SELECT column1 
    FROM table1 
    WHERE column1 = (SELECT column2 FROM table2 WHERE condition)
    
  • Tipos: subconsultas correlatas e não correlatas
Introdução ao Snowflake SQL

Subconsulta não correlata

-- A consulta principal retorna pizzas com o maior preço encontrado na subconsulta
SELECT pizza_id
FROM pizzas
-- Subconsulta não correlata que identifica o maior preço de pizza
WHERE price = (
    SELECT MAX(price)
    FROM pizzas
)
  • A subconsulta não interage com a consulta principal
Introdução ao Snowflake SQL

Subconsulta correlata

  • A subconsulta referencia colunas da consulta principal
SELECT pt.name, 
       pz.price, 
       pt.category
FROM pizzas AS pz
JOIN pizza_type AS pt 
    ON pz.pizza_type_id = pt.pizza_type_id
WHERE pz.price = (
  -- Identifica o preço máximo para cada categoria de pizza
    SELECT MAX(p2.price) -- Preço máximo
    FROM pizzas AS p2
    WHERE -- Correlata: usa coluna da consulta externa 
      p2.pizza_type_id = pz.pizza_type_id
)
Introdução ao Snowflake SQL

Common Table Expressions

Sintaxe geral:

-- Palavra-chave WITH
WITH cte1 AS ( -- Nome da CTE
        SELECT col_1, col_2
            FROM table1
    )
    ...
SELECT ... 
FROM cte1 -- Consultar a CTE
;
Introdução ao Snowflake SQL

Common Table Expressions

WITH max_price AS ( -- CTE chamada max_price
    SELECT pizza_type_id, 
           MAX(price) AS max_price
    FROM pizzas
    GROUP BY pizza_type_id
)

-- Consulta principal SELECT pt.name, pz.price, pt.category FROM pizzas AS pz JOIN pizza_type AS pt ON pz.pizza_type_id = pt.pizza_type_id JOIN max_price AS mp -- Juntando com a CTE max_price ON pt.pizza_type_id = mp.pizza_type_id WHERE pz.price < mp.max_price -- Compara o preço com a coluna max_price da CTE
Introdução ao Snowflake SQL

Múltiplas CTEs

-- Defina várias CTEs separadas por vírgulas
WITH cte1 AS (
    SELECT ...
    FROM ...
),

cte2 AS ( SELECT ... FROM ... )
-- Consulta principal combinando ambas as CTEs SELECT ... FROM cte1 JOIN cte2 ON ... WHERE ...
Introdução ao Snowflake SQL

Por que usar CTEs?

  • Lidar com operações complexas
  • Modular
  • Legível
  • Reutilizável
Introdução ao Snowflake SQL

Vamos praticar!

Introdução ao Snowflake SQL

Preparing Video For Download...