Clause WHERE คืออะไร?
หลังจากที่เราได้เรียนรู้วิธีการดึงข้อมูลจากตารางด้วยคำสั่ง SELECT ในบทที่แล้ว คราวนี้เราจะมาเจาะลึกถึงวิธีการกรองข้อมูลที่เราต้องการให้แม่นยำยิ่งขึ้น โดยใช้สิ่งที่เรียกว่า WHERE Clause
WHERE Clause คือส่วนหนึ่งของคำสั่ง SELECT ที่ช่วยให้เราสามารถกำหนดเงื่อนไข (condition) ในการดึงข้อมูลได้ นั่นหมายความว่า เราสามารถบอก MySQL ได้ว่า "ให้ดึงข้อมูลเฉพาะแถวที่ตรงตามเงื่อนไขที่กำหนดเท่านั้น"
โครงสร้างของ WHERE Clause
โดยทั่วไป โครงสร้างของ WHERE Clause จะเป็นดังนี้:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT column1, column2, ...: คือส่วนที่เราเลือกคอลัมน์ที่ต้องการดึงข้อมูล (เหมือนกับที่เราเรียนไปในบทที่แล้ว)FROM table_name: คือส่วนที่เรากำหนดชื่อตารางที่เราต้องการดึงข้อมูลWHERE condition: คือส่วนที่เรากำหนดเงื่อนไขในการกรองข้อมูล นี่คือหัวใจหลักของบทเรียนนี้
WHERE Condition
condition ใน WHERE Clause คือนิพจน์ (expression) ที่ให้ผลลัพธ์เป็นจริง (TRUE) หรือเท็จ (FALSE) MySQL จะดึงข้อมูลเฉพาะแถวที่ทำให้ condition เป็นจริงเท่านั้น
condition มักจะประกอบด้วย:
- ชื่อคอลัมน์ (column name)
- ตัวดำเนินการ (operator) เช่น
=,>,<,>=,<=,!=,<> - ค่า (value) ที่เราต้องการเปรียบเทียบ
ตัวอย่างเช่น:
WHERE age > 18
ในตัวอย่างนี้ age คือชื่อคอลัมน์, > คือตัวดำเนินการ (มากกว่า), และ 18 คือค่าที่เราต้องการเปรียบเทียบ MySQL จะดึงข้อมูลเฉพาะแถวที่ค่าในคอลัมน์ age มากกว่า 18 เท่านั้น
ตัวอย่างการใช้งาน WHERE Clause
สมมติว่าเรามีตารางชื่อ customers ที่มีข้อมูลลูกค้าดังนี้:
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(255),
age INT,
city VARCHAR(255)
);
INSERT INTO customers (id, name, age, city) VALUES
(1, 'Alice', 30, 'New York'),
(2, 'Bob', 25, 'London'),
(3, 'Charlie', 35, 'Paris'),
(4, 'David', 28, 'New York'),
(5, 'Eve', 22, 'London');
ตัวอย่างที่ 1: ดึงข้อมูลลูกค้าที่อาศัยอยู่ใน New York
SELECT *
FROM customers
WHERE city = 'New York';
ผลลัพธ์:
+----+-------+-----+----------+
| id | name | age | city |
+----+-------+-----+----------+
| 1 | Alice | 30 | New York |
| 4 | David | 28 | New York |
+----+-------+-----+----------+
คำอธิบาย: คำสั่งนี้จะดึงข้อมูลทั้งหมดจากตาราง customers เฉพาะแถวที่ค่าในคอลัมน์ city เท่ากับ 'New York'
ตัวอย่างที่ 2: ดึงข้อมูลลูกค้าที่มีอายุมากกว่า 25 ปี
SELECT *
FROM customers
WHERE age > 25;
ผลลัพธ์:
+----+---------+-----+-------+
| id | name | age | city |
+----+---------+-----+-------+
| 1 | Alice | 30 | New York |
| 3 | Charlie | 35 | Paris |
| 4 | David | 28 | New York |
+----+---------+-----+-------+
คำอธิบาย: คำสั่งนี้จะดึงข้อมูลทั้งหมดจากตาราง customers เฉพาะแถวที่ค่าในคอลัมน์ age มากกว่า 25
ตัวอย่างที่ 3: ดึงข้อมูลชื่อและเมืองของลูกค้าที่มีอายุน้อยกว่าหรือเท่ากับ 25 ปี
SELECT name, city
FROM customers
WHERE age <= 25;
ผลลัพธ์:
+------+--------+
| name | city |
+------+--------+
| Bob | London |
| Eve | London |
+------+--------+
คำอธิบาย: คำสั่งนี้จะดึงเฉพาะคอลัมน์ name และ city จากตาราง customers เฉพาะแถวที่ค่าในคอลัมน์ age น้อยกว่าหรือเท่ากับ 25
Operators ใน WHERE Clause
นอกเหนือจากตัวดำเนินการ =, >, <, >=, <= แล้ว ยังมีตัวดำเนินการอื่นๆ ที่เราสามารถใช้ใน WHERE Clause ได้อีกมากมาย ซึ่งเราจะมาดูกันในรายละเอียด
Comparison Operators:
=: เท่ากับ>: มากกว่า<: น้อยกว่า>=: มากกว่าหรือเท่ากับ<=: น้อยกว่าหรือเท่ากับ!=หรือ<>: ไม่เท่ากับ
Logical Operators:
AND: และ (ทั้งสองเงื่อนไขต้องเป็นจริง)OR: หรือ (เงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง)NOT: ไม่ (เปลี่ยนค่าจริงเป็นเท็จ และเท็จเป็นจริง)
Special Operators:
BETWEEN: อยู่ในช่วง (Inclusive)LIKE: เปรียบเทียบรูปแบบ (Pattern Matching)IN: อยู่ในชุดของค่าIS NULL: เป็นค่าว่าง (NULL)IS NOT NULL: ไม่เป็นค่าว่าง (NULL)
เราจะมาดูตัวอย่างการใช้งานตัวดำเนินการเหล่านี้:
ตัวอย่างที่ 4: ใช้ AND เพื่อกรองข้อมูล
SELECT *
FROM customers
WHERE city = 'New York' AND age > 28;
ผลลัพธ์:
+----+-------+-----+----------+
| id | name | age | city |
+----+-------+-----+----------+
| 1 | Alice | 30 | New York |
+----+-------+-----+----------+
คำอธิบาย: คำสั่งนี้จะดึงข้อมูลลูกค้าที่อาศัยอยู่ใน New York และมีอายุมากกว่า 28 ปี
ตัวอย่างที่ 5: ใช้ OR เพื่อกรองข้อมูล
SELECT *
FROM customers
WHERE city = 'London' OR age > 30;
ผลลัพธ์:
+----+---------+-----+----------+
| id | name | age | city |
+----+---------+-----+----------+
| 2 | Bob | 25 | London |
| 3 | Charlie | 35 | Paris |
| 5 | Eve | 22 | London |
+----+---------+-----+----------+
คำอธิบาย: คำสั่งนี้จะดึงข้อมูลลูกค้าที่อาศัยอยู่ใน London หรือมีอายุมากกว่า 30 ปี
ตัวอย่างที่ 6: ใช้ NOT เพื่อกรองข้อมูล
SELECT *
FROM customers
WHERE NOT city = 'New York';
ผลลัพธ์:
+----+---------+-----+--------+
| id | name | age | city |
+----+---------+-----+--------+
| 2 | Bob | 25 | London |
| 3 | Charlie | 35 | Paris |
| 5 | Eve | 22 | London |
+----+---------+-----+--------+
คำอธิบาย: คำสั่งนี้จะดึงข้อมูลลูกค้าที่ไม่ได้อาศัยอยู่ใน New York
Comparison กับ String
เมื่อเราเปรียบเทียบค่าในคอลัมน์ที่เป็น String (ข้อความ) กับค่าที่เราต้องการ จะต้องใส่ค่าที่เราต้องการเปรียบเทียบไว้ในเครื่องหมาย Single quote (') หรือ Double quote (") เช่น WHERE city = 'New York' หรือ WHERE city = "New York"
สิ่งที่ควรระวังคือ การใช้เครื่องหมาย Single quote หรือ Double quote จะต้องสอดคล้องกัน หากเริ่มต้นด้วย Single quote ก็ต้องจบด้วย Single quote เช่นกัน
ในบทต่อไป เราจะมาเจาะลึกถึง Operators อื่นๆ ใน WHERE Clause เช่น LIKE, IN, BETWEEN และการใช้งานที่ซับซ้อนยิ่งขึ้น เพื่อให้เราสามารถกรองข้อมูลได้อย่างมีประสิทธิภาพมากยิ่งขึ้น