Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment afficher les lignes non présentes dans une autre table dans MySQL

Parfois, vous devrez peut-être rechercher des lignes non présentes dans une autre table ou sélectionner des lignes non présentes dans une autre table. Dans cet article, nous verrons comment afficher les lignes non présentes dans une autre table de MySQL, en utilisant la clause NOT EXISTS.


Clause MySQL NOT EXISTS

MySQL fournit des clauses EXISTS, UNION et NOT EXISTS qui vous aident à effectuer des opérations SET avec des tables MySQL. Par opérations SET, nous entendons que vous pouvez traiter les tables MySQL et les résultats des requêtes comme des ensembles mathématiques et sélectionner des lignes présentes dans les deux tables, ou dans une seule des tables. Pour notre article, nous utiliserons la clause NOT EXISTS.


Comment afficher les lignes absentes d'un autre tableau

Voici les étapes pour trouver des lignes non présentes dans une autre table. Disons que vous avez deux tables ventes(id, date_commande, montant) et commandes(id, date_commande, montant)

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 |
 +------+------------+--------+

Voici la requête SQL pour sélectionner les données de ventes table qui n'est pas présente dans les commandes tableau.

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 |
 +------+------------+--------+

Dans la requête ci-dessus, nous utilisons la clause NOT EXISTS pour sélectionner la ligne de sales tableau qui n'est pas présent dans les commandes table, qui sont sélectionnés à l'aide de la sous-requête. Dans la sous-requête, nous sélectionnons uniquement les lignes des commandes table dont la date_commande est le même que celui des ventes tableau.

Besoin d'un outil de reporting pour MySQL ? Ubiq facilite la visualisation des données en quelques minutes et la surveillance dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !