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]