본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

Clause IN คืออะไร?

บทความนี้ได้แนะนำ `IN` Clause ใน MySQL ซึ่งเป็นส่วนหนึ่งของ `WHERE` Clause ที่ใช้ตรวจสอบว่าค่าในคอลัมน์ตรงกับค่าใดค่าหนึ่งในชุดข้อมูลที่กำหนดหรือไม่ ทำให้การเขี...

MySQL IN Clause: ตรวจสอบค่าในชุดข้อมูลอย่างง่าย

หลังจากที่เราได้เรียนรู้การใช้ LIKE Clause เพื่อค้นหาข้อมูลด้วยรูปแบบ (Pattern) ที่ซับซ้อนกันไปแล้ว ในบทนี้เราจะมาทำความรู้จักกับ IN Clause อีกหนึ่งเครื่องมือสำคัญในการดึงข้อมูลจากฐานข้อมูล MySQL ของเรา IN Clause ช่วยให้เราตรวจสอบว่าค่าของคอลัมน์ที่เราสนใจนั้นตรงกับค่าใดค่าหนึ่งในชุดข้อมูลที่เรากำหนดไว้หรือไม่ ทำให้การเขียนเงื่อนไขการค้นหาข้อมูลมีความกระชับและเข้าใจง่ายยิ่งขึ้น

IN (value1, value2, ...) คืออะไร?

IN Clause เป็นส่วนหนึ่งของ WHERE Clause ใน SQL ที่ใช้สำหรับระบุว่าเราต้องการเลือกข้อมูลเฉพาะแถวที่ค่าในคอลัมน์ที่ระบุ ตรงกับค่าใดค่าหนึ่งในชุดข้อมูลที่เรากำหนดไว้ในวงเล็บ รูปแบบการใช้งานคือ:

SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, value3, ...);

โดยที่:

  • column1, column2, ... คือ คอลัมน์ที่เราต้องการเลือก
  • table_name คือ ชื่อตารางที่เราต้องการดึงข้อมูล
  • column_name คือ คอลัมน์ที่เราต้องการตรวจสอบค่า
  • value1, value2, value3, ... คือ ชุดข้อมูลที่เราต้องการตรวจสอบว่าค่าใน column_name ตรงกับค่าใดค่าหนึ่งในชุดข้อมูลนี้หรือไม่

ตัวอย่างการใช้งาน IN Clause

สมมติว่าเรามีตาราง customers ที่เก็บข้อมูลลูกค้า ประกอบด้วยคอลัมน์ customer_id, customer_name, city, และ country ดังนี้:

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(255),
    city VARCHAR(255),
    country VARCHAR(255)
);

INSERT INTO customers (customer_id, customer_name, city, country) VALUES
(1, 'Alfreds Futterkiste', 'Berlin', 'Germany'),
(2, 'Ana Trujillo Emparedados y helados', 'Mexico City', 'Mexico'),
(3, 'Antonio Moreno Taquería', 'Mexico City', 'Mexico'),
(4, 'Around the Horn', 'London', 'UK'),
(5, 'Berglunds snabbköp', 'Luleå', 'Sweden'),
(6, 'Blauer See Delikatessen', 'Mannheim', 'Germany');

หากเราต้องการดึงข้อมูลลูกค้าที่อาศัยอยู่ในเมือง 'Berlin', 'Mexico City', หรือ 'London' เราสามารถใช้ IN Clause ได้ดังนี้:

SELECT *
FROM customers
WHERE city IN ('Berlin', 'Mexico City', 'London');

ผลลัพธ์ที่ได้คือ:

+-------------+------------------------------------------+-------------+---------+
| customer_id | customer_name                            | city        | country |
+-------------+------------------------------------------+-------------+---------+
|           1 | Alfreds Futterkiste                      | Berlin      | Germany |
|           2 | Ana Trujillo Emparedados y helados      | Mexico City | Mexico  |
|           3 | Antonio Moreno Taquería                  | Mexico City | Mexico  |
|           4 | Around the Horn                          | London      | UK      |
+-------------+------------------------------------------+-------------+---------+

จะเห็นว่าเราได้ข้อมูลลูกค้าที่อาศัยอยู่ในเมืองที่เรากำหนดไว้ใน IN Clause เท่านั้น

การเปรียบเทียบหลายค่าด้วย IN Clause

IN Clause มีประโยชน์อย่างมากเมื่อเราต้องการเปรียบเทียบค่าของคอลัมน์กับชุดข้อมูลที่มีหลายค่า แทนที่จะต้องใช้ OR หลายครั้ง ตัวอย่างเช่น หากเราต้องการดึงข้อมูลลูกค้าที่มาจากประเทศ 'Germany' หรือ 'Mexico' เราสามารถเขียนได้ดังนี้:

SELECT *
FROM customers
WHERE country IN ('Germany', 'Mexico');

