Đôi khi bạn có thể cần tìm các hàng không có trong bảng khác hoặc chọn các hàng không có trong bảng khác. Trong bài viết này, chúng ta sẽ xem xét cách hiển thị các hàng không có trong bảng khác trong MySQL, sử dụng mệnh đề NOT EXISTS.
Mệnh đề MySQL NOT EXISTS
MySQL cung cấp các mệnh đề EXISTS, UNION và NOT EXISTS giúp bạn thực hiện các thao tác SET với các bảng MySQL. Bằng các phép toán SET, chúng tôi muốn nói rằng bạn có thể coi các bảng và kết quả truy vấn MySQL là các tập hợp toán học và chọn các hàng có trong cả hai bảng hoặc chỉ một trong các bảng. Đối với bài viết của chúng tôi, chúng tôi sẽ sử dụng mệnh đề KHÔNG TỒN TẠI.
Cách hiển thị các hàng không có trong bảng khác
Dưới đây là các bước để tìm các hàng không có trong bảng khác. Giả sử bạn có hai bảng doanh số bán hàng (id, order_date, amount) và đơn đặt hàng (id, order_date, số lượng)
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 | +------+------------+--------+
Đây là truy vấn SQL để chọn dữ liệu từ bán hàng bảng không có trong đơn đặt hàng bảng.
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 | +------+------------+--------+
Trong truy vấn trên, chúng tôi sử dụng mệnh đề KHÔNG TỒN TẠI để chọn hàng từ bán hàng bảng không có trong đơn đặt hàng bảng, được chọn bằng cách sử dụng truy vấn con. Trong truy vấn con, chúng tôi chỉ chọn các hàng đó từ đơn đặt hàng bảng có order_date tương tự như trong bán hàng bảng.
Cần một công cụ báo cáo cho MySQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!