บทนำ
การรวมเงื่อนไข OR และ AND ในคำสั่ง WHERE ต้องคำนึงถึงลำดับความสำคัญของตัวดำเนินการ (Operator Precedence) โดย AND จะถูกประเมินก่อน OR เสมอ
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20),
-> Age INT
-> );
Query OK, 0 rows affected (0.63 sec)
mysql> INSERT INTO DemoTable(Name, Age) VALUES('John', 21);
mysql> INSERT INTO DemoTable(Name, Age) VALUES(NULL, 20);
mysql> INSERT INTO DemoTable(Name, Age) VALUES('David', 23);
mysql> INSERT INTO DemoTable(Name, Age) VALUES('Carol', NULL);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 1 | John | 21 |
| 2 | NULL | 20 |
| 3 | David | 23 |
| 4 | Carol | NULL |
+----+-------+------+
4 rows in set (0.00 sec)
คำสั่งกับเงื่อนไข OR และ AND
mysql> SELECT * FROM DemoTable
-> WHERE Name='David' OR (Name IS NULL AND Age=20);
ผลลัพธ์
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 2 | NULL | 20 |
| 3 | David | 23 |
+----+-------+------+
2 rows in set (0.00 sec)
คำอธิบาย
คำสั่งนี้จะเลือกแถวที่:
- Name เป็น 'David' หรือ
- Name เป็น NULL และ Age เป็น 20
สังเกตการใช้วงเล็บ (Name IS NULL AND Age=20) เพื่อกำหนดลำดับการประเมินผลให้ชัดเจน