Search LIKE là gì

Mệnh đề LIKE trong SQL được sử dụng để so sánh một giá trị với các giá trị tương tự bởi sử dụng các toán tử wildcard. Có hai wildcard được sử dụng kết hợp với toán tử LIKE là:

  • Ký hiệu phần trăm [%]

  • Dấu gạch dưới [_]

Ký hiệu phần trăm biểu diễn 0, 1 hoặc nhiều ký tự. Ký tự dấu gạch dưới biểu diễn một số hoặc một ký tự đơn.

Cú pháp

Cú pháp cơ bản của các toán tử % và _ trong SQL là:

SELECT FROM ten_bang WHERE column LIKE 'XXXX%' hoac SELECT FROM ten_bang WHERE column LIKE '%XXXX%' hoac SELECT FROM ten_bang WHERE column LIKE 'XXXX_' hoac SELECT FROM ten_bang WHERE column LIKE '_XXXX' hoac SELECT FROM ten_bang WHERE column LIKE '_XXXX_'

Bạn có thể kết hợp N điều kiện bởi sử dụng toán tử AND hoặc OR. Ở đây, XXX có thể là bất kỳ giá trị số hoặc chuỗi nào.

Quảng cáo

Bảng dưới liệt kê một số ví dụ minh họa một phần mệnh đề WHERE có các mệnh đề LIKE khác nhau với các toán tử '%' và '_'.

LệnhMiêu tả
WHERE HOCPHI LIKE '4%'Tìm kiếm bất kỳ giá trị nào bắt đầu với 4
WHERE HOCPHI LIKE '%4%'Tìm kiếm bất kỳ giá trị nào mà có 4 ở bất kỳ vị trí nào
WHERE HOCPHI LIKE '_00%'Tìm kiếm bất kỳ giá trị nào có 00 trong vị trí thứ hai và ba
WHERE HOCPHI LIKE '4_%_%'Tìm kiếm bất kỳ giá trị nào mà bắt đầu với 4 và có độ dài tối thiểu là 3 ký tự
WHERE HOCPHI LIKE '%4'Tìm kiếm bất kỳ giá trị nào mà kết thúc với 4
WHERE HOCPHI LIKE '_4%0'Tìm kiếm bất kỳ giá trị nào mà có 2 trong vị trí thứ hai và kết thúc với 3
WHERE HOCPHI LIKE '4___0'Tìm kiếm bất kỳ giá trị nào có 5 chữ số bắt đầu với 4 và kết thúc với 0

Sau đây là một ví dụ thực sự, bạn theo dõi bảng SINHVIEN có các bản ghi sau:

+----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4 | | 2 | Viet | 19 | DTVT | 3 | | 3 | Thanh | 18 | KTDN | 4 | | 4 | Nhan | 19 | CK | 4.5 | | 5 | Huong | 20 | TCNH | 5 | +----+---------+-----+-----------+---------+

Ví dụ sau sẽ hiển thị tất cả bản ghi với điều kiện HOCPHI bắt đầu với '4'.

SQL> SELECT * FROM SINHVIEN WHERE HOCPHI LIKE '4%';

Quảng cáo

Ví dụ trên sẽ cho kết quả:

+----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4 | | 3 | Thanh | 18 | KTDN | 4 | | 4 | Nhan | 19 | CK | 4.5 | +----+----------+-----+-----------+----------+

SELECT * FROM name_table WHERE name_column LIKE chuỗi_muốn_tìm;

Chúng ta có một bảng sinh_vien như sau:

[Bạn có thể bấm vào đây để download câu lệnh tạo bảng như bên dưới]

Full_name Gender Age City
Nguyen Thanh Nhan Nam 19 Can Tho
Pham Thu Huong Nu 20 Vinh Long
Nguyen Nhu Ngoc Nu 20 Soc Trang
Bui Thanh Bao Nam 19 Soc Trang
Le My Nhan Nu 22 Can Tho
Tan Thuc Bao Nam 35 An Giang
Trinh Giao Kim Nam 44 Bac Lieu

Ví dụ:

Truy xuất những sinh viên có họ tên là "Tan Thuc Bao"

SELECT * FROM sinh_vien WHERE Full_name LIKE "Tan Thuc Bao";

Sau khi thực thi, MySQl trả về một bảng kết quả như dưới đây:

Full_name Gender Age City
Tan Thuc Bao Nam 35 An Giang

Các ký tự đại diện trong quy tắc tìm kiếm chuỗi

Ký tự đại diện được dùng để đại diện cho một hoặc nhiều ký tự trong một chuỗi.

Dưới đây là danh sách các ký tự đại diện:

Ký tự đại diện Mô tả
% Đại diện cho không hoặc nhiều ký tự
_ Đại kiện cho một ký tự

Một số ví dụ

Chúng ta tiếp tục sử dụng bảng sinh_vien ở phía trên để làm ví dụ.

Ví dụ 1:

Truy xuất những sinh viên mà họ tên bắt đầu bằng chữ "Nguyen"

SELECT * FROM sinh_vien WHERE Full_name LIKE "Nguyen%";

Sau khi thực thi, MySQl trả về một bảng kết quả như dưới đây:

Full_name Gender Age City
Nguyen Thanh Nhan Nam 19 Can Tho
Nguyen Nhu Ngoc Nu 20 Soc Trang

Ví dụ 2:

Truy xuất những sinh viên mà họ tên kết thúc bằng chữ "Bao" hoặc "Huong"

SELECT * FROM sinh_vien WHERE [Full_name LIKE "%Bao"] OR [Full_name LIKE "%Huong"];

Sau khi thực thi, MySQl trả về một bảng kết quả như dưới đây:

