Lệnh LIKE và NOT LIKE trong Oracle
Trong bài này chúng ta sẽ tìm hiểu cách xử lý tìm kiếm dữ liệu gần giống với LIKE trong Oracle, đây là lệnh cho phép bạn so sánh dữ liệu gần giống, rất hữu ích ở một số trường hợp cần xử lý truy vấn tìm kiếm.
1. Lệnh LIKE trong Oracle
LIKE được dùng ở lệnh WHERE, nó cho phép bạn định dạng dữ liệu so sánh khớp mẫu.
Cú pháp:
column_name LIKE ('pattern_string')
Bài viết này được đăng tại [free tuts .net]
Trong đó:
- column_name là cột bạn muốn tìm kiếm
- pattern_string là chuỗi so khớp
Bạn có thể sử dụng cú pháp của Regular Expression ở chuỗi so khớp, tuy nhiên thông thường chúng ta chỉ sử dụng hai ký hiệu sau đây với lệnh LIKE.
Ký hiệu | Giải thích |
---|---|
% | Đại diện cho một dãy các kí tự |
_ | Đại diện cho một kí tự đơn |
Ví dụ: Mình có cột fullname, bây giờ mình muốn lấy tên tất cả sinh viên có tên là Cường. Như vậy mình sẽ sử dụng ký hiệu % cho họ và tên lót bởi nó đại diện cho một dãy kí tự.
SELECT * FROM students WHERE student_name LIKE ('% Cuong')
Như vậy những ai có tên Cường thì sẽ được chọn, cho dù tên họ và tên lót của họ là gì đi nữa.
Ví dụ: mình muốn lấy danh sách khách hàng có số điện thoại 10 chữ số và bắt đầu bằng 0979. Như vậy còn 6 số sau mình sẽ dùng dấu _
để đại diện cho 6 số còn lại.
SELECT * FROM phones WHERE phone_number LIKE ('0979______')
2. Lệnh NOT LIKE trong Oracle
Ngược lại với lệnh LIKE, lệnh NOT LIKE kiểm tra không giống với chuỗi cần so khớp.
Cú pháp:
column_name NOT LIKE ('pattern_string')
Trong đó các tham số được giải thích như trên.
Ví dụ: Lấy danh sách sinh viên có tên khác Cường ở bảng students.
SELECT * FROM students WHERE student_name NOT LIKE ('% Cuong')
3. Ký tự đặc biệt ESCAPE
Giả sử trong chuỗi so khớp bạn xuất hiện ký tự %
hoặc _
thì bạn phải thông báo cho Oracle biết đó là một ký tự bình thường, bằng cách thêm dấu \
đằng trước nó.
Ví dụ: Tìm tất cả bài viết có tiêu đề xuất hiện ký tự %
SELECT * FROM posts WHERE title LIKE "%\%%"
Ví dụ: Tìm tất cả sản phẩm có mã sản phẩm bắt đầu bằng _
và chỉ có hai ký tự.
SELECT * FROM products WHERE id LIKE "\__"
Ký tự mặc định của ESCAPE là \
, tuy nhiên bạn có thể thay đổi nó bằng cách khai báo như sau:
Như hai ví dụ trên mình có thể viết lại như sau:
SELECT * FROM posts WHERE title LIKE "%!%%" ESCAPE "!";
SELECT * FROM products WHERE id LIKE "#__" ESCAPE "#"
Ở ví dụ 1 mình dùng dấu !
, còn ví dụ 2 mình dùng dấu #
để thay thế.
4. Lời kết
Như vậy mình đã giới thiệu xong lệnh LIKE và cách dùng lệnh LIKE để tìm kiếm dữ liệu gần đúng, nghĩa là sự so khớp sẽ dựa vào chuỗi pattern mà bạn định nghĩa.
Lệnh này rất hay và được dùng rất nhiều, tuy nhiên về mặt tối ưu thì dùng nó không được tốt cho lắm, tốc độ xử lý sẽ chậm.