Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Khác biệt giữa AND và && trong MySQL

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.

ABA AND B / A && B
1 (TRUE)1 (TRUE)1
10 (FALSE)0
010
000
1NULLNULL
NULL1NULL
0NULL0
NULL00
NULLNULLNULL

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 || c vs a && b || c có 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ốngKhuyên dùng
Code production, team làm việc chungAND (chuẩn SQL, dễ đọc, portable)
Script cá nhân, quen C-style&& (ngắn gọn)
Stored Procedure/FunctionAND (chuẩn, ít bug)
Dynamic SQL build bằng stringAND (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ật PIPES_AS_CONCAT SQL_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: AND chuẩn SQL, && dialect MySQL. Nên dùng AND.