Resumo : neste tutorial você aprenderá sobre MINUS
o operador SQL e como simular MINUS
no MySQL usando join.
Observe que o MySQL oferece suporte ao EXCEPT
operador a partir da versão 8.0.31. O EXCEPT
operador é equivalente ao MINUS
operador. Se estiver usando uma versão inferior, você pode consultar este tutorial para emular o MINUS
operador.
Introdução ao operador SQL MINUS
O MINUS
operador é um dos três operadores definidos no padrão SQL que inclui UNION
, INTERSECT
e MINUS
.
Compara MINUS
os resultados de duas consultas e retorna as linhas do conjunto de resultados da primeira consulta que não aparecem no conjunto de resultados da segunda consulta.
O seguinte ilustra a sintaxe do MINUS
operador:
SELECT select_list1
FROM table_name1
MINUS
SELECT select_list2
FROM table_name2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
As regras básicas para consultas que utilizam o MINUS
operador são as seguintes:
- O número e a ordem das colunas em ambos
select_list1
eselect_list2
devem ser iguais. - Os tipos de dados das colunas correspondentes em ambas as consultas devem ser compatíveis.
Suponha que temos duas tabelas t1
e t2
com a seguinte estrutura e dados:
CREATE TABLE t1 (
id INT PRIMARY KEY
);
CREATE TABLE t2 (
id INT PRIMARY KEY
);
INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A consulta a seguir retorna valores distintos da consulta da t1
tabela que não são encontrados no resultado da consulta da t2
tabela.
SELECT id FROM t1
MINUS
SELECT id FROM t2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O seguinte diagrama de Venn ilustra a MINUS
operação:
Infelizmente, o MySQL não oferece suporte MINUS
ao operador na versão anterior 8.0.31. No entanto, você pode usar join para emulá-lo.
Emulação de operador MySQL MINUS
Para emular MINUS
duas consultas, você usa a seguinte sintaxe:
SELECT
select_list
FROM
table1
LEFT JOIN table2
ON join_predicate
WHERE
table2.column_name IS NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por exemplo, a consulta a seguir usa a LEFT JOIN
cláusula para retornar o mesmo resultado que o MINUS
operador:
SELECT
id
FROM
t1
LEFT JOIN
t2 USING (id)
WHERE
t2.id IS NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste tutorial, você aprendeu sobre o operador SQL MINUS e como emular o operador MINUS no MySQL usando LEFT JOIN
a cláusula.