ซึ่งให้ผลลัพธ์เหมือนกับการเขียนด้วย OR ดังนี้:

SELECT *
FROM customers
WHERE country = 'Germany' OR country = 'Mexico';

แต่การใช้ IN Clause จะอ่านง่ายและจัดการได้สะดวกกว่า โดยเฉพาะอย่างยิ่งเมื่อมีค่าที่ต้องการเปรียบเทียบจำนวนมาก

การใช้ NOT IN Clause

นอกจาก IN Clause แล้ว เรายังสามารถใช้ NOT IN Clause เพื่อเลือกข้อมูลที่ *ไม่* ตรงกับค่าใดๆ ในชุดข้อมูลที่กำหนดได้ ตัวอย่างเช่น หากเราต้องการดึงข้อมูลลูกค้าที่ไม่ได้อาศัยอยู่ในเมือง 'Berlin', 'Mexico City', หรือ 'London' เราสามารถเขียนได้ดังนี้:

SELECT *
FROM customers
WHERE city NOT IN ('Berlin', 'Mexico City', 'London');

ผลลัพธ์ที่ได้คือ:

+-------------+-----------------------+--------+---------+
| customer_id | customer_name         | city   | country |
+-------------+-----------------------+--------+---------+
|           5 | Berglunds snabbköp    | Luleå  | Sweden  |
|           6 | Blauer See Delikatessen | Mannheim | Germany |
+-------------+-----------------------+--------+---------+

IN Clause กับ Subquery

IN Clause ยังสามารถใช้ร่วมกับ Subquery ได้ ซึ่งช่วยให้เราสามารถดึงข้อมูลจากตารางหนึ่ง โดยอ้างอิงจากข้อมูลในอีกตารางหนึ่ง ตัวอย่างเช่น สมมติว่าเรามีตาราง orders ที่เก็บข้อมูลการสั่งซื้อ ประกอบด้วยคอลัมน์ order_id, customer_id, และ order_date:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

INSERT INTO orders (order_id, customer_id, order_date) VALUES
(1, 1, '2023-01-15'),
(2, 2, '2023-02-20'),
(3, 1, '2023-03-10'),
(4, 5, '2023-04-05'),
(5, 3, '2023-05-12');

หากเราต้องการดึงข้อมูลลูกค้าที่เคยสั่งซื้อสินค้า เราสามารถใช้ IN Clause ร่วมกับ Subquery ได้ดังนี้:

SELECT *
FROM customers
WHERE customer_id IN (SELECT customer_id FROM orders);

Subquery (SELECT customer_id FROM orders) จะดึงรายการ customer_id ทั้งหมดที่ปรากฏในตาราง orders จากนั้น IN Clause จะตรวจสอบว่า customer_id ในตาราง customers ตรงกับค่าใดค่าหนึ่งในรายการที่ได้จาก Subquery หรือไม่

ข้อควรระวังในการใช้งาน IN Clause

  • ประสิทธิภาพ: การใช้ IN Clause กับชุดข้อมูลขนาดใหญ่อาจส่งผลต่อประสิทธิภาพของ Query ได้ ในกรณีเช่นนี้ การใช้ JOIN อาจเป็นทางเลือกที่ดีกว่า
  • ค่า NULL: IN Clause จะไม่ทำงานอย่างถูกต้องเมื่อมีค่า NULL ในชุดข้อมูลที่เปรียบเทียบ หากต้องการตรวจสอบว่ามีค่า NULL หรือไม่ ควรใช้ IS NULL หรือ IS NOT NULL แทน
  • จำนวนค่าในชุดข้อมูล: แม้ว่าโดยทั่วไปแล้ว MySQL จะรองรับค่าจำนวนมากใน IN Clause แต่การมีค่ามากเกินไปอาจทำให้ Query อ่านยากและจัดการได้ยาก

สรุป

IN Clause เป็นเครื่องมือที่มีประโยชน์ในการตรวจสอบว่าค่าของคอลัมน์ตรงกับค่าใดค่าหนึ่งในชุดข้อมูลที่กำหนดไว้หรือไม่ ช่วยให้การเขียนเงื่อนไขการค้นหาข้อมูลมีความกระชับและเข้าใจง่ายยิ่งขึ้น เราได้เรียนรู้การใช้งาน IN Clause ทั้งแบบปกติ และแบบที่ใช้ร่วมกับ Subquery รวมถึงข้อควรระวังในการใช้งาน หวังว่าบทความนี้จะเป็นประโยชน์ในการพัฒนาทักษะการเขียน SQL ของคุณ

ในบทความต่อไป เราจะมาเรียนรู้เกี่ยวกับ BETWEEN Clause ซึ่งเป็นอีกหนึ่งเครื่องมือที่ช่วยให้เราสามารถเลือกข้อมูลในช่วงที่กำหนดได้ อย่าพลาดติดตาม!

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기