1. Giới thiệu

Wildcards trong MySQL là các ký tự đặc biệt được sử dụng với câu lệnh LIKE để tìm kiếm các mẫu ký tự trong cơ sở dữ liệu. Wildcards rất hữu ích khi bạn cần tìm kiếm các bản ghi dựa trên chuỗi ký tự không xác định chính xác, ví dụ như tìm kiếm các từ bắt đầu bằng một chữ cái cụ thể hoặc chứa một chuỗi con nhất định.

Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết cách sử dụng SQL Wildcards với các ví dụ minh họa, để giúp bạn dễ dàng áp dụng trong các truy vấn MySQL.

2. Các ký tự Wildcards trong MySQL

Trong SQL, hai ký tự wildcards chính thường được sử dụng với câu lệnh LIKE:

  • %: Đại diện cho bất kỳ số lượng ký tự nào (bao gồm cả không có ký tự nào).
  • _: Đại diện cho một ký tự đơn.

3. Bảng dữ liệu giả định

Giả sử chúng ta có bảng employees với các thông tin như sau:

employee_idfirst_namelast_namedepartmentsalaryage
1JohnDoeSales150000035
2JaneSmithMarketing170000028
3BobJohnsonSales130000040
4AliceBrownHR200000045
5CharlieGreenMarketing180000025

4. Cách sử dụng SQL Wildcards

a. Ký tự % đại diện cho bất kỳ số lượng ký tự nào

Ký tự % được sử dụng để đại diện cho bất kỳ chuỗi ký tự nào, bao gồm cả chuỗi rỗng. Bạn có thể dùng % ở bất kỳ vị trí nào trong mẫu tìm kiếm của mình.

1. Tìm kiếm chuỗi bắt đầu bằng một ký tự cụ thể

Nếu bạn muốn tìm tất cả các bản ghi mà chuỗi bắt đầu bằng một ký tự hoặc một chuỗi cụ thể, bạn có thể sử dụng % ở cuối chuỗi.

Ví dụ 1: Tìm tất cả các nhân viên có tên bắt đầu bằng "J"

shell
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE 'J%';

Kết quả:

first_namelast_name
JohnDoe
JaneSmith

2. Tìm kiếm chuỗi kết thúc bằng một ký tự cụ thể

Nếu bạn muốn tìm tất cả các bản ghi mà chuỗi kết thúc bằng một ký tự cụ thể, bạn có thể sử dụng % ở đầu:

Ví dụ 2: Tìm tất cả nhân viên có họ kết thúc bằng "n"

shell
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE '%n';

Kết quả:

first_namelast_name
JohnJohnson
AliceBrown
CharlieGreen

3. Tìm kiếm chuỗi chứa một chuỗi con cụ thể

Sử dụng % ở cả hai bên để tìm kiếm các chuỗi chứa chuỗi con ở bất kỳ vị trí nào.

Ví dụ 3: Tìm tất cả nhân viên có họ chứa chuỗi "ee"

shell
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE '%ee%';

Kết quả:

first_namelast_name
CharlieGreen

b. Ký tự _ đại diện cho một ký tự đơn

Ký tự _ đại diện cho một ký tự đơn, và nó được sử dụng khi bạn muốn khớp một ký tự cụ thể tại một vị trí nhất định.

1. Tìm kiếm với một ký tự đơn bất kỳ

Sử dụng _ để đại diện cho một ký tự tại một vị trí nhất định.

Ví dụ 4: Tìm tất cả nhân viên có tên gồm 4 ký tự và kết thúc bằng "e"

shell
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE '___e';

Kết quả:

first_namelast_name
JaneSmith

c. Sử dụng NOT LIKE để tìm kiếm mẫu không khớp

Bạn có thể sử dụng NOT LIKE để tìm các bản ghi không khớp với mẫu ký tự nhất định.

Ví dụ 5: Tìm tất cả nhân viên không có họ bắt đầu bằng "S"

shell
SELECT first_name, last_name
FROM employees
WHERE last_name NOT LIKE 'S%';

Kết quả:

first_namelast_name
JohnDoe
BobJohnson
AliceBrown
CharlieGreen

5. Các ví dụ về sử dụng SQL Wildcards

Ví dụ 1: Tìm tất cả các nhân viên có tên bắt đầu bằng "A"

shell
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE 'A%';

Ví dụ 2: Tìm tất cả nhân viên có họ chứa "son"

shell
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE '%son%';

Ví dụ 3: Tìm tất cả nhân viên có tên dài 5 ký tự

shell
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE '_____';

Ví dụ 4: Tìm tất cả nhân viên có họ bắt đầu bằng "B" và kết thúc bằng "n"

shell
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE 'B%n';

Ví dụ 5: Tìm tất cả nhân viên không có tên chứa ký tự "e"

shell
SELECT first_name, last_name
FROM employees
WHERE first_name NOT LIKE '%e%';

6. Một số lưu ý khi sử dụng SQL Wildcards

a. Không phân biệt chữ hoa, chữ thường

Trong hầu hết các hệ quản trị cơ sở dữ liệu, câu lệnh LIKEkhông phân biệt chữ hoa và chữ thường. Ví dụ, LIKE 'A%' sẽ trả về cả các giá trị bắt đầu bằng "A" và "a".

b. Hiệu suất khi sử dụng Wildcards

Khi sử dụng LIKE với Wildcards, đặc biệt là khi sử dụng % ở đầu mẫu ('%abc'), hiệu suất có thể bị ảnh hưởng, đặc biệt với các bảng lớn. Cân nhắc sử dụng chỉ mục (index) để cải thiện hiệu suất.

c. Sử dụng toán tử ESCAPE để xử lý ký tự đặc biệt

Nếu bạn cần tìm kiếm các giá trị chứa các ký tự % hoặc _ thực sự, bạn có thể sử dụng toán tử ESCAPE để bỏ qua ký tự đặc biệt này.

Ví dụ:

shell
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE '100\%_profit' ESCAPE '\';

Câu lệnh này tìm kiếm chuỗi chứa chính xác "100%_profit", với ký tự %_ được xử lý như ký tự thông thường.

Kết luận

SQL Wildcards là một công cụ mạnh mẽ để tìm kiếm chuỗi ký tự trong cơ sở dữ liệu, cho phép bạn tìm kiếm linh hoạt các mẫu ký tự khác nhau. Sử dụng kết hợp LIKE với %_ giúp bạn tìm kiếm các chuỗi theo nhiều mẫu khác nhau. Wildcards đặc biệt hữu ích khi làm việc với dữ liệu chuỗi và cần thực hiện các truy vấn phức tạp.

Hãy thử áp dụng các ví dụ trong bài viết này vào các bài tập và dự án thực tế của bạn trên CodeTutHub để nắm vững hơn về cách làm việc với SQL Wildcards!