MySQL - NOT LIKE 运算符



MySQL NOT LIKE 运算符

我们之前已经了解到,MySQL 数据库中的LIKE运算符是一个逻辑运算符,用于对数据库表执行模式匹配操作。NOT LIKE运算符被定义为该 LIKE 运算符的反义。

LIKE 和 NOT LIKE 运算符都执行数据库表中的模式匹配。因此,它们都需要通配符和模式才能发挥作用。但是,如果 LIKE 运算符用于查找使用通配符提到的类似模式,则 NOT LIKE 运算符用于查找不包含指定模式的所有记录。

  • NOT LIKE 运算符不过是两个 SQL 运算符NOTLIKE运算符的组合。因此,具有它们功能的组合。

  • 它用于在给定的字符串中匹配特定模式,并在匹配的情况下返回 0,否则返回 1。如果该函数的两个操作数中的任何一个为 NULL,则返回 NULL 作为结果。

  • 此运算符对于查找与特定模式不匹配或不具有一定特征的字符串很有用。

语法

以下是带有 SELECT 语句的 MySQL NOT LIKE 运算符的基本语法:

SELECT column_name(s) FROM table_name WHERE column_name NOT LIKE [condition];

使用 NOT LIKE 运算符与通配符

通配符是 SQL 查询中用于匹配数据中模式的特殊字符。以下通配符可以与 NOT LIKE 运算符一起使用:

序号 通配符和定义

1

%

百分号表示零个、一个或多个字符。

2

_

下划线表示单个数字或字符。

3

[]

这匹配 [] 中给定范围内的任何单个字符。

4

[^]

这匹配除了 [] 中给定范围内的任何单个字符。

注意:在 NOT LIKE 运算符中,上述通配符可以单独使用,也可以相互组合使用。两个主要使用的通配符是'%''_'

示例

让我们首先使用以下查询创建一个名为CUSTOMERS的表:

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

使用以下 INSERT 语句,我们将记录插入到上面创建的表中:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 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 );

执行以下查询以显示 CUSTOMERS 表中存在的所有记录:

Select * from CUSTOMERS;

以下是 CUSTOMERS 表:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
4 Chaitali 25 孟买 6500.00
5 Hardik 27 博帕尔 8500.00
6 Komal 22 海德拉巴 4500.00
7 Muffy 24 因多尔 10000.00

现在,让我们使用 MySQL NOTLIKE 运算符显示 CUSTOMERS 表中所有姓名不以'k'开头的记录。

SELECT * FROM CUSTOMERS where NAME NOT LIKE 'k%';

以下是姓名不以 'k' 开头的记录:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
4 Chaitali 25 孟买 6500.00
5 Hardik 27 博帕尔 8500.00
7 Muffy 24 因多尔 10000.00

以下查询显示客户的记录,其姓名不以'ik'结尾。

SELECT * FROM CUSTOMERS where NAME NOT LIKE '%ik';

以下是姓名不以 'ik' 结尾的记录:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
2 Khilan 25 德里 1500.00
4 Chaitali 25 孟买 6500.00
6 Komal 22 海德拉巴 4500.00
7 Muffy 24 因多尔 10000.00

在这里,我们显示所有姓名不包含子字符串'al'的记录。

SELECT * FROM CUSTOMERS where NAME NOT LIKE '%al%';

以下是姓名不包含子字符串 'al' 的记录:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
5 Hardik 27 博帕尔 8500.00
7 Muffy 24 因多尔 10000.00

以下查询显示所有姓名不以'm'开头且以'y'结尾的记录。

SELECT * FROM CUSTOMERS WHERE NAME NOT LIKE 'm___y';

正如我们在输出表中看到的,第七条记录被删除,因为姓名以 'm' 开头并以 'y' 结尾。

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
4 Chaitali 25 孟买 6500.00
5 Hardik 27 博帕尔 8500.00
6 Komal 22 海德拉巴 4500.00

以下查询显示所有不以 'k' 开头且正好包含 6 个字符的客户姓名。

SELECT * FROM CUSTOMERS WHERE name NOT LIKE 'k_____';

以下是输出:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
3 Kaushik 23 科塔 2000.00
4 Chaitali 25 孟买 6500.00
5 Hardik 27 博帕尔 8500.00
6 Komal 22 海德拉巴 4500.00
7 Muffy 24 因多尔 10000.00

在这里,我们显示 CUSTOMERS 表的记录,其中 ADDRESS 列中记录的第二个字符不是“h”。

SELECT * FROM CUSTOMERS where ADDRESS NOT LIKE '_h%';

