SQL - LIKE 運算子



SQL LIKE 運算子

SQL LIKE 運算子用於根據指定的模式檢索表中某一列中的資料。

它與 UPDATE、DELETE 和 SELECT 語句的 WHERE 子句一起使用,根據給定的模式過濾行。這些模式使用萬用字元指定。

假設我們需要提交所有名字以“K”開頭的學生的列表。我們可以藉助 LIKE 運算子獲取此列表,如下所示:

WHERE student_name LIKE 'K%';

這裡,% 是一個萬用字元,表示零個、一個或多個字元。表示式K%指定它將顯示所有名字“k”開頭的學生列表。

LIKE 運算子可以與字串、數字或日期值一起使用。但是,建議使用字串值。

語法

SQL LIKE 運算子的基本語法如下:

SELECT column1, column2, ...
FROM table_name
WHERE columnn LIKE specified_pattern;

什麼是萬用字元?

SQL 萬用字元是在 SQL 查詢中用於匹配資料中模式的特殊字元。以下是與 MySQL 資料庫中的 LIKE 運算子一起使用的萬用字元:

序號 萬用字元 & 定義

1

%

百分號表示零個、一個或多個字元。

2

_

下劃線表示一個數字或字元。

在 LIKE 運算子中,上述萬用字元可以單獨使用,也可以相互組合使用。

下表提供了一些示例,這些示例顯示了具有不同 LIKE 運算子(使用“%”和“_”)的 WHERE 子句:

序號 語句 & 描述

1

WHERE SALARY LIKE '200%'

查詢以 200 開頭的任何值。

2

WHERE SALARY LIKE '%200%'

查詢在任何位置包含 200 的任何值。

3

WHERE SALARY LIKE '_00%'

查詢在第二位和第三位包含 00 的任何值。

4

WHERE SALARY LIKE '2_%_%'

查詢以 2 開頭且至少有 3 個字元的任何值。

5

WHERE SALARY LIKE '%2'

查詢以 2 結尾的任何值。

6

WHERE SALARY LIKE '_2%3'

查詢在第二位包含 2 且以 3 結尾的任何值。

7

WHERE SALARY LIKE '2___3'

查詢五位數中以 2 開頭並以 3 結尾的任何值。

“%”萬用字元字元

“%”符號表示零個或多個字元。“%”萬用字元匹配任何長度的字串,甚至包括零長度字串。

示例

為了更好地理解這一點,讓我們考慮 CUSTOMERS 表,該表包含客戶的個人詳細資訊,包括他們的姓名、年齡、地址和工資等,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY (ID)
); 

現在,使用 INSERT 語句將值插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

該表將建立如下所示:

ID 姓名 年齡 地址 工資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

現在,讓我們顯示 CUSTOMERS 表中的所有記錄,其中 SALARY 以 200 開頭:

SELECT * FROM CUSTOMERS WHERE SALARY LIKE '200%';

輸出

這將產生以下結果:

ID 姓名 年齡 地址 工資
1 Ramesh 32 Ahmedabad 2000.00
3 Kaushik 23 Kota 2000.00

示例

以下是顯示之前建立的 CUSTOMERS 表中所有記錄的查詢,其中 NAME 在任何位置都包含“al”。在這裡,我們在 LIKE 條件中使用了多個“%”萬用字元:

SELECT * FROM CUSTOMERS WHERE NAME LIKE '%al%';

輸出

產生以下結果:

ID 姓名 年齡 地址 工資
4 Chaitali 25 Mumbai 6500.00
6 Komal 22 Hyderabad 4500.00

“_”萬用字元字元

下劃線萬用字元表示一個數字或字元。單個“_”查詢與“%”萬用字元類似的恰好一個字元。

示例

以下是顯示之前建立的 CUSTOMERS 表中所有記錄的查詢,其中 Name 以K開頭且至少有 4 個字元:

SELECT * FROM CUSTOMERS WHERE NAME LIKE 'K___%';

輸出

獲得的結果如下所示:

ID 姓名 年齡 地址 工資
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
6 Komal 22 Hyderabad 4500.00

示例

以下是顯示 CUSTOMERS 表中所有記錄的查詢,其中 NAME 在第三位包含“m”:

SELECT * FROM CUSTOMERS WHERE NAME LIKE '__m%';

