# Lista de Revisão para Prova de SQL
Dois contextos fictícios com tabelas ricas e questões variadas para praticar JOINS, agregações, HAVING, WINDOW FUNCTIONS e CTEs.
## Informações:
Use a imagem: leogloriainfnet/revisao_prova_sql
O Arquivo de DDL q foi usado para criar é:
```sql=
SET search_path TO cartografia, public;
-- Tabela de territórios mapeados (ilhas, desertos, fendas, etc.)
CREATE TABLE cartografia.territorios (
id SERIAL PRIMARY KEY,
nome VARCHAR(150) NOT NULL UNIQUE,
tipo VARCHAR(50) NOT NULL, -- ex: 'ilhas', 'planície'
risco_nivel INTEGER NOT NULL
CHECK (risco_nivel BETWEEN 0 AND 5)
);
-- Tabela de cartógrafos da guilda
CREATE TABLE cartografia.cartografos (
id SERIAL PRIMARY KEY,
nome VARCHAR(150) NOT NULL,
senioridade VARCHAR(20) NOT NULL
CHECK (senioridade IN ('junior', 'pleno', 'senior'))
);
-- Versões diárias (ou eventuais) da posição dos territórios
CREATE TABLE cartografia.versoes_territorio (
id BIGSERIAL PRIMARY KEY,
territorio_id INTEGER NOT NULL REFERENCES cartografia.territorios (id),
data_ref DATE NOT NULL,
pos_x NUMERIC(10,3) NOT NULL,
pos_y NUMERIC(10,3) NOT NULL,
nivel_instabilidade INTEGER NOT NULL
CHECK (nivel_instabilidade BETWEEN 0 AND 10),
cartografo_id INTEGER NOT NULL REFERENCES cartografia.cartografos (id),
CONSTRAINT chk_instabilidade_territorio
CHECK (
nivel_instabilidade <= 5
OR territorio_id IS NOT NULL
)
);
CREATE TABLE cartografia.visitas_territorio (
id BIGSERIAL PRIMARY KEY,
territorio_id INTEGER NOT NULL REFERENCES cartografia.territorios (id),
data_visita DATE NOT NULL,
visitantes INTEGER NOT NULL
CHECK (visitantes >= 0)
);
----------------------------------------------------------------------
-- SCHEMA 2: ARQUIVO SONORO DOS ANIMAIS QUE NUNCA EXISTIRAM
----------------------------------------------------------------------
CREATE SCHEMA IF NOT EXISTS arquivo_sonoro;
SET search_path TO arquivo_sonoro, public;
-- Tabela de criaturas míticas/gravadas
CREATE TABLE arquivo_sonoro.criaturas (
id SERIAL PRIMARY KEY,
nome VARCHAR(150) NOT NULL UNIQUE,
classe VARCHAR(50) NOT NULL, -- ex: 'etéreo', 'elemental'
nivel_ameaca INTEGER NOT NULL
CHECK (nivel_ameaca BETWEEN 1 AND 5)
);
-- Tabela de habitats impossíveis
CREATE TABLE arquivo_sonoro.habitats (
id SERIAL PRIMARY KEY,
nome VARCHAR(150) NOT NULL UNIQUE,
tipo VARCHAR(50) NOT NULL, -- ex: 'abissal', 'aéreo'
dimensao VARCHAR(50) NOT NULL -- ex: 'profundo', 'anfíbio'
);
-- Tabela de gravações de áudio das criaturas
CREATE TABLE arquivo_sonoro.gravacoes (
id BIGSERIAL PRIMARY KEY,
criatura_id INTEGER NOT NULL REFERENCES arquivo_sonoro.criaturas (id),
habitat_id INTEGER NOT NULL REFERENCES arquivo_sonoro.habitats (id),
data_gravacao TIMESTAMP NOT NULL,
frequencia_hz NUMERIC(10,2) NOT NULL
CHECK (frequencia_hz > 0),
intensidade_db NUMERIC(5,2) NOT NULL, -- pode passar de 100 dB
pesquisador VARCHAR(150) NOT NULL
);
```
## Contexto 1 – Guilda dos Cartógrafos Improváveis
Schema: cartografia
A Guilda registra territórios instáveis, versões de suas posições ao longo do tempo e o fluxo de visitantes que passam por esses lugares improváveis.
### Tabelas
### cartografia.territorios
id – identificador
nome – nome do território
tipo – tipo (ilha, arquipélago, atol…)
risco_nivel – risco de 0 a 5
### cartografia.cartografos
id – identificador
nome – nome do cartógrafo
senioridade – junior, pleno ou senior
### cartografia.versoes_territorio
id
territorio_id (FK)
data_ref
pos_x, pos_y
nivel_instabilidade (0 a 10)
cartografo_id (FK)
### cartografia.visitas_territorio
id
territorio_id (FK)
data_visita
visitantes
---
# Questões – Contexto 1 (Cartografia)
1. Liste todos os territórios com o total de visitantes recebidos, ordenando do maior para o menor.
2. Liste, para cada tipo de território (tipo), o total de visitantes somando todos os territórios daquele tipo.
3. Para a Ilha Farol Errante, liste os 3 dias com maior número de visitantes.
4. Para cada território, calcule a média de visitantes por visita e mostre apenas aqueles com média superior a 80 visitantes.
5. Liste os territórios que nunca aparecem na tabela visitas_territorio.
6. Para cada nível de risco (risco_nivel), some o total de visitantes de todos os territórios daquele nível.
7. Mostre o nome do cartógrafo e a quantidade de registros em versoes_territorio que ele produziu.
8. Para cada cartógrafo, calcule a média de nivel_instabilidade de todas as versões que ele registrou.
9. Encontre os cartógrafos que nunca mapearam territórios com risco_nivel < 3.
10. Usando window functions, numere todas as versões de cada território em ordem cronológica (versao_n).
11. Para cada linha de versoes_territorio, calcule o deslocamento em relação à versão anterior do mesmo território utilizando distância euclidiana.
12. Descubra qual território apresenta o maior deslocamento total somando todos os deslocamentos entre versões consecutivas.
13. Para cada território, liste sua última posição registrada com base em data_ref e id.
14. Classifique cada dia registrado em visitas_territorio como CHEIO, NORMAL ou VAZIO de acordo com o total diário de visitantes.
15. Liste as 5 maiores combinações (territorio, data_visita) pelo total de visitantes.
---
## Contexto 2 – Arquivo Sonoro dos Animais que Nunca Existiram
Schema: arquivo_sonoro
Trata-se de um laboratório que registra gravações de criaturas impossíveis, encontradas em habitats igualmente improváveis.
### Tabelas
### arquivo_sonoro.criaturas
id
nome
classe
nivel_ameaca (1–5)
### arquivo_sonoro.habitats
id
nome
tipo
dimensao
### arquivo_sonoro.gravacoes
id
criatura_id (FK)
habitat_id (FK)
data_gravacao
frequencia_hz
intensidade_db
pesquisador
---
# Questões – Contexto 2 (Arquivo Sonoro)
1. Liste todas as criaturas com o total de gravações associadas, ordenando da mais gravada para a menos gravada.
2. Liste todos os habitats com o total de gravações feitas neles.
3. Para cada criatura, calcule a média de intensidade_db.
4. Liste as criaturas que não possuem nenhuma gravação registrada em gravacoes.
5. Liste os habitats cuja média de frequencia_hz é superior a 10.000 Hz.
6. Liste cada pesquisador e o total de gravações que ele realizou.
7. Para cada pesquisador, liste quantas criaturas diferentes ele já gravou.
8. Para cada criatura, liste a frequência mínima, máxima e média.
9. Liste as 5 gravações com maior intensidade (intensidade_db) mostrando criatura, habitat, pesquisador e data.
10. Numere as gravações de cada criatura em ordem de intensidade decrescente utilizando window functions (rank_intensidade).
11. Calcule a média móvel de 3 gravações para intensidade_db de cada criatura utilizando window functions.
12. Liste todas as gravações feitas no habitat Abismo de Eco Contínuo para criaturas de nivel_ameaca = 5.
13. Liste, para cada combinação de classe da criatura e tipo do habitat, a quantidade total de gravações.
14. Para cada criatura, liste a data da primeira e da última gravação.
15. Para cada habitat, calcule a proporção de gravações da criatura Serafim de Ruído Branco em relação ao total do habitat.