ความแตกต่างพื้นฐาน
| Operator | เงื่อนไข | ผลลัพธ์ |
|---|---|---|
| AND | ทั้งสองเงื่อนไขต้อง TRUE พร้อมกัน | Strict (แถวลดลง) |
| OR | อย่างน้อยหนึ่งเงื่อนไข TRUE | Loose (เพิ่มแถว) |
ตัวอย่าง: ตาราง 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 A | Condition B | A AND B | A OR B |
|---|---|---|---|
| TRUE | TRUE | TRUE | TRUE |
| TRUE | FALSE | FALSE | TRUE |
| FALSE | TRUE | FALSE | TRUE |
| FALSE | FALSE | FALSE | FALSE |
| NULL | TRUE | NULL | TRUE |
| NULL | FALSE | FALSE | NULL |
| NULL | NULL | NULL | NULL |
หมายเหตุ: ใน 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 ให้อ่านง่ายขึ้น