MySQL, EXCETO

Resumo : neste tutorial, você aprenderá como usar o EXCEPToperador MySQL para encontrar a diferença entre dois conjuntos de dados.

Observe que o EXCEPToperador é suportado no MySQL a partir da versão 8.0.31. Se você usar uma versão inferior, poderá emular o operador EXCEPT (ou MINUS) .

Introdução ao operador MySQL EXCEPT

O operador MySQL EXCEPTpermite recuperar linhas de uma consulta que não aparecem em outra consulta.

Aqui está a sintaxe básica do EXCEPToperador MySQL:

query1
EXCEPT [ALL | DISTINCT]
query2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe, EXCEPTcomparará o resultado de query1com o conjunto de resultados de query2e retornará as linhas do conjunto de resultados de query1que não aparecem no conjunto de resultados de query2.

Por padrão, o EXCEPToperador usa a DISTINCTopção se você a omitir. Remove EXCEPT DISTINCTlinhas duplicadas no conjunto de resultados.

Se quiser reter as linhas duplicadas, você precisará especificar a ALLopção explicitamente.

Para usar o EXCEPToperador, o query1e query2precisa seguir estas regras:

  • A ordem e o número de colunas na lista de seleção das consultas devem ser iguais.
  • Os tipos de dados das colunas correspondentes devem ser compatíveis.

O EXCEPToperador retorna um conjunto de consultas com nomes de colunas derivados dos nomes de colunas da primeira consulta ( query1).

Exemplos de operadores MySQL EXCEPT

Vejamos alguns exemplos de uso do EXCEPToperador MySQL.

1) Exemplo simples do operador MySQL EXCEPT

Primeiro, crie duas tabelas t1e t2:

CREATE TABLE t1 (
    id INT PRIMARY KEY
);

CREATE TABLE t2 (
    id INT PRIMARY KEY
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira linhas nas tabelas t1e t2:

INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, use o EXCEPToperador para encontrar linhas que aparecem na tabela t1, mas não aparecem na tabela t2:

SELECT id FROM t1
EXCEPT
SELECT id FROM t2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+
| id |
+----+
|  1 |
+----+Linguagem de código:  texto simples  ( texto simples )

Neste exemplo, a primeira consulta retorna um conjunto de resultados (1,2,3) e a segunda consulta produz um conjunto de resultados (2,3,4).

O EXCEPToperador retorna a linha 1 que aparece no primeiro conjunto de resultados, mas não aparece no segundo conjunto de resultados.

O seguinte diagrama de Venn ilustra a EXCEPToperação:

MySQL, EXCETO

2) Exemplo prático do operador MySQL EXCEPT

Usaremos as tabelas funcionários e clientes do banco de dados de exemplo para ilustrar o EXCEPToperador:

MySQL EXCETO: Tabelas de amostra

A consulta a seguir usa o EXCEPToperador para localizar os primeiros nomes que aparecem na customerstabela, mas não aparecem na employeestabela:

SELECT firstName
FROM employees
EXCEPT
SELECT contactFirstName
FROM customers;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+-----------+
| firstName |
+-----------+
| Diane     |
| Gerard    |
| Anthony   |
| Foon Yue  |
| George    |
| Loui      |
| Pamela    |
| Larry     |
| Barry     |
| Andy      |
| Tom       |
| Mami      |
| Yoshimi   |
+-----------+Linguagem de código:  texto simples  ( texto simples )

Neste exemplo, o conjunto de resultados utiliza a firstNamecoluna da primeira consulta para sua coluna.

3) Usando o operador EXCEPT com o exemplo da cláusula ORDER BY

Para classificar o conjunto de resultados retornado pelo EXCEPToperador, você usa a ORDER BYcláusula.

Por exemplo, a consulta a seguir usa o EXCEPToperador para obter os primeiros nomes que aparecem na employeestabela, mas não aparecem na customerstabela e classificar os primeiros nomes em ordem alfabética:

SELECT firstName
FROM employees
EXCEPT
SELECT contactFirstName
FROM customers
ORDER BY firstName;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+-----------+
| firstName |
+-----------+
| Andy      |
| Anthony   |
| Barry     |
| Diane     |
| Foon Yue  |
| George    |
| Gerard    |
| Larry     |
| Loui      |
| Mami      |
| Pamela    |
| Tom       |
| Yoshimi   |
+-----------+Linguagem de código:  texto simples  ( texto simples )

4) Usando o operador EXCEPT com a opção ALL

O exemplo a seguir usa o EXCEPToperador com a ALLopção de reter nomes duplicados no conjunto de resultados:

SELECT firstName
FROM employees
EXCEPT ALL
SELECT contactFirstName
FROM customers
ORDER BY firstName;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+-----------+
| firstName |
+-----------+
| Andy      |
| Anthony   |
| Barry     |
| Diane     |
| Foon Yue  |
| George    |
| Gerard    |
| Gerard    |
| Larry     |
| Loui      |
| Mami      |
| Pamela    |
| Tom       |
| Yoshimi   |
+-----------+Linguagem de código:  texto simples  ( texto simples )

No conjunto de resultados, o primeiro nome Gerard aparece duas vezes.

Resumo

  • Use o operador MySQL EXCEPTpara recuperar linhas de um conjunto de resultados que não aparecem em outro conjunto de resultados.
  • EXCEPT DISTINCTremove duplicatas enquanto EXCEPT ALLretém as duplicatas.
  • O EXCEPToperador usa a DISTINCTopção por padrão.

Deixe um comentário

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