การ Query ข้อมูลด้วย WHERE Clause
ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับ CRUD Operations ซึ่งเป็นพื้นฐานในการจัดการข้อมูลใน SQLite คราวนี้ เราจะมาเจาะลึกลงไปในการอ่านข้อมูล (Read) หรือการ Query ข้อมูล โดยใช้ `WHERE` Clause ซึ่งเป็นเครื่องมือสำคัญในการกรองข้อมูลที่เราต้องการจากตาราง
WHERE Clause คืออะไร?
WHERE Clause คือส่วนหนึ่งของคำสั่ง SELECT ที่ใช้ในการกำหนดเงื่อนไขในการเลือกข้อมูลจากตาราง เปรียบเสมือนการใส่ฟิลเตอร์ให้กับข้อมูล เพื่อให้เราได้เฉพาะข้อมูลที่ตรงตามเงื่อนไขที่เรากำหนดเท่านั้น
เหตุผลเชิงออกแบบ: ทำไมเราต้องมี WHERE Clause? ลองจินตนาการว่าคุณมีตารางข้อมูลลูกค้าเป็นหมื่นๆ ราย และคุณต้องการหารายชื่อลูกค้าที่อยู่ในกรุงเทพฯ เท่านั้น การอ่านข้อมูลทั้งหมดแล้วมาวนลูปเพื่อตรวจสอบทีละแถวเป็นวิธีที่ไม่ค่อยมีประสิทธิภาพ WHERE Clause ช่วยให้ฐานข้อมูลทำการกรองข้อมูลให้เราตั้งแต่แรก ทำให้การ Query เร็วขึ้นและใช้ทรัพยากรน้อยลง
แนวปฏิบัติที่ดี: ควรใช้ WHERE Clause ให้ชัดเจนและเฉพาะเจาะจงเท่าที่จะเป็นไปได้ เพื่อให้ได้ผลลัพธ์ที่ถูกต้องและมีประสิทธิภาพ
Operators ใน WHERE Clause
WHERE Clause ใช้ร่วมกับ Operators ต่างๆ เพื่อกำหนดเงื่อนไขในการกรองข้อมูล Operator ที่ใช้บ่อยมีดังนี้:
=(เท่ากับ): ใช้ตรวจสอบว่าค่าใน column เท่ากับค่าที่กำหนดหรือไม่>(มากกว่า): ใช้ตรวจสอบว่าค่าใน column มากกว่าค่าที่กำหนดหรือไม่<(น้อยกว่า): ใช้ตรวจสอบว่าค่าใน column น้อยกว่าค่าที่กำหนดหรือไม่>=(มากกว่าหรือเท่ากับ): ใช้ตรวจสอบว่าค่าใน column มากกว่าหรือเท่ากับค่าที่กำหนดหรือไม่<=(น้อยกว่าหรือเท่ากับ): ใช้ตรวจสอบว่าค่าใน column น้อยกว่าหรือเท่ากับค่าที่กำหนดหรือไม่!=หรือ<>(ไม่เท่ากับ): ใช้ตรวจสอบว่าค่าใน column ไม่เท่ากับค่าที่กำหนดหรือไม่LIKE: ใช้สำหรับการค้นหาข้อมูลที่มีรูปแบบคล้ายคลึงกัน (pattern matching)BETWEEN: ใช้ตรวจสอบว่าค่าใน column อยู่ในช่วงที่กำหนดหรือไม่IN: ใช้ตรวจสอบว่าค่าใน column อยู่ในรายการที่กำหนดหรือไม่NOT: ใช้เพื่อปฏิเสธเงื่อนไข
คำอธิบายเพิ่มเติม:
LIKEOperator:LIKEมักใช้กับ Wildcard Characters เช่น%(แทนอักขระใดๆ ก็ได้ 0 ตัวขึ้นไป) และ_(แทนอักขระใดๆ ก็ได้ 1 ตัว) ตัวอย่างเช่นWHERE name LIKE 'A%'จะดึงข้อมูลที่มีชื่อขึ้นต้นด้วย 'A'BETWEENOperator:BETWEENใช้สำหรับกำหนดช่วงของข้อมูล เช่นWHERE age BETWEEN 20 AND 30จะดึงข้อมูลที่มีอายุระหว่าง 20 ถึง 30 ปี (รวม 20 และ 30)INOperator:INใช้สำหรับตรวจสอบว่าค่าอยู่ในชุดของค่าที่กำหนด เช่นWHERE city IN ('Bangkok', 'Chiang Mai', 'Phuket')จะดึงข้อมูลที่มีเมืองเป็น Bangkok, Chiang Mai หรือ Phuket
ตัวอย่างการใช้งาน WHERE Clause
สมมติว่าเรามีตารางชื่อ customers ที่มีข้อมูลลูกค้าดังนี้:
CREATE TABLE customers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER,
city TEXT
);
INSERT INTO customers (name, age, city) VALUES
('Alice', 30, 'Bangkok'),
('Bob', 25, 'Chiang Mai'),
('Charlie', 35, 'Bangkok'),
('David', 28, 'Phuket'),
('Eve', 22, 'Bangkok');
เรามาดูตัวอย่างการใช้ WHERE Clause ในการ Query ข้อมูลกัน:
ตัวอย่างที่ 1: ค้นหาลูกค้าที่อยู่ในกรุงเทพฯ
SELECT * FROM customers WHERE city = 'Bangkok';
ผลลัพธ์:
id | name | age | city
---|---------|-----|--------
1 | Alice | 30 | Bangkok
3 | Charlie | 35 | Bangkok
5 | Eve | 22 | Bangkok
ตัวอย่างที่ 2: ค้นหาลูกค้าที่มีอายุมากกว่า 25 ปี
SELECT * FROM customers WHERE age > 25;
ผลลัพธ์:
id | name | age | city
---|---------|-----|--------
1 | Alice | 30 | Bangkok
3 | Charlie | 35 | Bangkok
4 | David | 28 | Phuket
ตัวอย่างที่ 3: ค้นหาลูกค้าที่มีชื่อขึ้นต้นด้วย 'A'
SELECT * FROM customers WHERE name LIKE 'A%';
ผลลัพธ์:
id | name | age | city
---|---------|-----|--------
1 | Alice | 30 | Bangkok
ตัวอย่างที่ 4: ค้นหาลูกค้าที่มีอายุระหว่าง 20 ถึง 30 ปี
SELECT * FROM customers WHERE age BETWEEN 20 AND 30;
ผลลัพธ์:
id | name | age | city
---|---------|-----|--------
1 | Alice | 30 | Bangkok
2 | Bob | 25 | Chiang Mai
4 | David | 28 | Phuket
5 | Eve | 22 | Bangkok
ตัวอย่างที่ 5: ค้นหาลูกค้าที่อยู่ในกรุงเทพฯ หรือเชียงใหม่
SELECT * FROM customers WHERE city IN ('Bangkok', 'Chiang Mai');
ผลลัพธ์:
id | name | age | city
---|---------|-----|--------
1 | Alice | 30 | Bangkok
2 | Bob | 25 | Chiang Mai
3 | Charlie | 35 | Bangkok
5 | Eve | 22 | Bangkok
ตัวอย่างที่ 6: ค้นหาลูกค้าที่ไม่อยู่ในกรุงเทพฯ
SELECT * FROM customers WHERE city != 'Bangkok';
ผลลัพธ์:
id | name | age | city
---|---------|-----|--------
2 | Bob | 25 | Chiang Mai
4 | David | 28 | Phuket
การใช้ AND และ OR ใน WHERE Clause
เราสามารถใช้ AND และ OR เพื่อรวมเงื่อนไขหลายๆ อย่างเข้าด้วยกันได้
AND: ใช้เมื่อต้องการให้ทุกเงื่อนไขเป็นจริงOR: ใช้เมื่อต้องการให้เงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง
ตัวอย่างที่ 7: ค้นหาลูกค้าที่อยู่ในกรุงเทพฯ และมีอายุมากกว่า 30 ปี
SELECT * FROM customers WHERE city = 'Bangkok' AND age > 30;
ผลลัพธ์:
id | name | age | city
---|---------|-----|--------
3 | Charlie | 35 | Bangkok
ตัวอย่างที่ 8: ค้นหาลูกค้าที่อยู่ในกรุงเทพฯ หรือมีอายุมากกว่า 30 ปี
SELECT * FROM customers WHERE city = 'Bangkok' OR age > 30;
ผลลัพธ์:
id | name | age | city
---|---------|-----|--------
1 | Alice | 30 | Bangkok
3 | Charlie | 35 | Bangkok
5 | Eve | 22 | Bangkok
ข้อควรระวัง: เมื่อใช้ AND และ OR ร่วมกัน ควรใช้เครื่องหมายวงเล็บ () เพื่อกำหนดลำดับการประมวลผลของเงื่อนไขให้ชัดเจน เพื่อป้องกันความผิดพลาด
ตัวอย่าง:
SELECT * FROM customers WHERE (city = 'Bangkok' OR city = 'Chiang Mai') AND age > 25;
คำสั่งนี้จะเลือกข้อมูลลูกค้าที่อยู่ในกรุงเทพฯ หรือเชียงใหม่ และมีอายุมากกว่า 25 ปี
สรุป
WHERE Clause เป็นเครื่องมือที่ทรงพลังในการ Query ข้อมูลจากฐานข้อมูล SQLite การเข้าใจ Operators ต่างๆ และการใช้ AND และ OR จะช่วยให้คุณสามารถ Query ข้อมูลได้อย่างแม่นยำและมีประสิทธิภาพ ในบทต่อไป เราจะเรียนรู้วิธีการใช้งาน SQLite ร่วมกับภาษา PHP เพื่อสร้างแอปพลิเคชันที่สามารถเข้าถึงและจัดการข้อมูลในฐานข้อมูลได้