Soms moet u rijen zoeken die niet in een andere tabel voorkomen of rijen selecteren die niet in een andere tabel voorkomen. In dit artikel zullen we bekijken hoe we rijen kunnen weergeven die niet aanwezig zijn in een andere tabel in MySQL, met behulp van de NOT EXISTS-clausule.
MySQL NOT EXISTS-clausule
MySQL biedt EXISTS-, UNION- en NOT EXISTS-clausules die u helpen bij het uitvoeren van SET-bewerkingen met MySQL-tabellen. Met SET-bewerkingen bedoelen we dat u MySQL-tabellen en queryresultaten als wiskundige sets kunt behandelen en rijen kunt selecteren die in beide tabellen voorkomen, of slechts in een van de tabellen. Voor ons artikel zullen we de NOT EXISTS-clausule gebruiken.
Rijen weergeven die niet in een andere tabel voorkomen
Dit zijn de stappen om rijen te vinden die niet in een andere tabel voorkomen. Stel dat u twee tabellen heeft verkoop(id, order_date, bedrag) en orders(id, order_date, hoeveelheid)
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 | +------+------------+--------+
Hier is de SQL-query om gegevens te selecteren uit verkoop tafel die niet aanwezig is in bestellingen tafel.
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 | +------+------------+--------+
In de bovenstaande zoekopdracht gebruiken we de clausule NOT EXISTS om een rij te selecteren uit sales tafel die niet aanwezig zijn in bestellingen tabel, die worden geselecteerd met behulp van subquery. In de subquery selecteren we alleen die rijen uit orders tafel waarvan order_date is hetzelfde als die in verkoop tafel.
Een rapportagetool voor MySQL nodig? Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!