MySQL Wildcards là gì?
MySQL Wildcards là các ký tự giúp dữ liệu tìm kiếm khớp với các tiêu chí phức tạp. Các ký tự đại diện được sử dụng cùng với toán tử so sánh LIKE hoặc với toán tử so sánh NOT LIKE.
Tại sao sử dụng WildCards?
Nếu bạn đã quen với việc sử dụng SQL, bạn có thể nghĩ rằng bạn có thể tìm kiếm bất kỳ dữ liệu phức tạp nào bằng mệnh đề SELECT và WHERE. Vậy tại sao lại sử dụng Ký tự đại diện?
Trước khi trả lời câu hỏi đó, chúng ta hãy xem một ví dụ. Giả sử rằng bộ phận tiếp thị của thư viện video Myflix thực hiện các chương trình khuyến mãi tiếp thị ở thành phố Texas và muốn nhận được một số phản hồi về số lượng thành viên
được đăng ký từ Texas, bạn có thể sử dụng câu lệnh SELECT sau đây cùng với mệnh đề WHERE để nhận được thông tin mong muốn.
SELECT * FROM members WHERE postal_address = 'Austin , TX' OR postal_address = Dallas , TX OR postal_address = Iola,TX OR postal_adress = Houston ,TX';
Như bạn có thể thấy từ truy vấn trên, "mệnh đề WHERE" trở nên phức tạp. Tuy nhiên, việc sử dụng các ký tự đại diện sẽ đơn giản hóa truy vấn vì chúng ta có thể sử dụng một cái gì đó đơn giản như tập lệnh được hiển thị bên dưới.
SELECT * FROM members WHERE postal_address like '% TX';
Nói tóm lại, các ký tự đại diện cho phép chúng tôi phát triển các công cụ tìm kiếm mạnh mẽ vào các ứng dụng theo hướng dữ liệu của chúng tôi.
Các loại ký tự đại diện
% tỉ lệ phần trăm
% ký tự phần trăm được sử dụng để chỉ định một mẫu gồm không (0) hoặc nhiều ký tự . Nó có cú pháp cơ bản sau.
SELECT statements… WHERE fieldname LIKE 'xxx%';
ĐÂY
- "Câu lệnh SELECT…" là lệnh SELECT tiêu chuẩn của SQL.
- "WHERE" là từ khóa được sử dụng để áp dụng bộ lọc.
- "LIKE" là toán tử so sánh được sử dụng cùng với các ký tự đại diện
- 'xxx' là bất kỳ mẫu bắt đầu nào được chỉ định, chẳng hạn như một ký tự đơn trở lên và "%" khớp với bất kỳ số ký tự nào bắt đầu từ không (0).
Để cảm nhận hết câu nói trên, chúng ta hãy xem một ví dụ thực tế
Giả sử chúng ta muốn lấy tất cả các phim có từ "mã" như một phần của tiêu đề, chúng ta sẽ sử dụng ký tự đại diện phần trăm để thực hiện đối sánh mẫu trên cả hai mặt của từ "mã". Dưới đây là câu lệnh SQL có thể được sử dụng để đạt được kết quả mong muốn.
SELECT * FROM movies WHERE title LIKE '%code%';
Thực thi tập lệnh trên trong MySQL workbench so với myflixdb cho chúng ta kết quả được hiển thị bên dưới.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
7 | Davinci Code | NULL | NULL | 6 |
Lưu ý rằng ngay cả khi từ khóa tìm kiếm "mã" xuất hiện ở đầu hoặc cuối của tiêu đề, nó vẫn được trả về trong tập kết quả của chúng tôi. Điều này là do mã của chúng tôi bao gồm bất kỳ số ký tự nào ở đầu sau đó khớp với "mã" mẫu, theo sau là bất kỳ số ký tự nào ở cuối.
Bây giờ hãy sửa đổi tập lệnh ở trên của chúng tôi để chỉ bao gồm ký tự đại diện phần trăm ở đầu tiêu chí tìm kiếm.
SELECT * FROM movies WHERE title LIKE '%code';
Thực thi tập lệnh trên trong MySQL workbench so với myflixdb cho chúng ta kết quả được hiển thị bên dưới.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
7 | Davinci Code | NULL | NULL | 6 |
Lưu ý rằng chỉ có một bản ghi đã được trả về từ cơ sở dữ liệu. Điều này là do mã của chúng tôi khớp với bất kỳ số ký tự nào ở đầu tiêu đề phim và chỉ nhận được các bản ghi kết thúc bằng mẫu "mã".
Bây giờ chúng ta hãy chuyển ký tự đại diện phần trăm đến cuối của mẫu được chỉ định để được so khớp. Tập lệnh sửa đổi được hiển thị bên dưới.
SELECT * FROM movies WHERE title LIKE 'code%';Thực thi tập lệnh trên trong MySQL workbench so với myflixdb cho chúng ta kết quả được hiển thị bên dưới.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
Lưu ý rằng chỉ có một bản ghi đã được trả về từ cơ sở dữ liệu. Điều này là do mã của chúng tôi khớp với tất cả các tiêu đề bắt đầu bằng mẫu "mã" theo sau là bất kỳ số ký tự nào.
_ ký tự đại diện gạch dưới
Ký tự đại diện gạch dưới được sử dụng để khớp chính xác một ký tự . Giả sử rằng chúng ta muốn tìm kiếm tất cả các bộ phim được phát hành vào những năm 200x trong đó x là chính xác một ký tự có thể có giá trị bất kỳ. Chúng tôi sẽ sử dụng ký tự đại diện gạch dưới để đạt được điều đó. Kịch bản dưới đây chọn tất cả các bộ phim đã được phát hành trong năm "200x"
SELECT * FROM movies WHERE year_released LIKE '200_';
Thực thi tập lệnh trên trong MySQL workbench so với myflixdb cho chúng ta kết quả được hiển thị bên dưới.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
9 | Honey mooners | Jhon Shultz | 2005 | 8 |
Lưu ý rằng chỉ những phim có 200 nhân vật theo sau bởi bất kỳ nhân vật nào trong năm thực địa được phát hành mới được trả về trong tập kết quả của chúng tôi. Điều này là do ký tự đại diện gạch dưới khớp với mẫu 200, theo sau là bất kỳ ký tự đơn nào
Không thích
Toán tử logic NOT có thể được sử dụng cùng với các ký tự đại diện để trả về các hàng không khớp với mẫu đã chỉ định.
Giả sử chúng ta muốn lấy những bộ phim không được phát hành vào năm 200x. Chúng tôi sẽ sử dụng toán tử logic NOT cùng với ký tự đại diện gạch dưới để nhận được kết quả của chúng tôi. Dưới đây là kịch bản thực hiện điều đó.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
8 | Underworld-Awakeninh | Michahel Eal | 2012 | 6 |
Chỉ lưu ý những phim không bắt đầu bằng 200 trong năm đã phát hành mới được trả lại trong tập kết quả của chúng tôi. Điều này là do chúng tôi đã sử dụng toán tử logic NOT trong tìm kiếm mẫu ký tự đại diện của chúng tôi.
Từ khóa thoát.
Từ khóa ESCAPE được sử dụng để thoát các ký tự đối sánh mẫu chẳng hạn như phần trăm (%) và dấu gạch dưới (_) nếu chúng tạo thành một phần của dữ liệu.
Giả sử rằng chúng ta muốn kiểm tra chuỗi "67%" mà chúng ta có thể sử dụng;
LIKE '67#%%' ESCAPE '#';
Nếu chúng ta muốn tìm kiếm bộ phim "67% Guilty", chúng ta có thể sử dụng đoạn mã hiển thị bên dưới để làm điều đó.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Lưu ý " %% " kép trong mệnh đề LIKE, dấu đầu tiên có màu đỏ " % " được coi là một phần của chuỗi được tìm kiếm. Cái còn lại được sử dụng để khớp với bất kỳ số ký tự nào theo sau.
Truy vấn tương tự cũng sẽ hoạt động nếu chúng ta sử dụng một cái gì đó như
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Tóm lược
- Like & Wildcards các công cụ mạnh mẽ giúp dữ liệu tìm kiếm khớp với các mẫu phức tạp.
- Có một số ký tự đại diện bao gồm tỷ lệ phần trăm, dấu gạch dưới và danh sách biểu đồ (không được MySQL hỗ trợ) trong số những ký tự khác
- Ký tự đại diện phần trăm được sử dụng để khớp với bất kỳ số ký tự nào bắt đầu từ không (0) trở lên.
- Ký tự đại diện gạch dưới được sử dụng để khớp chính xác một ký tự.