Para a tabela precedente, de nome Agencia, assinale a opção ...

Próximas questões
Com base no mesmo assunto
Q3990586 Banco de Dados
Para a tabela precedente, de nome Agencia, assinale a opção que apresenta o resultado do código SQL, ao ser executado.  
Imagem associada para resolução da questão
Alternativas

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