以下是输出:

ID 姓名 年龄 地址 薪水
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
4 Chaitali 25 孟买 6500.00
6 Komal 22 海德拉巴 4500.00
7 Muffy 24 因多尔 10000.00

Learn MySQL in-depth with real-world projects through our MySQL certification course. Enroll and become a certified expert to boost your career.

使用 NOT LIKE 运算符与 AND/OR 运算符

我们可以将 MySQL NOT LIKE 运算符与不同的字符串模式一起使用来选择行,并将它们与ANDOR运算符结合使用。

语法

以下是使用 NOT LIKE 运算符与 AND/OR 运算符的语法:

SELECT column_name(s) FROM table_name WHERE column1 NOT LIKE pattern1 [AND|OR] column2 NOT LIKE pattern2 [AND|OR] ...;

示例

在以下示例中,我们显示 CUSTOMERS 表中的所有记录,其中姓名不以'k'开头,并且地址不应以'm'开头,使用AND运算符:

SELECT * FROM CUSTOMERS WHERE name NOT LIKE 'k%' AND address NOT LIKE 'm%';

输出

执行上面的查询将产生以下输出:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
5 Hardik 27 博帕尔 8500.00
7 Muffy 24 因多尔 10000.00

字符串上的 NOT LIKE 运算符

MySQL NOT LIKE 运算符不仅可以在数据库表上执行模式匹配,还可以对单个字符串执行模式匹配。在这里,如果模式存在于给定字符串中,则结果将获得为 0,或者如果不存在则获得为 1。结果使用 SQL SELECT 语句作为结果集检索。

语法

以下是 MySQL 中 NOT LIKE 运算符的语法:

SELECT expression NOT LIKE pattern;

示例

在以下查询中,模式 'Tutorix' 不存在于指定的字符串中。因此,此运算符将返回 1。

SELECT 'Tutorialspoint' NOT LIKE 'Tutorix';

执行上面的查询将产生以下输出:

'Tutorialspoint' NOT LIKE 'Tutorix'
1

在这里,模式 'Tutorialspoint' 存在于指定的字符串中。因此,它返回 0 作为输出。

SELECT 'Tutorialspoint' NOT LIKE 'Tutorialspoint';

以下是输出:

'Tutorialspoint' NOT LIKE 'Tutorialspoint'
0

示例

如果任一(字符串或模式操作数)为 NULL,则此运算符返回 NULL。在以下查询中,字符串为 NULL,因此输出将返回为 NULL。

SELECT NULL NOT LIKE 'value';

执行上面的查询将产生以下输出:

NULL NOT LIKE 'value'
NULL

在这里,搜索模式为 NULL。因此,输出将返回为 NULL。

SELECT 'Tutorialspoint' NOT LIKE NULL;

以下是输出:

'Tutorialspoint' 不像 NULL
NULL

使用客户端程序的 NOT LIKE 运算符

除了使用 MySQL 查询来执行 Not Like 运算符外,我们还可以使用 Node.js、PHP、Java 和 Python 等客户端程序来达到相同的结果。

语法

以下是这些操作在各种编程语言中的语法:

要使用 PHP 程序查找 MySQL 数据库中不匹配特定模式的数据,可以使用 Not Like 运算符。为此,我们需要使用mysqli 函数query()执行 'SELECT' 语句,如下所示:

$sql = "SELECT * FROM EMP where Name NOT LIKE 'Su%'"; $mysqli->query($sql);

要使用 Node.js 程序查找 MySQL 数据库中不匹配特定模式的数据,可以使用 Not Like 运算符。为此,我们需要使用mysql2 库的query() 函数执行 'SELECT' 语句,如下所示:

sql = "SELECT * FROM tutorials_tbl where tutorial_author Not like 'Jo%'"; con.query(sql);

要使用 Java 程序查找 MySQL 数据库中不匹配特定模式的数据,可以使用 Not Like 运算符。为此,我们需要使用JDBC 函数executeUpdate()执行 'SELECT' 语句,如下所示:

String sql = "SELECT * FROM EMP where Name NOT LIKE 'Su%'"; statement.executeQuery(sql);

要使用 Python 程序查找 MySQL 数据库中不匹配特定模式的数据,可以使用 Not Like 运算符。为此,我们需要使用 MySQL Connector/Pythonexecute() 函数执行 'SELECT' 语句,如下所示:

sql = "SELECT * FROM EMP where Name NOT LIKE 'Su%'" cursorObj.execute(sql)

示例

以下是程序:

