Analise o script a seguir, no âmbito do PostgreSQL.CREATE TA...
CREATE TABLE T ( chave serial NOT NULL PRIMARY KEY, dados json NOT NULL ); INSERT INTO T (dados) VALUES ('{ "nome": "Maria", "notas": {"disciplina":"Fisica","nota": 10}}'), ('{ "nome": "Pedro", "notas": {"disciplina":"Calculo","nota": 9}}');
O comando SQL que produz corretamente uma lista dos alunos, com a matrícula, nome e respectivas disciplinas e notas é:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A resposta correta é a alternativa C. Vamos entender o porquê:
O tema da questão envolve a manipulação de dados no formato JSON em um banco de dados PostgreSQL. O PostgreSQL oferece suporte a dados JSON, permitindo armazenar, consultar e manipular esse tipo de dado com flexibilidade. Para resolver essa questão, é necessário compreender os operadores de manipulação de JSON do PostgreSQL.
Na alternativa C, são utilizados os operadores ->
e ->>
para acessar os elementos dentro do dado JSON armazenado na coluna dados
. O operador ->
é usado para extrair um elemento JSON em um formato que ainda permite a extração de elementos aninhados, enquanto o operador ->>
é usado para extrair o elemento como texto.
Vamos analisar o comando correto passo a passo:
chave matricula
: Seleciona a colunachave
e a renomeia comomatricula
. A colunachave
é do tipo serial e serve como identificador único (chave primária) para os registros da tabela.dados -> 'nome' AS aluno
: Utiliza o operador->
para acessar o campo'nome'
dentro do JSON e o renomeia comoaluno
. Isso retorna o nome do aluno dentro do objeto JSON.dados -> 'notas' ->> 'disciplina' disc
: Acessa o objeto aninhado'notas'
e, dentro dele, extrai o valor associado à chave'disciplina'
como texto, renomeando-o paradisc
.dados -> 'notas' ->> 'nota' grau
: Semelhante ao anterior, extrai o valor da chave'nota'
dentro do objeto'notas'
e o renomeia comograu
.
O comando completo, portanto, produz uma lista dos alunos com suas respectivas matrículas, nomes, disciplinas e notas, acessando corretamente as informações no formato JSON armazenadas na tabela T
.
As demais alternativas falham em acessar corretamente os dados JSON devido ao uso inadequado dos operadores ou por não se referirem corretamente aos elementos do JSON.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
-> int Obter elemento do array JSON '[1,2,3]' :: json-> 2
-> texto Obter campo de objeto JSON '{"a": 1, "b": 2}' :: json -> 'b'
- >> int Obtém o elemento do array JSON como texto '[1,2,3]' :: json - >> 2
- >> texto Obter o campo do objeto JSON como texto '{"a": 1, "b": 2}' :: json - >> 'b'
#> array de texto Objeto JSON no caminho especificado '{"a": [1,2,3], "b": [4,5,6]}' :: json #> '{a, 2}'
# >> array de texto Obter objeto JSON no caminho especificado como texto '{"a": [1,2,3], "b": [4,5,6]}' :: json # >> '{a 2}
Quem não tem acesso: - -> C
The short arrow -> keeps the type as JSON, and the long arrow ->> returns text.
Source: https://popsql.com/learn-sql/postgresql/how-to-query-a-json-column-in-postgresql
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo