Para a tabela precedente, de nome Agencia, assinale a opção ...
Comentários
Veja os comentários dos nossos alunos
Para ficar mais fácil de entender separei em 4 Partes e fui comentando cada uma:
PARTE 1
WITH RECURSIVE AgenciaNome (idPessoa, NomePessoa, Gerencia) AS (
-- Nessa etapa inicial é criado uma tabela temporária chamada AgenciaNome que vai rodar em loop (recursiva). Ela vai ter três colunas: o ID, o Nome e o texto da Gerência (o rastreador).
PARTE 2
SELECT idPessoa, NomePessoa,
-- Pega o ID e o Nome da pessoa.
CAST(idPessoa AS CHAR(20))
-- Transforma o ID (que é um número) em texto. Fazemos isso para conseguir colar os tracinhos (-) mais para a frente. Como a Gisele tem ID 1, essa coluna vira o texto '1''
FROM Agencia WHERE idGerencia IS NULL
-- A regra crucial. Quem não tem chefe (IS NULL) é a Gisele (ID 1).
UNION ALL
-- Cola o PARTE 2 com a PARTE 3
PARTE 3
SELECT a.idPessoa, a.NomePessoa,
-- Pega os dados do funcionário da vez na tabela original (Agencia a).
CONCAT(an.Gerencia, '-', a.idPessoa)
-- Aqui é onde o "1-2-4" é montado. A função CONCAT serve para grudar textos. Ela pega o caminho do chefe que já conhecemos (an.Gerencia) , coloca um hífen -, e gruda o número do funcionário atual (a.idPessoa).
Na primeira rodada (Bruna): Pega o caminho da Gisele ('1') + - + ID da Bruna (2) = '1-2'.
Na segunda rodada (Isabeli): Pega o caminho da Bruna ('1-2') + - + ID da Isabeli (4) = '1-2-4'.
FROM Agencia a INNER JOIN AgenciaNome an ON an.idPessoa = a.idGerencia
-- Aqui se procura os subordinados. O comando JOIN cruza a tabela original com a tabela do loop. Ele procura na tabela pessoas cujo chefe (idGerencia) seja igual a alguém que já descobrimos na rodada anterior (an.idpessoa)".
)
PARTE 4
SELECT * FROM AgenciaNome WHERE idPessoa = 4;
--O banco de dados olha para a tabela temporária completa que ele acabou de construir e mostra apenas a linha onde o idPessoa é igual a 4 (Isabeli Fontana)".
RESUMO
O banco encontra a linha da Isabeli, que ficou guardada assim após o término do loop:
- idPessoa: 4
- NomePessoa: Isabeli Fontana
- Gerência: 1-2-4 (resultado do CONCAT feito na PARTE 3).
SUGESTÃO: Na hora da prova, se possível e tiver tempo separar em partes para ficar mais fácil de compreender.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo