การใช้ WHERE หลายเงื่อนไขด้วย AND ใน MySQL
เมื่อต้องการค้นหาแถวที่ตรงตามเงื่อนไขหลายอย่างพร้อมกัน ให้ใช้ AND เชื่อมเงื่อนไขแต่ละอย่างในคำสั่ง WHERE
รูปแบบคำสั่ง
SELECT * FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
ตัวอย่าง: ค้นหานักเรียนที่ Id=4, ชื่อ Carol, อายุ 21
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(50),
StudentAge INT
);
INSERT INTO DemoTable (StudentName, StudentAge) VALUES
('Chris', 21), ('David', 23), ('Bob', 22), ('Carol', 21);
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1 | Chris | 21 |
| 2 | David | 23 |
| 3 | Bob | 22 |
| 4 | Carol | 21 |
+-----------+-------------+------------+
3. ค้นหาด้วย 3 เงื่อนไข
SELECT * FROM DemoTable
WHERE StudentId = 4
AND StudentName = 'Carol'
AND StudentAge = 21;
ผลลัพธ์:
+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 4 | Carol | 21 |
+-----------+-------------+------------+
การทำงานของ AND
- ทุกเงื่อนไขต้องเป็น TRUE พร้อมกัน (Logical AND)
- MySQL ใช้ Short-circuit evaluation: หากเงื่อนไขแรก FALSE จะไม่ตรวจสอบต่อ
- ลำดับเงื่อนไขส่งผลต่อประสิทธิภาพ: วางเงื่อนไขที่ Selective ที่สุด (กรองได้เยอะที่สุด) ไปก่อน
การใช้ OR (หรือ)
SELECT * FROM DemoTable
WHERE StudentName = 'Chris' OR StudentName = 'Bob';
หา Chris หรือ Bob (ได้ 2 แถว)
ผสม AND และ OR (ต้องใช้วงเล็บ)
SELECT * FROM DemoTable
WHERE (StudentName = 'Chris' OR StudentName = 'Bob')
AND StudentAge > 20;
ใช้ IN() แทน OR หลายค่า
SELECT * FROM DemoTable
WHERE StudentName IN ('Chris', 'Bob')
AND StudentAge > 20;
Index และประสิทธิภาพ
- สร้าง Composite Index ตามลำดับเงื่อนไขที่ใช้บ่อย:
INDEX idx_name_age (StudentName, StudentAge) - EXPLAIN เพื่อดูว่า Index ถูกใช้หรือไม่
- หากเงื่อนไขบน Primary Key (StudentId) → เร็วที่สุด (Point Lookup)