Resumo : neste tutorial, você aprenderá sobre o INTERSECT
operador MySQL e como usá-lo para encontrar as linhas comuns de múltiplas consultas.
Observe que o MySQL suporta INTERSECT
operador no MySQL 8.0.31.
Introdução ao operador MySQL INTERSECT
O INTERSECT
operador é um operador de conjunto que retorna as linhas comuns de duas ou mais consultas.
Aqui está a sintaxe do INTERSECT
operador:
query1
INTERSECT [ALL | DISTINCT]
query2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O INTERSECT
operador compara os conjuntos de resultados de duas consultas e retorna as linhas comuns.
Para usar o INTERSECT
operador para as consultas, siga 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 INTERSECT
operador usa o DISTINCT
por padrão. Isso significa que DISTINCT
remove duplicatas de ambos os lados da interseção. Se quiser reter duplicatas, especifique explicitamente a ALL
opção.
O diagrama a seguir ilustra o INTERSECT
operador.
Neste diagrama, a consulta à esquerda produz um conjunto de resultados de (1,2,3) e a consulta à direita retorna um conjunto de resultados de (2,3,4). O INTERSECT
operador retorna as linhas comuns, que neste caso são (2,3).
Ao contrário do UNION
operador, que combina as linhas de duas consultas, o INTERSECT
operador retorna as linhas comuns entre as consultas.
Exemplos de operadores MySQL INTERSECT
Vejamos um exemplo de uso do INTERSECT
operador.
Configurando tabelas de amostra
Primeiro, crie tabelas t1
e t2
e insira dados em ambas as tabelas:
CREATE TABLE t1 (
id INT PRIMARY KEY
);
CREATE TABLE t2 LIKE t1;
INSERT INTO t1(id) VALUES(1),(2),(3);
INSERT INTO t2(id) VALUES(2),(3),(4);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, consulte os dados da t1
tabela:
SELECT id FROM t1;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----+ | identificação | +----+ | 1 | | 2 | | 3 | +----+
Terceiro, consulte os dados da t2
tabela:
SELECT id FROM t2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----+ | identificação | +----+ | 2 | | 3 | | 4 | +----+
1) Exemplo do operador MySQL INTERSECT
O exemplo a seguir usa o INTERSECT
operador para obter um conjunto de resultados que contém as linhas comuns às t1
tabelas e t2
:
SELECT id FROM t1
INTERSECT
SELECT id FROM t2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----+ | identificação | +----+ | 2 | | 3 | +----+
A consulta é equivalente à seguinte consulta que usa DISTINCT
explicitamente:
SELECT id FROM t1
INTERSECT DISTINCT
SELECT id FROM t2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
2) Um exemplo prático do MySQL INTERSECT
Usaremos as tabelas customers
e employees
do banco de dados de exemplo para a demonstração:
A consulta a seguir usa o INTERSECT
operador para localizar os nomes comuns de clientes e funcionários:
SELECT
firstName
FROM
employees
INTERSECT
SELECT
contactFirstname
FROM
customers;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+-----------+
| firstName |
+-----------+
| Mary |
| Jeff |
| William |
| Leslie |
| Julie |
| Steve |
| Peter |
| Martín |
+-----------+
3) Usando o operador INTERSECT com cláusula ORDER BY
Para classificar o conjunto de resultados retornado pelo INTERSECT
operador, você usa a ORDER BY
cláusula. O MySQL usa as colunas da primeira consulta como o nome da coluna do conjunto de resultados.
Por exemplo, a consulta a seguir usa o INTERSECT
operador para localizar os nomes comuns de funcionários e clientes e classificá-los em ordem crescente:
SELECT
firstName
FROM
employees
INTERSECT
SELECT
contactFirstname
FROM
customers
ORDER BY firstName;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+-----------+
| firstName |
+-----------+
| Jeff |
| Julie |
| Leslie |
| Martín |
| Mary |
| Peter |
| Steve |
| William |
+-----------+
4) Usando o operador INTERSECT com exemplo de opção ALL
O exemplo a seguir usa o INTERSECT
operador com a ALL
opção que localiza os nomes comuns de funcionários e clientes e retém as duplicatas:
SELECT
firstName
FROM
employees
INTERSECT ALL
SELECT
contactFirstname
FROM
customers
ORDER BY firstName;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+-----------+
| firstName |
+-----------+
| Jeff |
| Julie |
| Leslie |
| Leslie |
| Martín |
| Mary |
| Peter |
| Steve |
| William |
+-----------+
Resumo
- Use o operador MySQL
INTERSECT
para localizar as linhas que são comuns a vários resultados de consulta. - Use
INTERSECT DISTINCT
para remover as duplicatas dos conjuntos de resultados eINTERSECT ALL
retê-las. - O
INTERSECT
operador usaDISTINCT
por padrão.