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

MySQL: ตรวจสอบค่ามีอยู่หรือไม่ด้วย SELECT 1


คำอธิบาย

ใช้ SELECT 1 FROM table WHERE condition เพื่อตรวจสอบว่ามีข้อมูลตรงเงื่อนไขหรือไม่ คืนค่า 1 ถ้ามี, ไม่คืนอะไรถ้าไม่มี (เร็วกว่า SELECT *)

รูปแบบไวยากรณ์

SELECT 1 FROM yourTableName WHERE yourColumnName = yourValue;

ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable ( 
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    StudentName varchar(40), 
    StudentAge int ); 
Query OK, 0 rows affected (0.46 sec)

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

mysql> insert into DemoTable(StudentName, StudentAge) values('Chris', 21); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentName, StudentAge) values('David', 20); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(StudentName, StudentAge) values('Bob', 22); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(StudentName, StudentAge) values('Tom', 19); 
Query OK, 1 row affected (0.15 sec)

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

mysql> select * from DemoTable;

ผลลัพธ์:

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1         | Chris       | 21         |
| 2         | David       | 20         |
| 3         | Bob         | 22         |
| 4         | Tom         | 19         |
+-----------+-------------+------------+
4 rows in set (0.00 sec)

คิวรี่ตรวจสอบว่ามี 'Bob' อยู่หรือไม่

mysql> select 1 from DemoTable where StudentName = 'Bob';

ผลลัพธ์

+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

คำอธิบาย

  • คืนค่า 1 (ค่าคงที่) ไม่ใช่ข้อมูลจากตาราง
  • หากไม่พบ จะคืน Empty set (0 rows)
  • เร็วกว่า SELECT * เพราะไม่ต้องอ่านคอลัมน์อื่น
  • เหมาะสำหรับ EXISTS Subquery: WHERE EXISTS (SELECT 1 FROM ...)

การใช้งานใน Application

-- PHP PDO
$stmt = $pdo->prepare("SELECT 1 FROM users WHERE email = ?");
$stmt->execute([$email]);
$exists = $stmt->fetchColumn(); // false หรือ '1'

SELECT 1 vs SELECT COUNT(*)

  • SELECT 1: หยุดทันทีที่เจอแถวแรก (LIMIT 1 Implicit)
  • SELECT COUNT(*): ต้องนับทุกแถวที่ Match