A consulta SQL DISTINCT é usada para buscar valores exclusivos das tabelas usando a instrução SELECT no SQL.
Pode ocorrer uma situação quando você deseja buscar os valores exclusivos das tabelas, mas valores duplicados também estão presentes dentro da tabela. Nesse caso, você deve usar a consulta SELECT DISTINCT para eliminar valores duplicados e buscar valores exclusivos da tabela.
Sintaxe da instrução SELECT DISTINCT:
SELECT DISTINCT columnname1, columnname2 FROM table_name;
Considere as tabelas de funcionários existentes que possuem os seguintes registros:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA | ORACLE | 1 |
1003 | NIQUIL | VANI | 50500 | JAIPUR | FMW | 2 |
2001 | PRAQUI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | TESTE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | QUERER | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTE | 4 |
4002 | ASHWINI | BOLSA | 54500 | NOIDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60.000 | DÉLHI | ORACLE | 1 |
5001 | ARQUIVO | SHARMA | 55500 | DÉLHI | TESTE | 4 |
Vamos entender o SELECT DISTINCT com a ajuda de um exemplo.
Exemplo 1: Escreva uma consulta para buscar detalhes do funcionário cujo salário do funcionário seja maior que 55.000 sem usar a palavra-chave DISTINCT.
SELECT * FROM EMPLOYEES WHERE SALARY > 55000;
Na declaração acima, buscamos os detalhes do funcionário da tabela do funcionário cujo salário do funcionário é maior que 55.000, incluindo os valores duplicados.
A saída para a seguinte instrução:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE |
1001 | VAIBHAVI | MISHRA | 65.000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA | ORACLE | 1 |
2001 | PRAQUI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTE | 4 |
4003 | RUCHIKA | AGARWAL | 60.000 | DÉLHI | ORACLE | 1 |
5001 | ARQUIVO | SHARMA | 55500 | DÉLHI | TESTE | 4 |
O resultado acima mostra que buscamos os detalhes dos funcionários, incluindo valores duplicados.
Exemplo 2: Escreva uma consulta para exibir o salário do funcionário da tabela de funcionários cujo salário do funcionário seja maior que 55.000 usando a palavra-chave DISTINCT.
SELECT DISTINCT (SALARY) FROM EMPLOYEES WHERE SALARY > 55000;
Na declaração acima, estamos recuperando o salário do funcionário da tabela do funcionário cujo salário é maior que 55000, onde estamos eliminando os valores duplicados. O salário distinto exibirá o salário exclusivo da tabela do funcionário.
A saída para a seguinte instrução:
SALÁRIO |
65.000 |
60.000 |
55500 |
65500 |
58500 |
60500 |
No primeiro exemplo, buscamos os detalhes do funcionário cujo salário é maior que 55.000. O resultado da consulta inclui valores duplicados. Mas no segundo exemplo, executamos a mesma consulta para exibir o salário do funcionário cujo salário é maior que 55.000. A consulta exibe o resultado eliminando os valores duplicados porque usamos a palavra-chave DISTINCT seguida da coluna salário.
Exemplo 3: Escreva uma consulta para exibir a cidade e o salário do funcionário da tabela de funcionários sem usar uma palavra-chave distinta.
SELECT SALARY, CITY FROM EMPLOYEES;
Exibimos o salário do funcionário e o nome da cidade da tabela do funcionário na instrução acima, incluindo valores duplicados.
A saída para a seguinte instrução:
SALÁRIO | CIDADE |
65500 | PUNE |
60.000 | NOIDA |
50500 | JAIPUR |
55500 | CHANDIGARH |
65500 | PUNE |
50.000 | MUMBAI |
55500 | PUNE |
50500 | JAIPUR |
58500 | MUMBAI |
60500 | MUMBAI |
54500 | NOIDA |
60.000 | DÉLHI |
55500 | DÉLHI |
Exemplo 4: Escreva uma consulta para exibir a cidade e o salário do funcionário da tabela de funcionários usando palavras-chave distintas.
SELECIONE SALÁRIO DISTINTO, CIDADE DOS FUNCIONÁRIOS;
Buscamos o salário e a cidade do funcionário na tabela de funcionários na declaração acima. Mas buscamos um valor único que não se repete em toda a tabela usando a palavra-chave DISTINCT.
A saída para a seguinte instrução:
SALÁRIO | CIDADE |
65500 | PUNE |
60.000 | NOIDA |
50500 | JAIPUR |
55500 | CHANDIGARH |
50.000 | MUMBAI |
55500 | PUNE |
58500 | MUMBAI |
60500 | MUMBAI |
54500 | NOIDA |
60.000 | DÉLHI |
55500 | DÉLHI |
Exemplo 5: Escreva uma consulta para exibir o sobrenome e o departamento de um funcionário da tabela do funcionário onde o nome do departamento começa com 'O' sem usar a palavra-chave DISTINCT;
SELECT LAST_NAME, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT LIKE 'O%';
Na instrução acima, buscamos sobrenomes de funcionários, departamentos da tabela de funcionários cujos nomes de departamentos começam com 'O', incluindo valores duplicados.
A saída para a seguinte instrução:
LAST_NAME | DEPARTAMENTO |
MISHRA | ORACLE |
SHARMA | ORACLE |
SHARMA | ORACLE |
AGARWAL | ORACLE |
Apenas quatro registros são exibidos dos funcionários cujo departamento começa com 'O'.
Exemplo 6: Escreva uma consulta para exibir o sobrenome e o departamento de um funcionário da tabela do funcionário onde o nome do departamento começa com 'O' usando a palavra-chave DISTINCT;
SELECT DISTINCT LAST_NAME, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT LIKE 'O%';
Usamos a mesma consulta no exemplo 5, apenas adicionamos a palavra-chave DISTINCT logo antes do nome das colunas que exibirá valores exclusivos da tabela do funcionário cujo nome do departamento começa com 'O'.
A saída para a seguinte instrução:
LAST_NAME | DEPARTAMENTO |
MISHRA | ORACLE |
SHARMA | ORACLE |
AGARWAL | ORACLE |
A mesma consulta que executamos na consulta acima, adicionamos a palavra-chave DISTINCT logo antes das colunas. A saída que obtemos difere do exemplo acima porque a exibição do resultado tem valores exclusivos.
Exemplo 7: Escreva uma consulta para contar o salário do funcionário da tabela de funcionários sem usar uma palavra-chave distinta.
SELECT COUNT (SALARY) AS TOTAL SALARY FROM EMPLOYEES;
Na declaração acima, contamos o número total de salários da tabela do funcionário, incluindo valores duplicados.
A saída para a seguinte instrução:
SALÁRIO TOTAL |
13 |
Exemplo 8: Escreva uma consulta para contar o salário do funcionário da tabela de funcionários usando a palavra-chave distinta.
SELECT COUNT(DISTINCT SALARY) AS TOTAL SALARY FROM EMPLOYEES;
No extrato acima, contamos o total de salários da tabela do funcionário, excluindo valores duplicados.
A saída para a seguinte instrução:
SALÁRIO TOTAL |
8 |