Biểu thức chính quy giúp tìm kiếm dữ liệu phù hợp với tiêu chí phức tạp. Nếu bạn đã từng làm việc với các ký tự đại diện trước đây, bạn có thể đặt câu hỏi là tại sao lại phải học các biểu thức chính quy trong khi bạn có thể nhận được kết quả tương tự khi sử dụng các ký tự đại diện.
Bởi vì khi so sánh với ký tự đại diện, các biểu thức chính quy cho phép chúng ta tìm kiếm dữ liệu phù hợp với những tiêu chí phức tạp hơn nhiều. Do đó, cùng Gitiho tìm hiểu chi tiết trong bài này nhé!
Cú pháp cơ bản của biểu thức chính quy như sau:
SELECT column_name
FROM table_name
WHERE column_name REGEXP 'pattern';
Trong đó:
Ví dụ: Tìm các tên bắt đầu bằng "J":
SELECT name FROM employees WHERE name REGEXP '^J';
Tìm các tên kết thúc bằng "n":
SELECT name FROM employees WHERE name REGEXP 'n$';
Tìm các tên chứa "a", "e", hoặc "i":
SELECT name FROM employees WHERE name REGEXP '[aei]';
Ký tự | Mô tả | Ví dụ |
* | Dấu hoa thị (*) được sử dụng để khớp với 0 hoặc nhiều lần xuất hiện của mẫu trong chuỗi. | SELECT * FROM movies WHERE title REGEXP ‘da*’; sẽ trả về tất cả các phim có tiêu đề có chứa ký tự “da”. Ví dụ: Da Vinci Code , Daddy’s Little Girls. |
+ | Dấu cộng (+) được sử dụng để khớp một hoặc nhiều lần xuất hiện của mẫu trong chuỗi. | SELECT * FROM `movies` WHERE `title` REGEXP ‘mon+’; sẽ trả về tất cả các phim có tiêu đề chứa ký tự “mon”. Ví dụ: Angels and Demons. |
? | Dấu hỏi (?) được dùng để khớp với 0 hoặc một lần xuất hiện của mẫu trong chuỗi. | SELECT * FROM `categories` WHERE `category_name` REGEXP ‘com?’; sẽ trả về tất cả các thể loại phim có chứa ký tự “com”. Ví dụ: comedy , romantic comedy. |
. | Dấu chấm (.) được dùng để khớp với bất kỳ ký tự đơn nào trừ dấu xuống dòng | SELECT * FROM movies WHERE `year_released` REGEXP ‘200.’; sẽ trả về tất cả các phim có năm phát hành bắt đầu bằng ký tự “200” và theo sau bởi bất kỳ ký tự nào. Ví dụ: 2005, 2007, 2008,… |
[abc] | Charlist [abc] được sử dụng để khớp bất kỳ ký tự nào trong dấu ngoặc vuông [ ] | SELECT * FROM `movies` WHERE `title` REGEXP ‘[vwxyz]’; sẽ trả về tất cả các phim có tiêu đề chứa bất kỳ ký tự nào trong “vwxyz”. Ví dụ: X-Men, Da Vinci Code, … |
[^abc] | Charlist [^abc] được sử dụng để khớp với bất kỳ ký tự nào không có trong dấu ngoặc vuông [ ] | SELECT * FROM `movies` WHERE `title` REGEXP ‘^[^vwxyz]’; sẽ trả về danh sách tất cả các phim có tiêu đề chứa các ký tự khác với các ký tự trong “vwxyz”. |
[A-Z] | [A-Z] được sử dụng để khớp với bất kỳ chữ in hoa nào | SELECT * FROM `members` WHERE `postal_address` REGEXP ‘[A-Z]’; sẽ trả về tất cả thành viên có địa chỉ chứa bất kỳ ký tự nào từ A-Z. Ví dụ: Janet Jones với mã số thành viên là 1. |
[a-z] | [a-z] được sử dụng để khớp với bất kỳ chữ thường nào | SELECT * FROM `members` WHERE `postal_address` REGEXP ‘[a-z]’; sẽ trả về tất cả các thành viên có địa chị chứa bất kỳ ký tự nào từ a đến z. Ví dụ: Janet Jones với mã số thành viên là 1. |
[0-9] | [0-9] được sử dụng để khớp với bất kỳ chữ số nào từ 0 đến 9. | SELECT * FROM `members` WHERE `contact_number` REGEXP ‘[0-9]’ sẽ trả về tất cả các thành viên có số liên lạc có chứa các ký tự “[0-9]” .Ví dụ: Robert Phil. |
^ | Dấu mũ (^) được sử dụng để bắt đầu khớp tại vị trí đầu tiên. | SELECT * FROM `movies` WHERE `title` REGEXP ‘^[cd]’; trả về tất cả các phim có tiêu đề bắt đầu bằng bất kỳ ký tự nào trong “cd”. Ví dụ: Code Name Black, Daddy’s Little Girls và Da Vinci Code. |
| | Thanh dọc (|) được sử dụng cho điều kiện hoặc. | SELECT * FROM `movies` WHERE `title` REGEXP ‘^[cd]|^[u]’; trả về tất cả các phim có tự đề bắt đầu bằng bất kỳ ký tự nào trong “cd” hoặc “u”. Ví dụ: Code Name Black, Daddy’s Little Girl, Da Vinci Code và Underworld – Awakening. |
[[:<:]] | [[:<:]] khớp với các từ đầu tiên. | SELECT * FROM `movies` WHERE `title` REGEXP ‘[[:<:]]for’; trả về tất cả các phim có tiêu đề bắt đầu bằng ký tự “for”. Ví dụ: Forgetting Sarah Marshal. |
[[:>:]] | [[:>:]] khớp với các từ cuối | SELECT * FROM `movies` WHERE `title` REGEXP ‘ack[[:>:]]’; trả về tất cả các phim có tiêu đề kết thúc bằng “ack” . Ví dụ: Code Name Black. |
[:class:] | [:class:] khớp với một lớp ký tự. Tức là [:alpha:] để khớp với chữ cái, [:space:] để khớp với khoảng trắng, [:punct:] để khớp với dấu chấm và [:upper:] để khớp với chữ in hoa. | SELECT * FROM `movies` WHERE `title` REGEXP ‘[:alpha:]’; trả về tất cả các phim có tiêu đề chỉ chứa các chữ cái. Ví dụ: Forgetting Sarah Marshal, X-Men,… Bộ phim như Pirates of the Caribbean 4 sẽ bị bỏ qua bởi truy vấn này. |
Dấu gạch chéo (\) được sử dụng để làm ký tự thoát, dùng để thoát khỏi ký tự tiếp theo. Nếu chúng ta muốn sử dụng nó như một phần của mẫu trong biểu thức chính quy, chúng ta nên sử dụng dấu gạch chéo kép (\\).
Trên đây là hướng dẫn về cách sử dụng cú pháp biểu thức chính quy (Regular Expressions - REGEXP) trong SQL. Hy vọng nó sẽ giúp ích cho công việc của bạn.
Ngoài ra bạn có thể truy cập ngay https://gitiho.com/ để tìm hiểu thêm nhiều các khóa học hay về tin học văn phòng: Excel, Power Point, lập trình VBA, lập trình C#, SQL, thiết kế đồ họa… Có rất nhiều ưu đãi hấp dẫn đang chờ bạn.
Các bạn có thể tham khảo thêm các bài viết khác về cách sử dụng MySQL:
Hướng dẫn sử dụng câu lệnh SELECT trong MySQL qua các ví dụ
Khóa học giúp bạn làm chủ ngôn ngữ truy vấn dữ liệu phổ biến SQL từ cơ bản đến nâng cao. Từ đó có thể tự tin xây dựng, truy vấn, và tối ưu hóa các cơ sở dữ liệu phức tạp, hỗ trợ phân tích, làm báo cáo và ra quyết định kinh doanh một cách hiệu quả.
Đăng ký học thử để trải nghiệm ngay hôm nay!