Trong SQL, LIKE
cho phép bạn thực hiện đối sánh mẫu. Nó xác định xem một chuỗi ký tự cụ thể có khớp với một mẫu được chỉ định hay không.
Một mẫu có thể bao gồm các ký tự thông thường và các ký tự đại diện.
Bảng nguồn
Bảng sau được sử dụng cho các ví dụ trên trang này.
SELECT * FROM Owners;
Kết quả:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Ví dụ
Dưới đây là một ví dụ để chứng minh cách LIKE
nhà điều hành hoạt động.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com';
Kết quả:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
Trong ví dụ này, tôi đã sử dụng LIKE
toán tử kết hợp với %
toán tử ký tự đại diện để trả lại chủ sở hữu có địa chỉ email kết thúc bằng .com
.
LIKE
cũng có thể được sử dụng với các toán tử chuỗi khác, chẳng hạn như _
, []
và [^]
.
%
Toán tử ký tự đại diện
%
toán tử ký tự đại diện khớp với bất kỳ chuỗi nào không hoặc nhiều ký tự. Nó có thể được sử dụng như một tiền tố hoặc một hậu tố, và nó cũng có thể được sử dụng ở giữa một chuỗi.
Nó có xu hướng được sử dụng phổ biến hơn như một hậu tố và nó bị hạn chế sử dụng ở giữa các mẫu, mặc dù có một số trường hợp sử dụng hợp lệ để sử dụng nó ở giữa mẫu, chẳng hạn như sau:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';
Kết quả:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | +-------------+------------+------------------+
Trong trường hợp này, chúng tôi không biết địa chỉ email của bart, nhưng chúng tôi biết địa chỉ này bắt đầu bằng [email protected]
và kết thúc bằng .com
. Do đó, chúng tôi có thể sử dụng LIKE
kết hợp với %
toán tử ký tự đại diện để điền vào phần còn lại.
Hãy nhớ rằng kỹ thuật này có thể trả về rất nhiều hàng không liên quan, tùy thuộc vào dữ liệu và cách bạn xây dựng câu lệnh SQL của mình.
_
Toán tử ký tự đại diện
Dấu gạch dưới (_
) toán tử ký tự đại diện khớp với bất kỳ ký tự đơn nào.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt';
Kết quả:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+------------------+
[]
Toán tử ký tự đại diện
Dấu ngoặc ([]
) toán tử ký tự đại diện khớp với bất kỳ ký tự đơn nào trong phạm vi được chỉ định hoặc tập hợp được chỉ định giữa các dấu ngoặc.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%';
Kết quả:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Boris | Trump | NULL | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Ở đây, tôi đã kết hợp ký tự đại diện trong ngoặc với dấu phần trăm để trả về tất cả chủ sở hữu có tên bắt đầu bằng b
hoặc h
.
Lưu ý rằng toán tử dấu ngoặc không được chấp nhận rộng rãi trong DBMS. Nó được hỗ trợ trong SQL Server, nhưng nó không được hỗ trợ trong MySQL, Oracle, DB2 và SQLite. Kiểm tra tài liệu DBMS của bạn để xem liệu nó có hỗ trợ toán tử này không.
[^]
Toán tử ký tự đại diện
Ký tự dấu mũ (^
) có thể được sử dụng để phủ định kết quả khi sử dụng toán tử dấu ngoặc.
Vì vậy, chúng tôi thay đổi ví dụ trước đó để chỉ trả lại những chủ sở hữu có tên đầu tiên không bắt đầu bằng b
hoặc h
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';
Kết quả:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
Giá trị NULL
Phần trăm (%
) ký tự đại diện khớp với bất kỳ thứ gì - gần như. Một điều nó không khớp là NULL
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%';
Kết quả:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Trong bảng của chúng tôi, có hai hàng với NULL
trong Email
nhưng chúng không được trả lại ở đây.
Hiệu suất
Các truy vấn có chứa LIKE
toán tử có thể chạy chậm hơn nhiều so với các truy vấn khác và bạn có thể nên tránh sử dụng LIKE
trừ khi bạn thực sự cần nó. Sử dụng %
toán tử làm tiền tố có thể đặc biệt chậm.
Điều đó không có nghĩa là bạn hoàn toàn không nên sử dụng nó. LIKE
toán tử là một phần không thể thiếu của SQL và bạn sẽ gặp phải nhiều trường hợp trong đó nó sẽ là lựa chọn duy nhất (hoặc ít nhất, là lựa chọn tốt nhất).