AND vs && ใน MySQL: ตัวดำเนินการตรรกะ
ความแตกต่างหลัก: AND เป็นมาตรฐาน SQL (ANSI) ส่วน && เป็น syntax เฉพาะ MySQL (MySQL-specific)
นอกจากนี้ ทั้งคู่ทำงานเหมือนกันทุกประการ (Functionally identical)
ตารางความจริง (Truth Table)
| A | B | A AND B | A && B |
|---|---|---|---|
| 1 (TRUE) | 1 (TRUE) | 1 | 1 |
| 1 (TRUE) | 0 (FALSE) | 0 | 0 |
| 0 (FALSE) | 1 (TRUE) | 0 | 0 |
| 0 (FALSE) | 0 (FALSE) | 0 | 0 |
| NULL | 1 | NULL | NULL |
| NULL | 0 | 0 | 0 |
| NULL | NULL | NULL | NULL |
ตัวอย่างการใช้งาน
-- ทั้งคู่ให้ผลลัพธ์เหมือนกัน
SELECT 1 AND 1; -- 1
SELECT 1 && 1; -- 1
SELECT 1 AND 0; -- 0
SELECT 1 && 0; -- 0
SELECT NULL AND 1; -- NULL
SELECT NULL && 1; -- NULL
SELECT -10 AND -30; -- 1 (non-zero = TRUE)
SELECT -10 && -30; -- 1
Operator Precedence (ลำดับความสำคัญ)
&& มี precedence สูงกว่า AND:
-- เหมือนกัน
SELECT 1 AND 0 OR 1; -- (1 AND 0) OR 1 = 1
SELECT 1 && 0 || 1; -- (1 && 0) || 1 = 1
-- แตกต่างกันเมื่อผสมใช้
SELECT 1 AND 0 || 1; -- 1 AND (0 || 1) = 1 (|| สูงกว่า AND)
SELECT 1 && 0 OR 1; -- (1 && 0) OR 1 = 1 (&& สูงกว่า OR)
คำแนะนำ
- ใช้ AND / OR - มาตรฐาน SQL, portable ข้ามฐานข้อมูล, อ่านง่าย
- หลีกเลี่ยง && / || - MySQL only, precedence แตกต่าง, สับสน
- ใน Application code ให้ใช้ AND/OR ตามมาตรฐาน
- MySQL มี
XOR(exclusive OR) เป็นมาตรฐาน SQL ด้วย
สรุป
ไม่มีความแตกต่างทางตรรกะ (Logic) ระหว่าง AND และ && เพียงแค่:
- AND = Standard SQL
- && = MySQL extension
- Precedence ต่างกัน (&& สูงกว่า AND)