MySQL Hướng dẫn sử dụng ký tự đại diện: Thích, KHÔNG Thích, Thoát, ( % ), ( _ )
Những gì đang có MySQL Ký tự đại diện?
MySQL Ký tự đại diện là các ký tự giúp tìm kiếm dữ liệu khớp với các tiêu chí phức tạp. Ký tự đại diện được sử dụng kết hợp với toán tử so sánh LIKE hoặc với toán tử so sánh NOT LIKE.
Tại sao nên sử dụng WildCards?
Nếu bạn quen 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 cách sử dụng mệnh đề SELECT và WHERE. Vậy tại sao lại sử dụng Wildcard?
Trước khi trả lời câu hỏi đó, chúng ta hãy xem một ví dụ. Giả sử 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ị tại thành phố Texas và muốn nhận được 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 cùng với mệnh đề WHERE để có đượ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, sử dụng ký tự đại diện sẽ đơn giản hóa truy vấn vì chúng ta có thể sử dụng thứ 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, 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 điều khiển dữ liệu của mình.
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ẫu của không (0) hoặc nhiều ký tự. Nó có cú pháp cơ bản sau.
SELECT statements... WHERE fieldname LIKE 'xxx%';
tại ĐÂY
- "Câu lệnh SELECT…” là lệnh SQL SELECT tiêu chuẩn.
- “WHERE” là từ khóa được sử dụng để áp dụng bộ lọc.
- “THÍCH” 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 được chỉ định nào, 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ừ 0 (XNUMX).
Để đánh giá đầy đủ tuyên bố 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ừ “code” làm 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 khớp mẫu trên cả hai mặt của từ “code”. 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 đoạn script trên trong MySQL bàn làm việc chống lại myflixdb cho chúng ta kết quả 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 “code” xuất hiện ở đầu hoặc cuối 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ẫu “mã” theo sau là bất kỳ số ký tự nào ở cuối.
Bây giờ chúng ta hãy sửa đổi tập lệnh trên để 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 đoạn script trên trong MySQL bàn làm việc đối với myflixdb cho chúng ta kết quả 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ố lượng 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 sang cuối mẫu đã chỉ định để khớp. Kịch bản sửa đổi được hiển thị dưới đây.
SELECT * FROM movies WHERE title LIKE 'code%';
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
Lưu ý 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ố lượng 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 với một ký tự. Giả sử chúng ta muốn tìm kiếm tất cả các bộ phim được phát hành trong những năm 200x trong đó x chính xác là một nhân vật có thể có bất kỳ giá trị nào. 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 bên dưới chọn lọc tất cả các phim đã ra mắt trong năm “200x”
SELECT * FROM movies WHERE year_released LIKE '200_';
Thực thi đoạn script trên trong MySQL bàn làm việc đối với myflixdb cho chúng ta kết quả 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 bộ phim có 200 lượt theo dõi của 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 bởi 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 kết quả. 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ả về 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.
Từ khóa thoát
Từ khóa ESCAPE được sử dụng để các ký tự khớp với mẫu thoát chẳng hạn như tỷ lệ 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ử 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 script hiển thị bên dưới để thực hiện điều đó.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Lưu ý dấu “ kép”%%” trong mệnh đề THÍCH, mệnh đề đầu tiên màu đỏ “%” được coi là một phần của chuỗi cần tìm kiếm. Cái còn lại được sử dụng để khớp với bất kỳ số lượng 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ổng kết
- Công cụ mạnh mẽ như & Wildcard giúp tìm kiếm dữ liệu khớp với các mẫu phức tạp.
- Có một số ký tự đại diện bao gồm phần trăm, dấu gạch dưới và danh sách ký tự (không được hỗ trợ bởi MySQL ) trong số những người khác
- Ký tự đại diện phần trăm được sử dụng để khớp với bất kỳ số lượng ký tự nào bắt đầu từ 0 (XNUMX) 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ự.