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

ดึงหลายแถวจาก MySQL ตามค่าเฉพาะในคอลัมน์ (WHERE Filter)

SELECT พร้อม WHERE: กรองแถวตามค่าในคอลัมน์เฉพาะ

คำสั่ง SELECT ... WHERE column = value เป็นพื้นฐานการดึงข้อมูลเฉพาะที่ต้องการ

สร้างตารางและข้อมูล (นักเรียน + วิชา)

mysql> CREATE TABLE DemoTable1528 (
    -> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName VARCHAR(20),
    -> StudentSubject VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.53 sec)

mysql> INSERT INTO DemoTable1528(StudentName, StudentSubject) VALUES
    -> ('Chris', 'MongoDB'), ('Bob', 'MySQL'), ('David', 'Java'),
    -> ('Carol', 'C'), ('Sam', 'Java'), ('Mike', 'Java'), ('Adam', 'MySQL');
Query OK, 7 rows affected

ข้อมูลทั้งหมด

+-----------+-------------+----------------+
| StudentId | StudentName | StudentSubject |
+-----------+-------------+----------------+
|         1 | Chris       | MongoDB        |
|         2 | Bob         | MySQL          |
|         3 | David       | Java           |
|         4 | Carol       | C              |
|         5 | Sam         | Java           |
|         6 | Mike        | Java           |
|         7 | Adam        | MySQL          |
+-----------+-------------+----------------+

คำสั่ง: ดึงนักเรียนที่เรียน 'Java'

mysql> SELECT StudentId, StudentName, StudentSubject 
    -> FROM DemoTable1528 
    -> WHERE StudentSubject = 'Java';

ผลลัพธ์

+-----------+-------------+----------------+
| StudentId | StudentName | StudentSubject |
+-----------+-------------+----------------+
|         3 | David       | Java           |
|         5 | Sam         | Java           |
|         6 | Mike        | Java           |
+-----------+-------------+----------------+

ขยาย: ใช้ IN สำหรับหลายค่า

-- เรียน Java หรือ MySQL
WHERE StudentSubject IN ('Java', 'MySQL')

-- เรียน Java และ อายุมากกว่า 20 (ถ้ามีคอลัมน์ Age)
WHERE StudentSubject = 'Java' AND StudentAge > 20

Index Optimization

-- เพิ่ม Index บนคอลัมน์ที่ WHERE บ่อย
CREATE INDEX idx_subject ON DemoTable1528(StudentSubject);

-- ตรวจสอบด้วย EXPLAIN
EXPLAIN SELECT * FROM DemoTable1528 WHERE StudentSubject = 'Java';
-- type: ref, key: idx_subject, rows: ~N (ไม่ใช่ Full Scan)

Parameterized Query (Application Level)

-- Java PreparedStatement
String sql = "SELECT StudentId, StudentName, StudentSubject FROM DemoTable1528 WHERE StudentSubject = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "Java");
ResultSet rs = ps.executeQuery();

สรุป

  • WHERE column = value - เบื้องต้น สำคัญที่สุด
  • ใช้ Index บนคอลัมน์ WHERE เพื่อ Performance
  • ใช้ Prepared Statement ใน Application ป้องกัน SQL Injection
  • IN, BETWEEN, LIKE, IS NULL เป็น Operator อื่นๆ ที่ใช้บ่อย