輸出

執行上述查詢後,我們將獲得以下結果:

ID 姓名 年齡 地址 工資
1 Ramesh 32 Ahmedabad 2000.00
6 Komal 22 Hyderabad 4500.00

LIKE 運算子與 OR

我們還可以透過使用ANDOR運算子,使用 LIKE 運算子匹配多個字串模式來選擇行。

語法

以下是使用 LIKE 運算子與 OR 運算子的基本語法:

SELECT column1, column2, ...
FROM table_name
WHERE column1 LIKE pattern1 OR column2 LIKE pattern2 OR ...;

示例

在這裡,SQL 查詢檢索姓名以C開頭並以i結尾的客戶的記錄,或者姓名以k結尾的客戶的記錄:

SELECT * FROM CUSTOMERS WHERE NAME LIKE 'C%i' OR NAME LIKE '%k';

輸出

這將產生以下結果:

ID 姓名 年齡 地址 工資
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00

NOT 運算子與 LIKE 條件

我們使用 NOT 運算子與 LIKE 一起提取不包含搜尋模式中提供的特定字串的行。

語法

以下是 SQL 中 NOT LIKE 運算子的基本語法:

SELECT column1, column2, ...
FROM table_name
WHERE column1 NOT LIKE pattern;

示例

在下面給出的查詢中,我們正在獲取所有姓名不以K開頭的客戶:

SELECT * FROM CUSTOMERS WHERE NAME NOT LIKE 'K%';

輸出

這將產生以下結果:

ID 姓名 年齡 地址 工資
1 Ramesh 32 Ahmedabad 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
7 Muffy 24 Indore 10000.00

LIKE 運算子的跳脫字元

SQL 中的跳脫字元用於從LIKE運算子的表示式中排除某些萬用字元字元。透過這樣做,我們可以以其一般含義使用這些字元。

使用跳脫字元,我們還可以避免使用 SQL 語法中保留的字元來表示特定命令,例如單引號'、“%”和“_”。

例如,如果您需要在 LIKE 條件中搜索%作為字面量,則可以使用跳脫字元來實現。

跳脫字元僅定義為單個字元。建議選擇資料中不存在的字元。

語法

使用跳脫字元的 LIKE 運算子的語法如下:

SELECT column1, column2, ...
FROM table_name
WHERE column1 LIKE 'pattern ESCAPE escape_character';

其中,

  • pattern是要匹配的模式。

  • ESCAPE是指示跳脫字元的關鍵字

  • escape_character是要用作跳脫字元的字元。

示例

讓我們使用以下查詢建立一個新的 EMPLOYEE 表:

CREATE TABLE EMPLOYEE (
   SALARY DECIMAL (18,2) NOT NULL,
   BONUS_PERCENT VARCHAR (20)
);

現在,我們可以使用 INSERT 語句將值插入這些空表中,如下所示:

INSERT INTO EMPLOYEE VALUES 
(67000.00, '45.00'),
(54000.00, '20.34%'),     
(75000.00, '51.00'),        
(84000.00, '56.82%');

Employee表包含組織中員工的工資以及他們在工資中的獎金百分比,如下所示:

工資 BONUS_PERCENT
67000.00 45.00
54000.00 20.34%
75000.00 51.00
84000.00 56.82%

現在,我們正在顯示 EMPLOYEE 表中的所有記錄,其中 BONUS_PERCENT 包含%字面量:

SELECT * FROM EMPLOYEE 
WHERE BONUS_PERCENT LIKE'%!%%' ESCAPE '!';

輸出

這將產生以下結果:

工資 BONUS_PERCENT
54000.00 20.34%
84000.00 56.82%

示例

在這裡,我們正在檢索以2開頭幷包含%字面量的 BONUS_PERCENT:

SELECT * FROM EMPLOYEE 
WHERE BONUS_PERCENT LIKE'2%!%%' ESCAPE '!';

輸出

獲得以下結果:

工資 BONUS_PERCENT
54000.00 20.34%

SQL 中 LIKE 運算子的用法

LIKE 運算子的一些用途如下:

  • 它幫助我們提取與所需模式匹配的資料。

  • 它幫助我們在資料上執行基於複雜正則表示式的查詢。

  • 它簡化了複雜的查詢。

廣告