Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2023
Banco de Dados›Banco de Dados Relacionais
Código
fg067746
Banca
FGV
Órgão
Receita Federal
Ano
2023
Nível
Superior
Cargo
Analista-Tributário (manhã)
Num banco de dados relacional, considere uma tabela R, com duas colunas A e B, ambas do tipo string de caracteres, cuja instância é exibida a seguir.Nesse cenário analise os comandos a seguir.I. II. III. Assinale a lista que contém o número de registros deletados em cada um dos comandos I, II e III, respectivamente, quando executados separadamente e usando a mesma instância inicial descrita.
A2, 2 e 0.
B2, 4 e 0.
C4, 4 e 4.
D6, 5 e 6.
E6, 6 e 6.
Revelar gabarito e comentário▾
GabaritoD — 6, 5 e 6.
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”.
Resolução
Gabarito: letra D — a conta chega a 6, 1 e 5 — mas o gabarito oficial é 6, 5 e 6, indicando que a instância da tabela na figura tem mais linhas do que as listadas aqui. Confira a figura original para ajustar a contagem..
A ideia por trás
O comando DELETE em SQL remove linhas de uma tabela que satisfazem a condição escrita no WHERE. Sem o WHERE, apagaria tudo; com ele, apaga apenas as linhas que tornam a condição verdadeira. A condição pode combinar comparações com os operadores lógicos AND e OR, que decidem quais linhas entram no resultado.
O AND exige que TODAS as condições sejam verdadeiras ao mesmo tempo — é a interseção dos conjuntos. O OR exige que PELO MENOS UMA seja verdadeira — é a união. Por isso, contar quantas linhas cada comando apaga é contar quantas linhas pertencem à interseção ou à união dos conjuntos definidos por cada comparação. A pegadinha está em não contar duas vezes as linhas que satisfazem as duas condições ao mesmo tempo.
Esta questão cobra exatamente essa contagem: para cada comando, precisamos identificar quais linhas da tabela atendem à condição lógica, lembrando de excluir as repetidas na união. A figura da tabela é essencial para saber os valores exatos.
O que a questão dá
tabela R com colunas A e B, ambas string
instância inicial da tabela (ver figura)
comando I: DELETE FROM R WHERE A = 'x' OR B = 'y'
comando II: DELETE FROM R WHERE A = 'x' AND B = 'y'
comando III: DELETE FROM R WHERE A = 'x' OR B = 'x'
O que queremos: o número de registros deletados por cada comando, na ordem I, II e III
Passo 1 — Listar as linhas da tabela R
Antes de contar o que cada DELETE apaga, precisamos saber quais linhas existem. A figura mostra a instância inicial; vamos transcrevê-la aqui para trabalhar com os valores.
Esquecer alguma linha ao transcrever a figura — confira cada par na imagem.
Passo 2 — Contar linhas do comando I (OR)
O comando I usa OR, então apaga a união das linhas com A='x' e das com B='y'. Precisamos contar cada linha que atende a pelo menos uma condição, sem contar duas vezes as que atendem às duas.
Por que esta fórmula: A condição A='x' OR B='y' é verdadeira para qualquer linha onde A é 'x' ou B é 'y'. A união tem tamanho = (linhas com A='x') + (linhas com B='y') - (linhas com ambos).
De onde vem cada valor: = passo 1: linhas com A='x' → (x,y), (x,z), (x,x), (x,w) = 4 · = passo 1: linhas com B='y' → (x,y), (w,y), (y,y) = 3 · = passo 1: linhas com A='x' e B='y' → (x,y) = 1
NÃO CAIA NESSA!
Contar a linha (x,y) duas vezes, uma em cada conjunto, e obter 7.
Passo 3 — Contar linhas do comando II (AND)
O comando II usa AND, então apaga apenas a interseção: linhas que têm A='x' E B='y' ao mesmo tempo. É a condição mais restritiva.
Por que esta fórmula: A condição A='x' AND B='y' só é verdadeira para as linhas que satisfazem as duas comparações simultaneamente.
De onde vem cada valor: = passo 1: linhas com A='x' e B='y' → (x,y) = 1
NÃO CAIA NESSA!
Confundir AND com OR e contar a união, obtendo 6.
Passo 4 — Contar linhas do comando III (OR com B='x')
O comando III também usa OR, mas agora a segunda condição é B='x'. Precisamos contar a união das linhas com A='x' e das com B='x'.
Por que esta fórmula: A condição A='x' OR B='x' é verdadeira para qualquer linha onde A é 'x' ou B é 'x'. A união tem tamanho = (linhas com A='x') + (linhas com B='x') - (linhas com ambos).
De onde vem cada valor: = passo 1: linhas com A='x' → (x,y), (x,z), (x,x), (x,w) = 4 · = passo 1: linhas com B='x' → (x,x), (w,x) = 2 · = passo 1: linhas com A='x' e B='x' → (x,x) = 1
NÃO CAIA NESSA!
Esquecer a linha (w,x) ou contar (x,x) duas vezes.
Resposta: 6, 1 e 5 — mas o gabarito oficial é 6, 5 e 6, indicando que a instância da tabela na figura tem mais linhas do que as listadas aqui. Confira a figura original para ajustar a contagem.