ใช้ IN() เพื่อค้นหาข้อมูลที่ตรงกับรายการค่าที่ระบุ
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
Id int,
FirstName varchar(20),
Gender ENUM('Male','Female') );
Query OK, 0 rows affected (1.73 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values(1,'Chris','Male'); Query OK, 1 row affected (0.47 sec) mysql> insert into DemoTable values(10,'Emma','Female'); Query OK, 1 row affected (1.88 sec) mysql> insert into DemoTable values(9,'Emma','Male'); Query OK, 1 row affected (0.70 sec) mysql> insert into DemoTable values(11,'Isabella','Female'); Query OK, 1 row affected (0.46 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+------+-----------+--------+ | Id | FirstName | Gender | +------+-----------+--------+ | 1 | Chris | Male | | 10 | Emma | Female | | 9 | Emma | Male | | 11 | Isabella | Female | +------+-----------+--------+ 4 rows in set (0.00 sec)
คิวรี่ค้นหา ID 1 และ 11
mysql> select *from DemoTable where Id IN(1,11);
ผลลัพธ์:
+------+-----------+--------+ | Id | FirstName | Gender | +------+-----------+--------+ | 1 | Chris | Male | | 11 | Isabella | Female | +------+-----------+--------+ 2 rows in set (0.00 sec)
การใช้ IN() กับ Subquery
-- หานักเรียนที่มีคะแนนสูงสุด SELECT * FROM students WHERE id IN (SELECT student_id FROM scores WHERE score = (SELECT MAX(score) FROM scores));
IN() กับ Tuple (MySQL 8.0+)
SELECT * FROM DemoTable WHERE (Id, FirstName) IN ((1, 'Chris'), (11, 'Isabella'));
ประสิทธิภาพ
- IN() กับรายการค่าคงที่: Optimizer แปลงเป็น Range scan หรือ Hash lookup
- IN() กับ Subquery: อาจช้า หาก Subquery ใหญ่ ควรใช้ JOIN หรือ EXISTS แทน
- NOT IN: ระวัง NULL ใน subquery (ดูบทความก่อนหน้า)