Resumo : neste tutorial, você aprenderá como usar a DISTINCT
cláusula MySQL na SELECT
instrução para eliminar linhas duplicadas em um conjunto de resultados.
Introdução à cláusula MySQL DISTINCT
Ao consultar dados de uma tabela, você poderá obter linhas duplicadas. Para remover essas linhas duplicadas, você usa a DISTINCT
cláusula na SELECT
instrução.
Aqui está a sintaxe da DISTINCT
cláusula:
SELECT DISTINCT
select_list
FROM
table_name
WHERE
search_condition
ORDER BY
sort_expression;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe, você especifica uma ou mais colunas nas quais deseja selecionar valores distintos após as SELECT DISTINCT
palavras-chave.
Se você especificar uma coluna, a DISTINCT
cláusula avaliará a exclusividade das linhas com base nos valores dessa coluna.
Entretanto, se você especificar duas ou mais colunas, a DISTINCT
cláusula usará os valores dessas colunas para avaliar a exclusividade das linhas.
Ao executar a SELECT
instrução com a DISTINCT
cláusula, o MySQL avalia a DISTINCT
cláusula após a cláusula FROM
, WHERE
e SELECT
e antes da ORDER BY
cláusula:
Exemplos de cláusulas MySQL DISTINCT
Usaremos a employees
tabela do banco de dados de exemplo :
Primeiro, selecione os sobrenomes da employees
tabela usando a seguinte SELECT
instrução:
SELECT
lastname
FROM
employees
ORDER BY
lastname;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+
| lastname |
+-----------+
| Bondur |
| Bondur |
| Bott |
| Bow |
| Castillo |
| Firrelli |
| Firrelli |
| Fixter |
....
| Jones |
| Patterson |
| Patterson |
| Patterson |
| Thompson |
...
+-----------+
23 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
Conforme mostrado claramente na saída, alguns funcionários têm os mesmos sobrenomes, por exemplo, Bondur,Firrelli
.
Em segundo lugar, selecione sobrenomes exclusivos adicionando a DISTINCT
cláusula como esta:
SELECT
DISTINCT lastname
FROM
employees
ORDER BY
lastname;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como você pode ver claramente na saída, a DISTINCT
cláusula remove os sobrenomes duplicados do conjunto de resultados.
+-----------+
| lastname |
+-----------+
| Bondur |
| Bott |
| Bow |
| Castillo |
| Firrelli |
...
| Nishi |
| Patterson |
| Thompson |
| Tseng |
| Vanauf |
+-----------+
19 rows in set (0.01 sec)
Linguagem de código: texto simples ( texto simples )
Valores MySQL DISTINCT e NULL
Quando você especifica uma coluna que possui NULL
valores na DISTINCT
cláusula, a DISTINCT
cláusula manterá apenas um NULL
valor porque considera que todos os NULL
valores são iguais.
Por exemplo, a coluna de estado na customers
tabela possui NULL
valores.
Ao usar a DISTINCT
cláusula para consultar os estados, você verá estados distintos e NULL
como segue:
SELECT DISTINCT state
FROM customers;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+---------------+
| state |
+---------------+
| NULL |
| NV |
| Victoria |
| CA |
| NY |
| PA |
...
| Co. Cork |
| Pretoria |
| NH |
| Tokyo |
+---------------+
19 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
MySQL DISTINCT com múltiplas colunas
Ao especificar diversas colunas na DISTINCT
cláusula, a DISTINCT
cláusula usará a combinação de valores nessas colunas para determinar a exclusividade da linha no conjunto de resultados.
Por exemplo, para obter uma combinação exclusiva de cidade e estado na customers
tabela, use a seguinte consulta:
SELECT DISTINCT
state, city
FROM
customers
WHERE
state IS NOT NULL
ORDER BY
state,
city;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+---------------+----------------+
| state | city |
+---------------+----------------+
| BC | Tsawassen |
| BC | Vancouver |
| CA | Brisbane |
| CA | Burbank |
| CA | Burlingame |
| CA | Glendale |
| CA | Los Angeles |
| CA | Pasadena |
| CA | San Diego |
...
Linguagem de código: texto simples ( texto simples )
Sem a DISTINCT
cláusula, você obterá a combinação duplicada de estado e cidade da seguinte forma:
SELECT
state, city
FROM
customers
WHERE
state IS NOT NULL
ORDER BY
state ,
city;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+---------------+----------------+
| state | city |
+---------------+----------------+
| BC | Tsawassen |
| BC | Vancouver |
| CA | Brisbane |
| CA | Burbank |
..
| CA | San Francisco |
| CA | San Francisco |
...
| MA | Boston |
| MA | Boston |
| MA | Brickhaven |
| MA | Brickhaven |
| MA | Brickhaven |
...
| NY | NYC |
| NY | NYC |
| NY | NYC |
| NY | NYC |
| NY | NYC |
...
Linguagem de código: texto simples ( texto simples )
Resumo
- Use a
DISTINCT
cláusula MySQL para remover linhas duplicadas do conjunto de resultados retornado pelaSELECT
cláusula.