Full_name Gender Age City
Pham Thu Huong Nu 20 Vinh Long
Bui Thanh Bao Nam 19 Soc Trang
Tan Thuc Bao Nam 35 An Giang

Ví dụ 3:

Truy xuất những sinh viên mà họ tên có chứa chữ "Thanh"

SELECT * FROM sinh_vien WHERE Full_name LIKE "%Thanh%";

Sau khi thực thi, MySQl trả về một bảng kết quả như dưới đây:

Full_name Gender Age City
Nguyen Thanh Nhan Nam 19 Can Tho
Bui Thanh Bao Nam 19 Soc Trang

Ví dụ 4:

Truy xuất những sinh viên mà trong họ tên có chứa ít nhất 2 chữ T

SELECT * FROM sinh_vien WHERE Full_name LIKE "%T%T%";

Sau khi thực thi, MySQl trả về một bảng kết quả như dưới đây:

Full_name Gender Age City
Tan Thuc Bao Nam 35 An Giang

Ví dụ 5:

Truy xuất những sinh viên mà ký tự thứ 2 trong họ tên là "e"

SELECT * FROM sinh_vien WHERE Full_name LIKE "_e%";

Sau khi thực thi, MySQl trả về một bảng kết quả như dưới đây:

Full_name Gender Age City
Le My Nhan Nu 22 Can Tho

Ví dụ 6:

Truy xuất những sinh viên mà 3 ký tự ở vị trí 345 trong họ tên là "inh" hoặc 2 ký tự gần ký tự cuối là "go"

SELECT * FROM sinh_vien WHERE [Full_name LIKE "__inh%"] OR [Full_name LIKE "%go_"];

Sau khi thực thi, MySQl trả về một bảng kết quả như dưới đây:

Full_name Gender Age City
Nguyen Nhu Ngoc Nu 20 Soc Trang
Trinh Giao Kim Nam 44 Bac Lieu

Từ khóa NOT LIKE

Cách sử dụng từ khóa NOT LIKE với các ký tự đại diện cũng giống như cách sử dụng từ khóa LIKE.

Tuy nhiên về mặt ý nghĩa thì từ khóa NOT LIKE trái ngược với từ khóa LIKE.

Từ khóa NOT LIKE có nghĩa là KHÔNG GIỐNG VỚI CHUỖI MUỐN TÌM.

Ví dụ:

Truy xuất những sinh viên mà họ tên không có chứa chữ "Thanh"

SELECT * FROM sinh_vien WHERE Full_name NOT LIKE "%Thanh%";

Sau khi thực thi, MySQl trả về một bảng kết quả như dưới đây:

Full_name Gender Age City
Pham Thu Huong Nu 20 Vinh Long
Nguyen Nhu Ngoc Nu 20 Soc Trang
Le My Nhan Nu 22 Can Tho
Tan Thuc Bao Nam 35 An Giang
Trinh Giao Kim Nam 44 Bac Lieu

Sự khác biệt thực sự là phương pháp quét. Đối với tìm kiếm toàn văn bản, các từ [thuật ngữ] được sử dụng làm khóa băm - mỗi từ trong số đó được liên kết với một mảng tài liệu mà các khóa [thuật ngữ] xuất hiện trong đó. Nó như thế này:

Document sets = {d1, d2, d3, d4, ... dn} Term sets = {t1, t2, t3, .. tn}

Bây giờ, ma trận tài liệu thuật ngữ [thành viên thuật ngữ của tài liệu nào] có thể được biểu diễn dưới dạng:

t1 -> {d1, d5, d9,.. dn} t2 -> {d11, d50, d2,.. dn} t3 -> {d23, d67, d34,.. dn} : tn -> {d90, d87, d57,.. dn}

Khi yêu cầu xuất hiện yêu cầu "Lấy cho tôi tất cả tài liệu có chứa từ / thuật ngữ t1" - thì bộ tài liệu {d1, d5, d9,.. dn} được trả lại.

Bạn có thể hack một lược đồ bảng đã được chuẩn hóa để lưu trữ tài liệu - mỗi hàng trong bảng MySQL sẽ được coi là "tài liệu" và một cột TEXT có thể chứa một đoạn văn, v.v. Chỉ mục đảo ngược sẽ chứa các thuật ngữ dưới dạng khóa băm và id hàng như id tài liệu.

Hãy nhớ rằng truy vấn SQL này sẽ có hiệu suất O [1] nhiều hơn hoặc ít hơn. Truy vấn sẽ độc lập với

  1. Số từ / thuật ngữ trong cột VĂN BẢN
  2. Số hàng / tài liệu phù hợp với tiêu chí
  3. Độ dài của các từ / thuật ngữ

Ví dụ: SQL này có thể được kích hoạt để trích xuất tất cả các hàng khớp với từ XYZ đã cho:

SELECT * FROM my_table WHERE MATCH [my_text_column] against ['XYZ' IN boolean mode] ;

Lưu ý: Nếu bạn thêm ORDER BY vào truy vấn này, thời gian chạy của bạn sẽ thay đổi dựa trên một số tham số, một trong số đó là số lượng hàng / tài liệu phù hợp. Cẩn thận.

Tuy nhiên, LIKE không có gì về điều này. Nó buộc phải quét tuyến tính câu / chuỗi và tìm tất cả các thuật ngữ phù hợp. Thêm thẻ đại diện làm tăng thêm sự lộn xộn. Nó hoạt động tốt đối với các chuỗi có độ dài nhỏ, như bạn có thể tưởng tượng, nhưng sẽ thất bại thảm hại đối với các câu dài hơn. Và chắc chắn không thể so sánh khi có một đoạn văn hoặc cả một trang văn bản v.v.

Video liên quan

Chủ Đề