$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $db = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db); if ($mysqli->connect_errno) { printf("Connect failed: %s", $mysqli->connect_error); exit(); } //printf('Connected successfully.'); $sql = "SELECT * FROM EMP where Name NOT LIKE 'Su%'"; if($result = $mysqli->query($sql)){ printf("Table records: \n"); while($row = mysqli_fetch_array($result)){ printf("ID %d, Name %s, DOB %s, Location %s", $row['ID'], $row['Name'], $row['DOB'], $row['Location'],); printf("\n"); } } if($mysqli->error){ printf("Error message: ", $mysqli->error); } $mysqli->close();

输出

获得的输出如下:

Table records:
ID 101, Name Amit, DOB 1970-01-08, Location Hyderabad
ID 0, Name Raja, DOB 1980-11-06, Location Goa
ID 109, Name Javed, DOB 1980-11-06, Location pune
ID 120, Name Vani, DOB 1980-11-06, Location Delhi
ID 0, Name Devi, DOB 1980-11-06, Location Goa   
var mysql = require('mysql2'); var con = mysql.createConnection({ host:"localhost", user:"root", password:"password" }); //Connecting to MySQL con.connect(function(err) { if (err) throw err; //console.log("Connected successfully...!"); //console.log("--------------------------"); sql = "USE TUTORIALS"; con.query(sql); sql = "SELECT * FROM tutorials_tbl where tutorial_author Not like 'Jo%'"; console.log("Select query executed successfully..!"); console.log("Table records: "); con.query(sql); con.query(sql, function(err, result){ if (err) throw err; console.log(result); }); });

输出

产生的输出如下:

Select query executed successfully..!
Table records:
[
  {
    tutorial_id: 2,
    tutorial_title: 'Angular Java',
    tutorial_author: 'Abdul S',
    submission_date: 2023-08-07T18:30:00.000Z
  },
  {
    tutorial_id: 3,
    tutorial_title: 'Learning Java',
    tutorial_author: 'Sanjay',
    submission_date: 2007-05-05T18:30:00.000Z
  },
  {
    tutorial_id: 4,
    tutorial_title: 'Python Tutorial',
    tutorial_author: 'Sasha Lee',
    submission_date: 2016-09-03T18:30:00.000Z
  },
  {
    tutorial_id: 5,
    tutorial_title: 'Hadoop Tutorial',
    tutorial_author: 'Chris Welsh',
    submission_date: 2023-08-07T18:30:00.000Z
  }
]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class NotLikeOperator { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1:3306/TUTORIALS"; String user = "root"; String password = "password"; ResultSet rs; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection con = DriverManager.getConnection(url, user, password); Statement st = con.createStatement(); //System.out.println("Database connected successfully...!"); String sql = "SELECT * FROM EMP where Name NOT LIKE 'Su%'"; rs = st.executeQuery(sql); System.out.println("Table records: "); while(rs.next()) { String id = rs.getString("id"); String name = rs.getString("Name"); String dob = rs.getString("dob"); String location = rs.getString("location"); System.out.println("Id: " + id + ", Name: " + name + ", Dob: " + dob + ", Location: " + location); } }catch(Exception e) { e.printStackTrace(); } } }

输出

获得的输出如下所示:

Table records: 
Id: 101, Name: Amit, Dob: 1970-01-08, Location: Hyderabad
Id: MyID2, Name: Raja, Dob: 1980-11-06, Location: Goa
Id: MyID2, Name: Raja, Dob: 1980-11-06, Location: Goa
Id: 109, Name: Javed, Dob: 1980-11-06, Location: pune
Id: 120, Name: Vani, Dob: 1980-11-06, Location: Delhi
Id: oo1, Name: Devi, Dob: 1980-11-06, Location: Goa
import mysql.connector #establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) #Creating a cursor object cursorObj = connection.cursor() notlike_operator_query = f"SELECT * FROM EMP where Name NOT LIKE 'Su%'" cursorObj.execute(notlike_operator_query) # Fetching all the results results = cursorObj.fetchall() # display the results print("Employees whose name does not start with 'Su':") for row in results: print(row) cursorObj.close() connection.close()

输出

以下是上述代码的输出:

Employees whose name does not start with 'Su':
('101', 'Amit', datetime.date(1970, 1, 8), 'Hyderabad')
('MyID2', 'Raja', datetime.date(1980, 11, 6), 'Goa')
('109', 'Javed', datetime.date(1980, 11, 6), 'pune')
('120', 'Vani', datetime.date(1980, 11, 6), 'Delhi')
('oo1', 'Devi', datetime.date(1980, 11, 6), 'Goa')
广告