← Questões de Banco de Dados

Banco de Dados · FGV · 2022

Questão comentada de Banco de Dados

Analise o comando a seguir. SELECT * FROM T1 FULL OUTER JOIN T2 ON T1.A=T2.A Sabe-se que a coluna A foi definida como chave primária tanto em T1 como em T2, e que T1 e T2 contêm, respectivamente, 20 e 30 linhas. Assinale a opção que apresenta a estimativa do número de linhas produzidas pela execução do comando acima.

Gabarito: E

No FULL OUTER JOIN, voce traz para o resultado tanto os registros que casam quanto os que nao casam, dos dois lados. Como a coluna A e chave primaria em T1 e em T2, cada valor de A aparece no maximo uma vez em cada tabela, entao nao existe multiplicacao de linhas por repeticao do mesmo valor. Isso e importante: aqui nao e um "1 para muitos", e sim um encontro de conjuntos com chaves unicas. Pense assim: T1 tem 20 linhas e T2 tem 30 linhas. Se alguns valores de A aparecem nas duas tabelas, essas linhas viram uma so no resultado. Se nao aparecem, cada linha fica preservada com NULL do outro lado. Logo, o total fica entre 30 e 50: o minimo ocorre se todas as 20 linhas de T1 tiverem correspondente em T2, e o maximo ocorre se nao houver nenhuma coincidencia. A conta intuitiva e: total = 20 + 30 - coincidencias. Como as coincidencias podem variar de 0 ate 20, o resultado varia de 50 ate 30. Por isso a unica opcao possivel e "entre 30 e 50". Na pratica, a banca explora a diferenca entre JOIN comum e FULL OUTER JOIN. O primeiro pode reduzir ou manter o numero de linhas conforme a cardinalidade; o segundo preserva tudo dos dois lados e so elimina duplicidade quando ha chave igual dos dois lados.

Continue treinando

Questões relacionadas