MySQL DISTINTO

Resumo : neste tutorial, você aprenderá como usar a DISTINCTcláusula MySQL na SELECTinstruçã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 SELECTinstrução.

Aqui está a sintaxe da DISTINCTclá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 DISTINCTpalavras-chave.

Se você especificar uma coluna, a DISTINCTcláusula avaliará a exclusividade das linhas com base nos valores dessa coluna.

Entretanto, se você especificar duas ou mais colunas, a DISTINCTcláusula usará os valores dessas colunas para avaliar a exclusividade das linhas.

Ao executar a SELECTinstrução com a DISTINCTcláusula, o MySQL avalia a DISTINCTcláusula após a cláusula FROM, WHEREe SELECTe antes da ORDER BYcláusula:

MySQL DISTINTO

Exemplos de cláusulas MySQL DISTINCT

Usaremos a employeestabela do banco de dados de exemplo :

Primeiro, selecione os sobrenomes da employeestabela usando a seguinte SELECTinstrução:

SELECT 
    lastname
FROM
    employees
ORDER BY 
    lastname;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

+-----------+
| 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 DISTINCTcláusula como esta:

SELECT 
    DISTINCT lastname
FROM
    employees
ORDER BY 
    lastname;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

Como você pode ver claramente na saída, a DISTINCTclá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 NULLvalores na DISTINCTcláusula, a DISTINCTcláusula manterá apenas um NULLvalor porque considera que todos os NULLvalores são iguais.

Por exemplo, a coluna de estado na customerstabela possui NULLvalores.

Ao usar a DISTINCTcláusula para consultar os estados, você verá estados distintos e NULLcomo segue:

SELECT DISTINCT state
FROM customers;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

+---------------+
| 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 DISTINCTcláusula, a DISTINCTclá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 customerstabela, 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 )

Experimente

+---------------+----------------+
| 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 )

Experimente

+---------------+----------------+
| 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 DISTINCTcláusula MySQL para remover linhas duplicadas do conjunto de resultados retornado pela SELECTcláusula.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *