Trong MySQL, AND và && **hoàn toàn tương đương** về mặt logic và kết quả. Sự khác biệt duy nhất:
AND: Từ khóa chuẩn SQL (ANSI/ISO standard)&&: Cú pháp mở rộng của MySQL (non-standard), giống C/C++/Java
Bảng chân lý (Truth Table)
Cả AND và && trả về: 1 (TRUE), 0 (FALSE), hoặc NULL.
| A | B | A AND B / A && B |
|---|---|---|
| 1 (TRUE) | 1 (TRUE) | 1 |
| 1 | 0 (FALSE) | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
| 1 | NULL | NULL |
| NULL | 1 | NULL |
| 0 | NULL | 0 |
| NULL | 0 | 0 |
| NULL | NULL | NULL |
Ví dụ minh họa
1. Toán hạng đều TRUE (khác 0)
SELECT 1 AND 1 AS Result; -- 1
SELECT 1 && 1 AS Result; -- 1
SELECT -10 AND -30 AS Result; -- 1 (số âm ≠ 0 → TRUE)
SELECT -10 && -30 AS Result; -- 1
2. Có toán hạng FALSE (0)
SELECT 1 AND 0 AS Result; -- 0
SELECT 1 && 0 AS Result; -- 0
SELECT -10 AND 0 AS Result; -- 0
SELECT 10 && 0 AS Result; -- 0
3. Có toán hạng NULL
SELECT NULL AND 1 AS Result; -- NULL
SELECT NULL && 1 AS Result; -- NULL
SELECT 1 AND NULL AS Result; -- NULL
SELECT 0 AND NULL AS Result; -- 0 (short-circuit: FALSE AND anything = FALSE)
Short-circuit evaluation (Đánh giá ngắn mạch)
MySQL tối ưu: Nếu toán hạng đầu tiên đủ quyết định kết quả, **không đánh giá toán hạng thứ hai**.
SELECT 0 AND (1/0); -- 0 (KHÔNG bị lỗi chia cho 0)
SELECT 1 && (1/0); -- NULL (lỗi chia cho 0 → NULL, không crash)
Độ ưu tiên (Precedence)
&&có độ ưu tiên **cao hơn**AND- Ví dụ:
a AND b || cvsa && b || ccó thể cho kết quả khác nhau - Khuyến nghị: **Luôn dùng ngoặc đơn**
()để rõ ràng
Khuyến nghị sử dụng
| Tình huống | Khuyên dùng |
|---|---|
| Code production, team làm việc chung | AND (chuẩn SQL, dễ đọc, portable) |
| Script cá nhân, quen C-style | && (ngắn gọn) |
| Stored Procedure/Function | AND (chuẩn, ít bug) |
| Dynamic SQL build bằng string | AND (an toàn parse) |
Tương tự: OR vs ||
OR: Chuẩn SQL||: Mở rộng MySQL (nhưng||là nối chuỗi trong Oracle/PostgreSQL/ANSI!)- Cảnh báo: Trong MySQL mặc định,
||=OR. Nếu bậtPIPES_AS_CONCATSQL_MODE,||thành nối chuỗi.
Tóm tắt
AND và && trong MySQL: Cùng logic, cùng kết quả, cùng xử lý NULL, cùng short-circuit.
Chỉ khác:ANDchuẩn SQL,&&dialect MySQL. Nên dùng AND.