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

เลือกข้อมูลในช่วงเงื่อนไขหลายอย่างใน MySQL ด้วย WHERE

การเลือกข้อมูลในช่วงเงื่อนไขหลายอย่าง (Range + Boolean) ใช้ WHERE รวมเงื่อนไขด้วย AND/OR และออเปอเรเตอร์เปรียบเทียบ

สร้างตารางลูกค้า

mysql> create table DemoTable (
    CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    CustomerName varchar(200),
    CustomerAge int,
    isRegularCustomer bool
);

เพิ่มข้อมูล 6 ราย

mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer) values
('Chris',24,true),('Robert',26,false),('Mike',27,false),
('Larry',22,true),('Sam',30,true),('Carol',26,true);

ข้อมูลในตาราง

+------------+--------------+-------------+-------------------+
| CustomerId | CustomerName | CustomerAge | isRegularCustomer |
+------------+--------------+-------------+-------------------+
| 1          | Chris        | 24          | 1                 |
| 2          | Robert       | 26          | 0                 |
| 3          | Mike         | 27          | 0                 |
| 4          | Larry        | 22          | 1                 |
| 5          | Sam          | 30          | 1                 |
| 6          | Carol        | 26          | 1                 |
+------------+--------------+-------------+-------------------+

คำสั่ง: อายุ 24-27 และเป็น Regular Customer

mysql> select CustomerId, CustomerName, CustomerAge, isRegularCustomer 
from DemoTable 
where isRegularCustomer = true 
  AND CustomerAge >= 24 
  AND CustomerAge <= 27;

ผลลัพธ์

+------------+--------------+-------------+-------------------+
| CustomerId | CustomerName | CustomerAge | isRegularCustomer |
+------------+--------------+-------------+-------------------+
| 1          | Chris        | 24          | 1                 |
| 6          | Carol        | 26          | 1                 |
+------------+--------------+-------------+-------------------+

Operator เปรียบเทียบ

Boolean ใน MySQL

  • BOOL / BOOLEAN = Alias ของ TINYINT(1)
  • True = 1, False = 0
  • WHERE isRegularCustomer = true ≡ WHERE isRegularCustomer = 1 ≡ WHERE isRegularCustomer

Best Practice

  • ใช้括弧グループ化: WHERE (A AND B) OR C
  • วางเงื่อนไข Selective (กรองได้เยอะ) ไว้หน้า
  • Index บนคอลัมน์ใน WHERE: CREATE INDEX idx_age_regular ON DemoTable(CustomerAge, isRegularCustomer);
  • หลีกเลี่ยง Function บน Column: WHERE YEAR(date) = 2024 → ใช้ WHERE date >= '2024-01-01' AND date < '2025-01-01'
Operatorความหมายตัวอย่าง
=เท่ากับage = 25
<> / !=ไม่เท่ากับage <> 25
>มากกว่าage > 25
>=มากกว่าหรือเท่ากับage >= 25
<น้อยกว่าage < 25
<=น้อยกว่าหรือเท่ากับage <= 25
BETWEENในช่วง (Inclusive)age BETWEEN 24 AND 27
INอยู่ในรายการage IN (24,25,26)