sql >> Base de Datos >  >> RDS >> Mysql

Cómo mostrar filas que no están presentes en otra tabla en MySQL

A veces, es posible que necesite buscar filas que no estén presentes en otra tabla o seleccionar filas que no estén presentes en otra tabla. En este artículo, veremos cómo mostrar filas que no están presentes en otra tabla en MySQL, usando la cláusula NOT EXISTS.


cláusula MySQL NOT EXISTS

MySQL proporciona cláusulas EXISTS, UNION y NOT EXISTS que lo ayudan a realizar operaciones SET con tablas MySQL. Por operaciones SET, queremos decir que puede tratar las tablas de MySQL y los resultados de las consultas como conjuntos matemáticos y seleccionar filas que están presentes en ambas tablas, o solo en una de las tablas. Para nuestro artículo, usaremos la cláusula NOT EXISTS.


Cómo mostrar filas que no están presentes en otra tabla

Estos son los pasos para encontrar filas que no están presentes en otra tabla. Digamos que tiene dos tablas ventas (id, order_date, cantidad) y pedidos(id, order_date, cantidad)

mysql> create table sales(id int, order_date date, amount int);

mysql> insert into sales(id, order_date, amount)
      values(1, '2021-01-24',250),
      (2, '2021-01-25',250),
      (3, '2021-01-26',250),
      (4, '2021-01-27',250),
      (5, '2021-01-28',250),
      (6, '2021-01-29',250),
      (7, '2021-01-30',250),
      (8, '2021-01-31',250),
      (9, '2021-02-01',250);

mysql> select * from sales;
 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    1 | 2021-01-24 |    250 |
 |    2 | 2021-01-25 |    250 |
 |    3 | 2021-01-26 |    250 |
 |    4 | 2021-01-27 |    250 |
 |    5 | 2021-01-28 |    250 |
 |    6 | 2021-01-29 |    250 |
 |    7 | 2021-01-30 |    250 |
 |    8 | 2021-01-31 |    250 |
 |    9 | 2021-02-01 |    250 |
 +------+------------+--------+

mysql> create table orders(id int, order_date date, amount int);

mysql> insert into orders(id, order_date, amount)
      values(5, '2021-01-28',250),
      (6, '2021-01-29',250),
      (7, '2021-01-30',250),
      (8, '2021-01-31',250),
      (9, '2021-02-01',250);

mysql> select * from orders;
 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    5 | 2021-01-28 |    250 |
 |    6 | 2021-01-29 |    250 |
 |    7 | 2021-01-30 |    250 |
 |    8 | 2021-01-31 |    250 |
 |    9 | 2021-02-01 |    250 |
 +------+------------+--------+

Aquí está la consulta SQL para seleccionar datos de ventas tabla que no está presente en pedidos mesa.

mysql> SELECT *
       FROM sales D
       WHERE NOT EXISTS(SELECT * FROM orders c
                       WHERE D.order_date = C.order_date);
 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    1 | 2021-01-24 |    250 |
 |    2 | 2021-01-25 |    250 |
 |    3 | 2021-01-26 |    250 |
 |    4 | 2021-01-27 |    250 |
 +------+------------+--------+

En la consulta anterior, usamos la cláusula NOT EXISTS para seleccionar la fila de ventas tabla que no están presentes en pedidos tabla, que se seleccionan mediante subconsulta. En la subconsulta, seleccionamos solo aquellas filas de pedidos tabla cuya order_date es el mismo que en ventas mesa.

¿Necesita una herramienta de informes para MySQL? Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!