Teremos como retomo da consulta SQL:
9. Considere a tabela W abaixo, seus campos VALOR e DADO, e a consulta em linguagem SQL:
Comentários
Veja os comentários dos nossos alunos
O left join seleciona todos registros da tabela a esquerda do left join,(nesse caso W), independente do que ta dentro do ON. A parte dentro do ON, que é W.VALOR=Z.DADO, faz uma busca. Tipo a primeira coluna temos 1 e na segunda coluna não temos 1, então o resultado da junção fica W.VALOR = 1 e Z.DADO = null.
Se seguir essa lógica para todos elementos, após o join teremos:
Tabela WjoinZ
W.VALORZ.DADO
1null
2null
55
44
Dessa forma o select max(W.VALOR) seleciona o 2 que é o maior numero sem correspondente na outra coluna.
Diego Jacometti em 2 setembro 2016 at 21:23 - ITnerante
Veja também a resolução da questão : https://youtu.be/WKeX_vK93D4
então pq a resposta é 5?
Questão que pode parecer estranha devido a tabela W fazer um LEFT JOIN consigo mesma e atribuir o alias de Z, mas vamos lá:
SELECT MAX(W.VALOR)
FROM W LEFT JOIN W AS Z
ON (W.VALOR = Z.DADO)
WHERE Z.DADO IS NULL;
LEFT JOIN retorna todas as linhas da tabela esquerda com linhas correspondentes da direita. Se não houver linha correspondente, NULL é retornado no valor da segunda tabela.
Cada linha de W será combinada com a tabela Z, onde W.VALOR está sendo comparado com Z.DADO, retornando apenas aqueles que Z.DADO for nulo e obtendo o maior valor dentre os registros.
Devemos identificar quais valores de W.VALOR não aparecem em Z.DADO
Os valores da coluna VALOR são: 1, 2, 5, 4;
Os valores da coluna DADO são: 3, 4, 6, 5.
1 => Não está em DADO
2 => Não está em DADO
5 => Está em DADO
4 => Está em DADO
Portanto, os valores 1 e 2 não possuem correspondência em DADO, e serão mantidos na consulta com Z.DADO IS NULL.
A consulta retorna o maior valor entre os que não possuem correspondência, ou seja, o MAX(1,2) = 2.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo