Tôi có 1 bảng actor lưu dữ liệu của các diễn viên điện ảnh với các cột:
- actor_id PRIMARY KEY integer
- first_name text
- last_name text
- last_update timestamp
Tôi muốn tìm tất cả các diễn viên có first_name là John --> tôi dùng lệnh WHERE với điều kiện first_name = 'John', easy and simple:
SELECT *
FROM actor
WHERE first_name = ‘John’
Nhưng, nếu như tôi muốn lấy tất các diễn viên có first_name chứa chữ 'John' ? Tôi không nhớ liệu diễn viên này có first_name là John hay Johnny hay Johnson ?
Trong những trường hợp như này, thay vì dùng operator '=', hãy dùng operator LIKE:
SELECT *
FROM actor
WHERE first_name LIKE ‘%John%’
trong đó dấu "%" đại diện cho 0 hoặc nhiều kí tự
Như vậy, ```first_name LIKE ‘%John%’``` có thể được hiểu là: first_name có (0 hoặc nhiều) kí tự đứng trước 'John' và có (0 hoặc nhiều) kí tự đứng sau 'John'. Nói cách khác, tất cả những first_name có chứa John
Ngoài operator '%', LIKE còn có thể hoạt động với operator '_':
SELECT *
FROM actor
WHERE first_name LIKE ‘Ale_’
Câu lệnh trên sẽ tìm tất cả các diễn viên có first_name bắt đầu với 'Ale', theo sau là duy nhất 1 kí tự bất kì
Thử kết hợp giữa '%' và '_' phát nhể ?
SELECT *
FROM actor
WHERE first_name LIKE ‘_il%’
Hãy tìm cho tôi tất cả các diễn viên có first_name:
- Chứa chữ 'il'
- Trước chữ 'il' chỉ có duy nhất 1 kí tự
- Sau chữ 'il' có bao nhiêu kí tự cũng được
Thế nếu như tôi muốn tìm kiếm không phân biệt hoa/thường ?
Hãy dùng ILIKE (I là viết tắt của case-Insensitive)
SELECT *
FROM actor
WHERE first_name ILIKE ‘%A%’
ORDER BY first_name
Hãy tìm cho tôi tất cả các diễn viên có first_name chứa chữ cái 'A', không cần biết đó là 'A' in hoa hay 'a' thường
Bình luận