O operador intersect combina resultados(result set) de dois ou mais select e retorna as linhas distintas.
O operador intersect usa os nomes das colunas da primeira instrução select como os nomes das colunas do resultados final.
A cláusula order by do select não tem efeito na ordem das linhas no resultado final. Se quiser classificar o resultado final, você pode usar uma cláusula order by na última instrução select.
Sintaxe do Operador INTERSECT
A sintaxe do operador de intersect é assim:
select1 intersect select2 intersect select3 ... [order by...];
Nesta sintaxe:
- especifique os selects que deseja combinar
- use intersect entre esses selects.
As instruções select acima, select1, select2, etc., devem seguir estes requisitos:
- as tabelas dos selects devem ter o mesmo número de colunas.
- Os tipos de dados das colunas correspondentes devem ser os mesmos.
Tabelas a Serem Usadas nos Exemplos
Usaremos as tabelas guests e vips do banco de dados nation que baixamos pronta no artigo: Baixando Exemplo de Banco de Dados.
As duas tabelas têm esse conteúdo:
Tabela guests
MariaDB [nation]> select * from guests; +----------+--------+ | guest_id | name | +----------+--------+ | 1 | John | | 2 | Jane | | 3 | Jean | | 4 | Storm | | 5 | Beast | | 6 | | | 7 | silvia | | 8 | maria | +----------+--------+
Tabela vips
MariaDB [nation]> select * from vips; +--------+-----------+ | vip_id | name | +--------+-----------+ | 1 | Jane | | 2 | Charles | | 3 | John | | 4 | Wolverine | | 5 | Rogue | | 6 | | | 7 | maria | | 8 | silvia | +--------+-----------+
Exemplos de Uso do Operador INTERSECT em SQL
#1 Este exemplo usa o operador inersect para localizar contatos comuns nas tabelas guests e vips:
select name from guests intersect select name from vips order by name;
MariaDB [nation]> select name from guests intersect select name from vips order by name; +--------+ | name | +--------+ | | | Jane | | John | | maria | | silvia | +--------+
#2 abaixo ocorre erro ao tentar ver a interseção entre tabelas mas usando campos de diferentes tipos
select id from guests intersect select name from vips;
MariaDB [nation]> select id from guests intersect select name from vips; ERROR 1054 (42S22): Unknown column 'id' in 'field list'