Trong bài viết này, bạn sẽ học cách sử dụng toán tử MySQL OR để kết hợp các biểu thức Boolean.
Giới thiệu về toán tử OR của MySQL
Toán tử OR
của MySQL là một toán tử logic kết hợp hai biểu thức Boolean.
A OR B
Nếu cả A và B không phải là NULL, toán tử OR trả về 1 (true) nếu A hoặc B khác 0. Ví dụ:
SELECT 1 OR 1, 1 OR 0, 0 OR 1;
Kết quả:
+--------+--------+--------+ | 1 OR 1 | 1 OR 0 | 0 OR 1 | +--------+--------+--------+ | 1 | 1 | 1 | +--------+--------+--------+ 1 row in set (0.00 sec)
Nếu cả A và B đều bằng không (sai), toán tử OR trả về số không. Ví dụ:
SELECT 0 OR 0;
Kết quả:
+--------+ | 0 OR 0 | +--------+ | 0 | +--------+ 1 row in set (0.00 sec)
Khi A và / hoặc B là NULL, toán tử OR trả về 1 (true) nếu A hoặc B khác 0. Nếu không, nó trả về NULL. Ví dụ:
SELECT 1 OR NULL, 0 OR NULL, NULL or NULL;
Kết quả:
+-----------+-----------+--------------+ | 1 OR NULL | 0 OR NULL | NULL or NULL | +-----------+-----------+--------------+ | 1 | NULL | NULL | +-----------+-----------+--------------+ 1 row in set (0.00 sec)
Bảng sau đây cho thấy kết quả của toán tử OR
khi kết hợp true (khác 0), false (không) và NULL:
TRUE | FALSE | NULL | |
TRUE | TRUE | TRUE | TRUE |
FALSE | TRUE | FALSE | NULL |
NULL | TRUE | NULL | NULL |
Toán tử OR của MySQL và short-circuit evaluation
Giống như toán tử AND
, toán tử OR
cũng bị đoản mạch. Nói cách khác, MySQL ngừng đánh giá các phần còn lại của biểu thức ngay khi nó có thể xác định kết quả. Ví dụ:
SELECT 1 = 1 OR 1 / 0;
Kết quả:
+----------------+ | 1 = 1 OR 1 / 0 | +----------------+ | 1 | +----------------+ 1 row in set (0.00 sec)
Vì biểu thức 1 = 1
luôn trả về 1 nên MySQL sẽ không đánh giá biểu thức 1/0. Và MySQL sẽ gặp lỗi nếu nó xảy ra.
Operator precedence
Khi một biểu thức chứa cả hai toán tử AND
và OR
, MySQL sử dụng quyền ưu tiên của toán tử để xác định thứ tự đánh giá của các toán tử. MySQL đánh giá toán tử với mức độ ưu tiên cao hơn trước.
Vì toán tử AND
có quyền ưu tiên cao hơn toán tử OR
, MySQL đánh giá toán tử AND
trước toán tử OR
. Ví dụ:
SELECT 1 OR 0 AND 0;
Kết quả:
+--------------+ | 1 OR 0 AND 0 | +--------------+ | 1 | +--------------+ 1 row in set (0.00 sec)
Làm thế nào nó hoạt động.
1 OR 0 AND 0 = 1 OR 0 = 1
Để thay đổi thứ tự đánh giá, bạn sử dụng dấu ngoặc đơn. Ví dụ:
SELECT (1 OR 0) AND 0;
Kết quả:
+----------------+ | (1 OR 0) AND 0 | +----------------+ | 0 | +----------------+ 1 row in set (0.00 sec)
Làm thế nào nó hoạt động.
(1 OR 0) AND 0 = 1 AND 0 = 0
Ví dụ về toán tử MySQL OR
Chúng tôi sẽ sử dụng bảng customers
từ cơ sở dữ liệu mẫu để trình diễn.
Truy vấn sau sử dụng toán tử OR
trong mệnh đề WHERE
để chọn tất cả khách hàng ở Hoa Kỳ hoặc Pháp:
SELECT customername, country FROM customers WHERE country = 'USA' OR country = 'France';
Kết quả:
+------------------------------+---------+ | customername | country | +------------------------------+---------+ | Atelier graphique | France | | Signal Gift Stores | USA | | La Rochelle Gifts | France | | Mini Gifts Distributors Ltd. | USA | | Mini Wheels Co. | USA | | Land of Toys Inc. | USA | | Saveley & Henriot, Co. | France | | Muscle Machine Inc | USA | | Diecast Classics Inc. | USA | ...
Ví dụ sau sử dụng toán tử OR
để chọn khách hàng sống ở Hoa Kỳ hoặc Pháp và có hạn mức tín dụng lớn hơn 100.000.
SELECT customername, country, creditLimit FROM customers WHERE(country = 'USA' OR country = 'France') AND creditlimit > 100000;
Kết quả:
+------------------------------+---------+-------------+ | customername | country | creditLimit | +------------------------------+---------+-------------+ | La Rochelle Gifts | France | 118200.00 | | Mini Gifts Distributors Ltd. | USA | 210500.00 | | Land of Toys Inc. | USA | 114900.00 | | Saveley & Henriot, Co. | France | 123900.00 | | Muscle Machine Inc | USA | 138500.00 | | Diecast Classics Inc. | USA | 100600.00 | | Collectable Mini Designs Co. | USA | 105000.00 | | Marta's Replicas Co. | USA | 123700.00 | | Mini Classics | USA | 102700.00 | | Corporate Gift Ideas Co. | USA | 105000.00 | | Online Diecast Creations Co. | USA | 114200.00 | +------------------------------+---------+-------------+ 11 rows in set (0.00 sec)
Lưu ý rằng nếu bạn không sử dụng dấu ngoặc đơn, truy vấn sẽ trả về những khách hàng ở Hoa Kỳ hoặc những khách hàng ở Pháp có hạn mức tín dụng lớn hơn 100.000.
SELECT customername, country, creditLimit FROM customers WHERE country = 'USA' OR country = 'France' AND creditlimit > 100000;
Kết quả:
+------------------------------+---------+-------------+ | customername | country | creditLimit | +------------------------------+---------+-------------+ | Signal Gift Stores | USA | 71800.00 | | La Rochelle Gifts | France | 118200.00 | | Mini Gifts Distributors Ltd. | USA | 210500.00 | | Mini Wheels Co. | USA | 64600.00 | | Land of Toys Inc. | USA | 114900.00 | | Saveley & Henriot, Co. | France | 123900.00 | | Muscle Machine Inc | USA | 138500.00 | | Diecast Classics Inc. | USA | 100600.00 | | Technics Stores Inc. | USA | 84600.00 | | American Souvenirs Inc | USA | 0.00 | ...
Tổng kết
- Toán tử
OR
kết hợp hai biểu thức Boolean và trả về true khi một trong hai biểu thức là true. Nếu không, nó trả về false. - MySQL đánh giá toán tử
OR
sau toán tửAND
nếu một biểu thức chứa cả toán tửAND
vàOR
. - Sử dụng dấu ngoặc đơn để thay đổi thứ tự ưu tiên của mệnh đề.
Bài viết liên quan:
- Seri MySQL cơ bản
- Câu lệnh SELECT FROM trong MySQL
- MySQL SELECT
- MySQL ORDER BY
- SELECT DISTRICT
- MySQL AND, Cách Sử Dụng Toán Tử AND Trong MySQL / Mariadb
Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-or/