Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn MySQL lọc tên đầy đủ bằng LIKE 2 lần (FirstName và LastName)

Tìm kiếm tên đầy đủ: Lọc FirstName và LastName riêng biệt với LIKE

Khi cột lưu tên đầy đủ (FullName), dùng 2 điều kiện LIKE kết hợp AND để lọc chính xác FirstName và LastName, dù thứ tự hoặc khoảng trắng có thể khác nhau.

1. Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(30)
);
mysql> INSERT INTO DemoTable (StudentName) VALUES
    ('John Smith'), ('David Miller'), ('Carol Taylor'),
    ('John Doe'), ('Chris Brown'), ('Adam Doe');

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+-----------+---------------+
| StudentId | StudentName   |
+-----------+---------------+
| 1         | John Smith    |
| 2         | David Miller  |
| 3         | Carol Taylor  |
| 4         | John Doe      |
| 5         | Chris Brown   |
| 6         | Adam Doe      |
+-----------+---------------+

3. Truy vấn: Tìm 'John' VÀ 'Doe' (FirstName=John, LastName=Doe)

mysql> SELECT * FROM DemoTable
    WHERE StudentName LIKE '%John%' AND StudentName LIKE '%Doe%';

4. Kết quả

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 4         | John Doe    |
+-----------+-------------+

Giải thích:

  • LIKE '%John%': Chứa 'John' ở bất kỳ vị trí (John Smith, John Doe)
  • LIKE '%Doe%': Chứa 'Doe' (John Doe, Adam Doe)
  • AND: Phải thỏa MẢI 2 → chỉ 'John Doe'

Hạn chế của cách này:

  • False positive: 'Johnny Doe', 'John Doer' cũng khớp
  • Không xử lý được: 'Doe John' (thứ tự đảo), 'John Doe' (2 space)
  • Case-insensitive mặc định (collation _ci)

Cách chính xác hơn (MySQL 8.0+ REGEXP):

WHERE StudentName REGEXP '^John[[:space:]]+Doe$'

Thiết kế tốt hơn: Tách 2 cột FirstName, LastName để query chính xác, index hiệu quả.