Tiếp theo → ← Prev
Toán tử tồn tại trong MySQL là một loại toán tử Boolean trả về kết quả đúng hoặc sai. Nó được sử dụng kết hợp với một truy vấn con và kiểm tra sự tồn tại của dữ liệu trong một trình truy vấn con. Điều đó có nghĩa là nếu một truy vấn con trả về bất kỳ bản ghi nào, toán tử này sẽ trả về đúng. Nếu không, nó sẽ trả về sai. Giá trị thực luôn được biểu thị giá trị số 1 và giá trị sai đại diện cho 0. Chúng ta có thể sử dụng nó với câu lệnh CHỌN, CẬP NHẬT, XÓA, CHUYỂN ĐỔI.true or false result. It is used in combination with a subquery and checks the existence of data in a subquery. It means if a subquery returns any record, this operator returns true. Otherwise, it will return false. The true value is always represented numeric value 1, and the false value represents 0. We can use it with SELECT, UPDATE, DELETE, INSERT statement.
Cú pháp
Sau đây là cú pháp để sử dụng toán tử tồn tại trong MySQL:
Toán tử không được sử dụng để phủ nhận toán tử tồn tại. Nó trả về true khi trình điều khiển con không trả lại bất kỳ hàng nào. Nếu không, nó trả về sai.
Nói chung, truy vấn tồn tại bắt đầu với Chọn *, nhưng nó có thể bắt đầu với cột Chọn, chọn A_Constant hoặc bất cứ thứ gì trong trình điều khiển con. Nó sẽ cung cấp cùng một đầu ra vì MySQL bỏ qua danh sách chọn trong truy vấn con.
Nhà điều hành này chấm dứt ngay lập tức để xử lý thêm sau khi kết quả phù hợp được tìm thấy. Tính năng này cải thiện hiệu suất của truy vấn trong MySQL.
Giải thích tham số
Sau đây là các tham số được sử dụng trong toán tử tồn tại:
col_names | Nó là tên của [các] cột chứa trong bảng được chỉ định. |
tab_name | Đó là tên của bảng mà chúng ta sẽ thực hiện toán tử tồn tại. |
tình trạng | Nó chỉ định để tìm kiếm giá trị cụ thể từ bảng. |
Subquery | Nó thường là câu lệnh select bắt đầu bằng Chọn *, nhưng MySQL bỏ qua nó trong một trình truy xuất con. |
MySQL tồn tại ví dụ toán tử
Hãy cho chúng tôi hiểu cách các nhà điều hành tồn tại hoạt động trong MySQL. Ở đây, trước tiên chúng tôi sẽ tạo hai bảng có tên "Khách hàng" và "Đơn đặt hàng" bằng cách sử dụng câu lệnh sau:"customer" and "orders" using the following statement:
Tiếp theo, chúng ta cần chèn các giá trị vào cả hai bảng. Thực hiện các câu lệnh dưới đây:
Để xác minh các bảng, hãy chạy lệnh Chọn như dưới đây:
Chúng tôi sẽ nhận được đầu ra dưới đây:
Mysql chọn ví dụ tồn tại
Trong ví dụ này, chúng tôi sẽ sử dụng nhà điều hành tồn tại để tìm tên và nghề nghiệp của khách hàng đã đặt ít nhất một đơn đặt hàng:
Đầu ra sau xuất hiện:
Một lần nữa, nếu chúng tôi muốn lấy tên của khách hàng chưa đặt hàng, thì hãy sử dụng toán tử không tồn tại:
Nó sẽ cung cấp cho đầu ra dưới đây:
MySQL tồn tại với ví dụ về câu lệnh Xóa
Giả sử chúng tôi muốn xóa một bản ghi từ bảng đơn hàng có order_id = 3, thực hiện truy vấn sau để xóa bản ghi khỏi bảng đơn hàng vĩnh viễn:
Để xác minh đầu ra, hãy chạy lệnh bên dưới:
Trong đầu ra, chúng ta có thể thấy rằng bản ghi bảng có order_id = 3 bị xóa thành công.
Nếu chúng ta muốn kiểm tra xem một hàng có tồn tại trong bảng hay không, hãy sử dụng truy vấn sau:
Chúng tôi sẽ nhận được đầu ra 1 có nghĩa là đúng. Do đó, Cust_id = 104 tồn tại trong bảng.
Sự khác biệt giữa tồn tại và trong nhà điều hành
Sự khác biệt chính giữa tồn tại và trong toán tử được đưa ra ở dạng bảng:
1. | Nó được sử dụng để giảm thiểu nhiều điều kiện hoặc điều kiện trong MySQL. | Nó được sử dụng để kiểm tra sự tồn tại của dữ liệu trong một truy vấn con. |
2. | Chọn col_names từ tab_name trong đó col_name trong [phụ]; | SELECT col_names FROM tab_name WHERE [NOT] EXISTS [subquery]; |
3. | Nó so sánh tất cả các giá trị bên trong toán tử trong. | Nó dừng lại để thực hiện thêm ngay khi tìm thấy sự xuất hiện thực sự đầu tiên. |
4. | Nó có thể sử dụng để so sánh các giá trị null. | Nó không thể sử dụng để so sánh các giá trị null. |
5. | Nó thực hiện nhanh hơn khi kết quả phụ là ít hơn. | Nó thực hiện nhanh hơn khi kết quả phụ là lớn. |
6. | Nó thực hiện so sánh giữa truy vấn cha mẹ và truy vấn con hoặc truy vấn con. | Nó không thực hiện so sánh giữa truy vấn cha mẹ và truy vấn con hoặc truy vấn con. |
Chủ đề tiếp theomysql không điều kiệnMySQL NOT Condition
← Tiếp theo →
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 công cụ con trả về bất kỳ hàng nào, EXISTS
subquery
là TRUE
và NOT EXISTS
subquery
là FALSE
. Ví dụ:
SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
Theo truyền thống, một truy vấn con
SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
0 bắt đầu với SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
1, nhưng nó có thể bắt đầu bằng SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
2 hoặc SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
3 hoặc bất cứ điều gì. MySQL bỏ qua danh sách SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
4 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 column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
5 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 column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
6, điều kiện SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
0 là TRUE
. Đây thực sự là một ví dụ không thể xảy ra bởi vì một trình điều khiển con SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
9 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 DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
0 được lồng đôi. Đó là, nó có một mệnh đề SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
0 trong mệnh đề SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
2. 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 DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
3 không? Nhưng dễ dàng hơn để nói rằng một SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
2 được lồng vào câu hỏi là SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
5 TRUE
cho tất cả SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
7?“does a city exist with a store that is not in SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
3”? But it is easier to say that a nested SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
2 answers the
question “is SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
5 TRUE
for all SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
7?”Trong MySQL 8.0.19 và sau đó, bạn cũng có thể sử dụng
SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
0 hoặc SELECT DISTINCT store_type FROM stores
WHERE EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
2 với SELECT DISTINCT store_type FROM stores
WHERE NOT EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
0 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 DISTINCT store_type FROM stores
WHERE NOT EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
1 không có mệnh đề SELECT DISTINCT store_type FROM stores
WHERE NOT EXISTS [SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type];
2 trong trình điều khiển con.