Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
MySQL: operador de intersección
Este tutorial de MySQL explica cómo usar operador INTERSECT Con sintaxis y ejemplos.
describir
Aunque no existe un operador INTERSECT en MySQL, puede simular fácilmente este tipo de consulta utilizando una cláusula IN o una cláusula EXISTS, según la complejidad de la consulta INTERSECT.
Primero, expliquemos qué es una consulta INTERSECT. Las consultas INTERSECT devuelven la intersección de 2 o más conjuntos de datos. Si existe un registro en ambos conjuntos de datos, se incluirá en el resultado INTERSECT. Sin embargo, si el registro existe en un conjunto de datos pero no en el otro, se ignorará del resultado INTERSECT.
consulta de intersección
explique: Una consulta INTERSECT devolverá registros en el área sombreada en azul. Estos son registros que existen tanto en Dataset1 como en Dataset2.
sintaxis
La sintaxis del operador INTERSECT en MySQL es:
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions] INTERSECT SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions];
parámetro o parámetro
expresión1, expresión2, … expresión_n La columna o el cálculo que desea recuperar. tabla La tabla de la que desea recuperar registros. Debe aparecer al menos una tabla en la cláusula FROM. La condición WHERE es opcional. Para seleccionar las condiciones que debe cumplir un registro.
notas
- Ambas instrucciones SELECT deben tener el mismo número de expresiones y tener tipos de datos similares.
Ejemplo: usar una sola expresión
Primero, exploremos cómo simular una consulta INTERSECT en MySQL con campos del mismo tipo de datos.
Si la base de datos es compatible con el operador INTERSECT (MySQL no), entonces usaría el operador INTERSECT para devolver el valor de category_id común entre las tablas de Producto e Inventario.
SELECT category_id FROM products INTERSECT SELECT category_id FROM inventory;
Dado que el operador INTERSECT no se puede usar en MySQL, el operador IN se usará para simular una consulta INTERSECT de la siguiente manera:
SELECT products.category_id FROM products WHERE products.category_id IN (SELECT inventory.category_id FROM inventory);
En este ejemplo simple, puede usar el operador IN para devolver todos los valores de category_id que existen en las tablas Producto e Inventario.
Ahora, compliquemos aún más nuestro ejemplo agregando una condición WHERE a la consulta INTERSECT.
Por ejemplo, así es como se ve INTERSECT con una condición WHERE:
SELECT category_id FROM products WHERE category_id < 100 INTERSECT SELECT category_id FROM inventory WHERE quantity > 0;
Aquí se explica cómo simular una consulta INTERSECT con el operador IN e incluir una condición WHERE:
SELECT products.category_id FROM products WHERE products.category_id < 100 AND products.category_id IN (SELECT inventory.category_id FROM inventory WHERE inventory.quantity > 0);
En este ejemplo, se agrega una cláusula WHERE para filtrar los resultados en la tabla Productos y la tabla Inventario.
Ejemplo: uso de varias expresiones
A continuación, veamos cómo simular una consulta INTERSECT en MySQL que devuelve varias columnas.
Primero, así es como usa el operador INTERSECT para devolver múltiples expresiones.
SELECT contact_id, last_name, first_name FROM contacts WHERE contact_id < 100 INTERSECT SELECT customer_id, last_name, first_name FROM customers WHERE last_name <> 'Johnson';
Además, dado que el operador INTERSECT no se puede usar en MySQL, la cláusula EXISTS se puede usar en casos más complejos para simular una consulta INTERSECT, de la siguiente manera:
SELECT contacts.contact_id, contacts.last_name, contacts.first_name FROM contacts WHERE contacts.contact_id < 100 AND EXISTS (SELECT * FROM customers WHERE customers.last_name <> 'Johnson' AND customers.customer_id = contacts.contact_id AND customers.last_name = contacts.last_name AND customers.first_name = contacts.first_name);
En este ejemplo más complejo, puede usar la cláusula EXISTS para devolver múltiples expresiones que existen en la tabla de contactos con contact_id menor que 100 y la tabla de clientes con last_name diferente a Johnson.
Como está haciendo una INTERSECCIÓN, debe incluir el campo de intersección de esta manera:
AND customers.customer_id = contacts.contact_id AND customers.last_name = contacts.last_name AND customers.first_name = contacts.first_name
Esta combinación se realiza para garantizar que los campos id_cliente, apellido y nombre en la tabla de clientes se cruzan con los campos id_contacto, apellido y nombre en la tabla de contactos.