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 อื่นๆ ที่ใช้บ่อย