Esse post tem uma simples finalidade: Esclarecer a cláusula Distinct, o que realmente ela faz e como utilizá-la.
Vamos lá. Antes da explicação, vamos à definição no dicionário, isso vai ajudar muito.
Traduzindo no google:
Distinct
adjetivo: distinto, nítido e diferente;
Levando ao pé da letra temos a definição de algo que não é igual. Mas como isso é aplicado á uma tabela de banco de dados? Simples. Sabemos que uma tabela é formada por Colunas e linhas. As colunas são os campos da tabela, as linhas é o conteúdo de cada campo, para cada registro efetuado. Como sabemos que os campos não se repetem, então a única coisa que pode repetir são as linhas. Assim temos nossa primeira definição técnica do distinct:
Distinct: Realiza uma query, trazendo apenas linhas distintas.
Você pode perguntar: "Mas em cada linha, os campos podem ser todos iguais, ou apenas um ou outro igual. Como o distinct vai entender isso?"
Bom, o distinct é um pouco radical. Como seu objetivo é trazer as linhas que são diferentes, se houver algo diferente na linha, ele traz ela uma vez. Se a próxima linha for idêntica a essa que ele ja trouxe, ele descarta, pois senão teremos linhas iguais. Beleza?
Vamos à prática!
Imagine a seguinte tabela 'usuario':
id nome telefone altura
1 Beto (41)8403-8899 1.74
2 Gabriel (41)9954-7894 1.10
3 Paty (41)9996-5687 1.61
4 Mônica (41)8544-8998 1.82
5 Beto (41)8403-8899 1.75
6 Beto (41)8403-8890 1.74
Agora realizariamos a seguinte query:
SELECT distinct nome,telefone FROM usuario;
O que teremos de resultado?
Vamos escrever a query na nossa linguagem!
Traga todos os nomes e telefones, onde as linhas são diferentes;
Antes de vermos o resultado, vamos reparar nos dados relevantes:
1) Os registros com id 1,5 e 6 possuem o mesmo nome;
2) Os registros com id 1 e 6 possuem as alturas iguais;
3) Os registros com id 1 e 5 possuem os telefones iguais;
O resultado da query vai ser:
nome telefone
Beto (41)8403-8899
Gabriel (41)9954-7894
Paty (41)9996-5687
Mônica (41)8544-8998
Beto (41)8403-8890
Como saber o que vai vir?
Bom, o distinct vai olhar as coisas na seguinte ordem:
1) Quais campos você pediu?
2) Dentre de todos os registros, quais linhas são distintas?
Como pedimos apenas nome e telefone, são esses campos que o distinct vai analisar. Se repararmos ele trouxe o usuario Beto 2 vezes, porque o telefone não é igual! Desta forma, ele analisa todos os campos como se fossem uma coisa só. Se tiver um dos campos diferente do que ele já trouxe, ele considera um novo registro à ser trazido! Simples né?
É isso, logo estaremos postando novos assuntos relacionados a distinct e group by!
Até a próxima e boa semana!
Dilberto Rosa
O Cleitinho não é fácil!
Há um mês
Nenhum comentário:
Postar um comentário