Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Toán tử SQL LIKE cho người mới bắt đầu

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ư _ , [][^] .

% 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).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về Mô hình Dữ liệu ER

  2. Lập hồ sơ dữ liệu:Khám phá chi tiết dữ liệu

  3. SCD loại 3

  4. Đừng chỉ tạo ra những chỉ mục bị thiếu một cách mù quáng!

  5. Các nguyên tắc cơ bản về biểu thức bảng, Phần 4 - Bảng có nguồn gốc, cân nhắc tối ưu hóa, tiếp theo