Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ความแตกต่างระหว่าง AND และ OR ใน MySQL WHERE Clause

ความแตกต่างพื้นฐาน

Operatorเงื่อนไขผลลัพธ์
ANDทั้งสองเงื่อนไขต้อง TRUE พร้อมกันStrict (แถวลดลง)
ORอย่างน้อยหนึ่งเงื่อนไข TRUELoose (เพิ่มแถว)

ตัวอย่าง: ตาราง demo70

CREATE TABLE demo70 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20),
    age INT
);

INSERT INTO demo70 (name, age) VALUES
('John', 23), ('David', 21), ('Mike', 22),
('Chris', 20), ('John', 24), ('David', 22);

ข้อมูล

+----+-------+------+
| id | name  | age  |
+----+-------+------+
| 1  | John  | 23   |
| 2  | David | 21   |
| 3  | Mike  | 22   |
| 4  | Chris | 20   |
| 5  | John  | 24   |
| 6  | David | 22   |
+----+-------+------+

OR Query: name='John' OR age=22

SELECT * FROM demo70 WHERE name = 'John' OR age = 22;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
| 1  | John  | 23   |  -- name='John' TRUE
| 3  | Mike  | 22   |  -- age=22 TRUE
| 5  | John  | 24   |  -- name='John' TRUE
| 6  | David | 22   |  -- age=22 TRUE
+----+-------+------+

AND Query: name='John' AND age=22

SELECT * FROM demo70 WHERE name = 'John' AND age = 22;
Empty set (0.00 sec)

ไม่มีแถวไหนที่ name='John' และ age=22 พร้อมกัน

Truth Table

Condition ACondition BA AND BA OR B
TRUETRUETRUETRUE
TRUEFALSEFALSETRUE
FALSETRUEFALSETRUE
FALSEFALSEFALSEFALSE
NULLTRUENULLTRUE
NULLFALSEFALSENULL
NULLNULLNULLNULL

หมายเหตุ: ใน WHERE → TRUE เท่านั้นที่ผ่าน, FALSE และ NULL ถูกตัดออก

Operator Precedence (ลำดับความสำคัญ)

AND มี precedence สูงกว่า OR

WHERE a = 1 OR b = 2 AND c = 3
-- เทียบเท่า
WHERE a = 1 OR (b = 2 AND c = 3)

แนะนำ: ใช้วงเล็บเสมอ

WHERE (a = 1 OR b = 2) AND c = 3

กรณีศึกษา: ค้นหาผู้ใช้

-- ผิด: พบ User ที่ active หรือ (admin และ verified)
WHERE status = 'active' OR role = 'admin' AND verified = 1

-- ถูก: (Active) OR (Admin และ Verified)
WHERE status = 'active' OR (role = 'admin' AND verified = 1)

-- ถูก: (Active หรือ Admin) และ Verified
WHERE (status = 'active' OR role = 'admin') AND verified = 1

De Morgan's Laws (ใช้จัดรูปแบบ Query)

NOT (A AND B) = (NOT A) OR (NOT B)
NOT (A OR B)  = (NOT A) AND (NOT B)

ช่วยเขียน NOT IN, NOT EXISTS ให้อ่านง่ายขึ้น