Pular para o conteúdo principal

Questão de Banco de Dados — PostgreSQL — FUNDATEC 2023

Banco de DadosPostgreSQL
Código
qa541647
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2023
Cargo
ANC ( )

Considerando o sistema de banco de dados relacional PostgreSQL versão 14, em um banco de dados, existem duas tabelas, A e B, com alguns valores populados, conforme abaixo:

 

Tabela A

Coluna a

1
2
3
 

Tabela B

Coluna b

11
12
13
   

Considere o resultado das duas seguintes queries em SQL:

 

I. SELECT x FROM X UNION (SELECT y FROM Y LIMIT 1)

 

II. SELECT x FROM X UNION SELECT y FROM Y LIMIT 1;

 

Assinale a alternativa que representa o número de linhas resultantes das queries I e II, respectivamente.

  1. A1 – 1.
  2. B6 – 1.
  3. C6 – 6.
  4. D4 – 4.
  5. E4 – 1.
Revelar gabarito e comentário

GabaritoE — 4 – 1.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

UNION e LIMIT no PostgreSQL: a precedência que muda o resultado

Gabarito: letra E (4 – 1). A diferença entre as duas queries está na precedência do operador LIMIT em relação ao UNION: na query I, o LIMIT 1 está dentro dos parênteses, limitando apenas a subconsulta SELECT y FROM Y LIMIT 1; na query II, o LIMIT 1 está fora, aplicando-se ao resultado final do UNION. Como o UNION elimina duplicatas, a query I retorna 4 linhas (3 de A + 1 de B) e a query II retorna apenas 1 linha (a primeira do conjunto unido).

O operador UNION combina os resultados de duas ou mais consultas, eliminando linhas duplicadas. No PostgreSQL, a sintaxe é SELECT ... UNION SELECT ..., e o LIMIT é uma cláusula que restringe o número de linhas retornadas. A pegadinha clássica desta questão é a precedência: quando o LIMIT aparece após o UNION sem parênteses, ele se aplica ao resultado final da união, não à última consulta. Já quando está entre parênteses, ele limita apenas a consulta interna.

Vamos analisar cada query com os dados fornecidos:

  • Tabela A (coluna a): 1, 2, 3

  • Tabela B (coluna b): 11, 12, 13

Query I: SELECT x FROM X UNION (SELECT y FROM Y LIMIT 1)

Aqui, o LIMIT 1 está dentro dos parênteses, então ele limita a subconsulta SELECT y FROM Y LIMIT 1, que retorna apenas 1 linha (por exemplo, 11). O UNION combina as 3 linhas de X com essa 1 linha de Y, resultando em 4 linhas (1, 2, 3, 11). Como não há duplicatas entre os conjuntos, o resultado tem 4 linhas.

Query II: SELECT x FROM X UNION SELECT y FROM Y LIMIT 1

Aqui, o LIMIT 1 está fora do UNION, aplicando-se ao resultado final da união. O UNION primeiro combina as 3 linhas de X com as 3 linhas de Y, resultando em 6 linhas (1, 2, 3, 11, 12, 13). Depois, o LIMIT 1 restringe o resultado a apenas 1 linha (a primeira, que pode ser 1). Portanto, o resultado tem 1 linha.

A pegadinha está em não perceber que o LIMIT sem parênteses se aplica ao resultado final do UNION, não à última consulta. Muitos candidatos interpretam que o LIMIT 1 limita apenas a segunda consulta, resultando em 4 linhas para ambas as queries, mas isso está incorreto.

Alternativa A — ❌ Incorreta

Afirma que ambas as queries retornam 1 linha. Isso está errado porque a query I retorna 4 linhas, já que o LIMIT 1 dentro dos parênteses limita apenas a subconsulta, e o UNION combina as 3 linhas de A com 1 linha de B. A query II retorna 1 linha, mas a query I não.

Alternativa B — ❌ Incorreta

Afirma que a query I retorna 6 linhas e a query II retorna 1 linha. Isso está errado porque a query I retorna 4 linhas, não 6. O LIMIT 1 dentro dos parênteses reduz a subconsulta a 1 linha, então o UNION combina 3 + 1 = 4 linhas. A query II realmente retorna 1 linha, mas a query I não retorna 6.

Alternativa C — ❌ Incorreta

Afirma que ambas as queries retornam 6 linhas. Isso está errado porque a query I retorna 4 linhas, não 6. O LIMIT 1 dentro dos parênteses limita a subconsulta a 1 linha, então o UNION combina 3 + 1 = 4 linhas. A query II retorna 1 linha, não 6.

Alternativa D — ❌ Incorreta

Afirma que ambas as queries retornam 4 linhas. Isso está errado porque a query II retorna 1 linha, não 4. O LIMIT 1 fora do UNION limita o resultado final a 1 linha. A query I retorna 4 linhas, mas a query II não.

Alternativa E — ✅ Correta ⟵ GABARITO

Afirma que a query I retorna 4 linhas e a query II retorna 1 linha. Isso está correto. Na query I, o LIMIT 1 dentro dos parênteses limita a subconsulta a 1 linha, e o UNION combina as 3 linhas de A com 1 linha de B, resultando em 4 linhas. Na query II, o LIMIT 1 fora do UNION limita o resultado final a 1 linha. Portanto, a alternativa E é a correta.

NÃO CAIA NESSA!

A banca explora a precedência do LIMIT em relação ao UNION. Muitos candidatos assumem que o LIMIT 1 sempre limita a última consulta, mas sem parênteses ele se aplica ao resultado final. Fique atento: parênteses mudam o escopo do LIMIT.

PEGA ESSA DICA!

Para resolver questões assim, identifique onde o LIMIT está: se estiver dentro de parênteses, limita a subconsulta; se estiver fora, limita o resultado final. Desenhe o fluxo: primeiro o UNION, depois o LIMIT.

Gabarito: letra E

Link permanente: /questoes/qa541647