Hướng dẫn mysql exists - mysql tồn tại

Cách sử dụng lệnh EXISTS trong MySQL

- Trong hệ quản trị cơ sở dữ liệu MySQL, lệnh EXISTS được dùng để kiểm tra một lệnh truy vấn con, nếu lệnh truy vấn con trả về ít nhất một hàng (bản ghi) thì lệnh EXISTS sẽ trả về giá trị TRUE, còn nếu không thì lệnh EXISTS sẽ trả về giá trị FALSE.

- Trong bài học này, tôi sẽ sử dụng ba cái bảng Customers, Orders, Products lần lượt như bên dưới để làm một số ví dụ minh họa.

CustomerID CustomerName City
1 Nguyễn Thành Nhân Cần Thơ
2 Huỳnh Văn Thiên Vĩnh Long
3 Doãn Quốc Thiên Thanh Sóc Trăng
4 Trần Duy Hưng Bạc Liêu
5 Lê Thị Anh Thư Hậu Giang
ProductID ProductName Price
1 Mì hảo hảo sa tế hành 4500
2 Kem đánh răng PS muối 22000

OrderID OrderDate CustomerID CustomerName
1 City 1 180000
2 Nguyễn Thành Nhân 4 140000
3 Cần Thơ 5 280000
4 Huỳnh Văn Thiên 2 235000
5 Vĩnh Long 3 220000
6 Doãn Quốc Thiên Thanh 1 165000
7 Sóc Trăng 3 350000
8 Trần Duy Hưng 5 115000

SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 35000);

Bạc Liêu

CustomerID CustomerName City

SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);

Bạc Liêu

CustomerID CustomerName City
1 Nguyễn Thành Nhân Cần Thơ
2 Huỳnh Văn Thiên Vĩnh Long
3 Doãn Quốc Thiên Thanh Sóc Trăng
4 Trần Duy Hưng Bạc Liêu
5 Lê Thị Anh Thư Hậu Giang

ProductID

SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));

Bạc Liêu

CustomerID CustomerName City
2 Huỳnh Văn Thiên Vĩnh Long
3 Doãn Quốc Thiên Thanh Sóc Trăng
5 Lê Thị Anh Thư Hậu Giang

13.2.11.6 & NBSP; Các nhóm phụ có tồn tại hoặc không tồn tại

Nếu một truy vấn con trả về bất kỳ hàng nào, EXISTS subqueryTRUE

SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
0 là
SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
1. Ví dụ:

SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);

Theo truyền thống, một truy vấn con

SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
2 bắt đầu với
SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
3, nhưng nó có thể bắt đầu bằng
SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
4 hoặc
SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
5 hoặc bất cứ điều gì. MySQL bỏ qua danh sách
SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
6 trong một truy vấn con như vậy, vì vậy nó không có gì khác biệt.

Đối với ví dụ trước, nếu

SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
7 chứa bất kỳ hàng nào, thậm chí các hàng không có gì ngoài các giá trị
SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
8, điều kiện
SELECT *
FROM Customers
WHERE EXISTS (SELECT * FROM Products WHERE Price = 22000);
2 là TRUE. Đây thực sự là một ví dụ không thể xảy ra bởi vì một truy vấn con
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
1 hầu như luôn luôn chứa các mối tương quan. Dưới đây là một số ví dụ thực tế hơn:

  • Những loại cửa hàng có mặt trong một hoặc nhiều thành phố?

    SELECT DISTINCT store_type FROM stores
      WHERE EXISTS (SELECT * FROM cities_stores
                    WHERE cities_stores.store_type = stores.store_type);
  • Loại cửa hàng nào có mặt ở No City?

    SELECT DISTINCT store_type FROM stores
      WHERE NOT EXISTS (SELECT * FROM cities_stores
                        WHERE cities_stores.store_type = stores.store_type);
  • Những loại cửa hàng có mặt ở tất cả các thành phố?

    SELECT DISTINCT store_type FROM stores s1
      WHERE NOT EXISTS (
        SELECT * FROM cities WHERE NOT EXISTS (
          SELECT * FROM cities_stores
           WHERE cities_stores.city = cities.city
           AND cities_stores.store_type = stores.store_type));

Ví dụ cuối cùng là truy vấn

SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
2 được lồng đôi. Đó là, nó có một mệnh đề
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
2 trong mệnh đề
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
4. Chính thức, nó trả lời câu hỏi mà một thành phố có tồn tại với một cửa hàng không có trong
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
5 không? Nhưng dễ dàng hơn để nói rằng một
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
4 được lồng vào câu hỏi là
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
7 TRUE cho tất cả
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
9?does a city exist with a store that is not in
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
5
? But it is easier to say that a nested
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
4 answers the question is
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
7 TRUE for all
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
9?

Trong MySQL 8.0.19 và sau đó, bạn cũng có thể sử dụng

SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
2 hoặc
SELECT *
FROM Customers
WHERE EXISTS
(SELECT * FROM Orders WHERE (Orders.CustomerID = Customers.CustomerID) AND (Total > 200000));
4 với
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
2 trong truy vấn con, như thế này:

SELECT column1 FROM t1 WHERE EXISTS (TABLE t2);

Các kết quả giống như khi sử dụng

SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
3 mà không có mệnh đề
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
4 trong truy vấn con.