MySQL Except i Intersect

MySQL versió 8.0.31

S’han incorporat molt canvis en aquesta versió de MySQL, però en aquest cas destacarem les sentències Except i Intersect

Provem amb uns exemples sobre la BBDD vk22

Suposem les següents consultes i el que ens retorna el servidor en cada cas.

SELECT * From productes where stock > 50 and stock < 100;

SELECT * From productes where preu > 1000;

INTERSECT

Permet obtenir els registres comuns a dues taules o relacions.

SELECT * From productes where preu > 1000 INTERSECT Select * From productes where stock > 50 and stock < 100;

Abans el feiem amb INNER JOIN, JOIN o NATURAL JOIN

SELECT * FROM (Select * From productes where preu > 1000) as t1 NATURAL JOIN (SELECT * From productes where stock > 50 and stock < 100) as t2;

o amb JOIN i les dues consultes

SELECT * FROM (Select * From productes where preu > 1000) as t1 JOIN (SELECT * From productes where stock > 50 and stock < 100) as t2 USING(id_fab,id_producte);

EXCEPT

Permet obtenir els registres no comuns a dues taules o relacions, segons l’ordre de taules indicat.

Select * From productes where preu > 1000 EXCEPT Select * From productes where stock > 50 and stock < 100;

Abans el feiem amb RIGHT JOIN o LEFT JOIN, segons l’ordre de taules.

SELECT * FROM (Select * From productes where preu > 1000) as t1 LEFT JOIN (Select * From productes where stock > 50 and stock < 100) as t2 USING(id_fab,id_producte) WHERE t2.id_fab IS NULL and t2.id_producte IS NULL;

Si per una altra banda, volem obtenir tots els registres no comuns de les dues taules, aleshores farem servir un FULL OUTER JOIN, que en MySQL es farà amb un [LEFT OUTER JOIN] UNION [RIGHT OUTER JOIN]