Sử dụng OR trong Mysql / Mariadb như thế nào?

27/08/2022 - lượt xem
Chia sẻ
 
5/5 - (1 bình chọn)

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:

 

TRUEFALSENULL
TRUETRUETRUETRUE
FALSETRUEFALSENULL
NULLTRUENULLNULL

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:

Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-or/

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    5/5 - (1 bình chọn)

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm