06/04/2021, 14:51

Lệnh LIKE và NOT LIKE trong Oracle - Oracle căn bản

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ữ ...

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')

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.

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:

Ví dụ 1
SELECT  * 
FROM posts
WHERE title LIKE "%!%%" ESCAPE "!";

Ví dụ 2
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.

Trần Trung Dũng

15 chủ đề

2610 bài viết

Cùng chủ đề
0