Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การค้นหาข้อมูลที่ตรงเงื่อนไขด้วย IN() ใน MySQL

ใช้ 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 (ดูบทความก่อนหน้า)