
- MySQL 基础
- MySQL - 首页
- MySQL - 简介
- MySQL - 特性
- MySQL - 版本
- MySQL - 变量
- MySQL - 安装
- MySQL - 管理
- MySQL - PHP 语法
- MySQL - Node.js 语法
- MySQL - Java 语法
- MySQL - Python 语法
- MySQL - 连接
- MySQL - Workbench
- MySQL 数据库
- MySQL - 创建数据库
- MySQL - 删除数据库
- MySQL - 选择数据库
- MySQL - 显示数据库
- MySQL - 复制数据库
- MySQL - 数据库导出
- MySQL - 数据库导入
- MySQL - 数据库信息
- MySQL 用户
- MySQL - 创建用户
- MySQL - 删除用户
- MySQL - 显示用户
- MySQL - 修改密码
- MySQL - 授予权限
- MySQL - 显示权限
- MySQL - 收回权限
- MySQL - 锁定用户账户
- MySQL - 解锁用户账户
- MySQL 表
- MySQL - 创建表
- MySQL - 显示表
- MySQL - 修改表
- MySQL - 重命名表
- MySQL - 克隆表
- MySQL - 截断表
- MySQL - 临时表
- MySQL - 修复表
- MySQL - 描述表
- MySQL - 添加/删除列
- MySQL - 显示列
- MySQL - 重命名列
- MySQL - 表锁定
- MySQL - 删除表
- MySQL - 派生表
- MySQL 查询
- MySQL - 查询
- MySQL - 约束
- MySQL - 插入查询
- MySQL - 选择查询
- MySQL - 更新查询
- MySQL - 删除查询
- MySQL - 替换查询
- MySQL - 插入忽略
- MySQL - 插入重复键更新
- MySQL - 插入选择
- MySQL 运算符和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 运算符
- MySQL - OR 运算符
- MySQL - LIKE 运算符
- MySQL - IN 运算符
- MySQL - ANY 运算符
- MySQL - EXISTS 运算符
- MySQL - NOT 运算符
- MySQL - 不等于运算符
- MySQL - IS NULL 运算符
- MySQL - IS NOT NULL 运算符
- MySQL - BETWEEN 运算符
- MySQL - UNION 运算符
- MySQL - UNION 与 UNION ALL
- MySQL - MINUS 运算符
- MySQL - INTERSECT 运算符
- MySQL - INTERVAL 运算符
- MySQL 连接
- MySQL - 使用连接
- MySQL - 内连接
- MySQL - 左连接
- MySQL - 右连接
- MySQL - 交叉连接
- MySQL - 全连接
- MySQL - 自连接
- MySQL - 删除连接
- MySQL - 更新连接
- MySQL - UNION 与 JOIN
- MySQL 触发器
- MySQL - 触发器
- MySQL - 创建触发器
- MySQL - 显示触发器
- MySQL - 删除触发器
- MySQL - 插入前触发器
- MySQL - 插入后触发器
- MySQL - 更新前触发器
- MySQL - 更新后触发器
- MySQL - 删除前触发器
- MySQL - 删除后触发器
- MySQL 数据类型
- MySQL - 数据类型
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正则表达式
- MySQL - 正则表达式
- MySQL - RLIKE 运算符
- MySQL - NOT LIKE 运算符
- MySQL - NOT REGEXP 运算符
- MySQL - regexp_instr() 函数
- MySQL - regexp_like() 函数
- MySQL - regexp_replace() 函数
- MySQL - regexp_substr() 函数
- MySQL 函数和运算符
- MySQL - 日期和时间函数
- MySQL - 算术运算符
- MySQL - 数值函数
- MySQL - 字符串函数
- MySQL - 聚合函数
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事务
- MySQL - 使用序列
- MySQL - 处理重复项
- MySQL - SQL 注入
- MySQL - 子查询
- MySQL - 注释
- MySQL - 检查约束
- MySQL - 存储引擎
- MySQL - 将表导出到 CSV 文件
- MySQL - 将 CSV 文件导入到数据库
- MySQL - UUID
- MySQL - 公共表表达式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分区
- MySQL - 垂直分区
- MySQL - 游标
- MySQL - 存储函数
- MySQL - Signal
- MySQL - Resignal
- MySQL - 字符集
- MySQL - 校对规则
- MySQL - 通配符
- MySQL - 别名
- MySQL - ROLLUP
- MySQL - 当天日期
- MySQL - 字面量
- MySQL - 存储过程
- MySQL - Explain
- MySQL - JSON
- MySQL - 标准差
- MySQL - 查找重复记录
- MySQL - 删除重复记录
- MySQL - 选择随机记录
- MySQL - 显示 Processlist
- MySQL - 更改列类型
- MySQL - 重置自动增量
- MySQL - Coalesce() 函数
- MySQL 有用资源
- MySQL - 有用函数
- MySQL - 语句参考
- MySQL - 快速指南
- MySQL - 有用资源
- MySQL - 讨论
MySQL - NOT LIKE 运算符
MySQL NOT LIKE 运算符
我们之前已经了解到,MySQL 数据库中的LIKE运算符是一个逻辑运算符,用于对数据库表执行模式匹配操作。NOT LIKE运算符被定义为该 LIKE 运算符的反义。
LIKE 和 NOT LIKE 运算符都执行数据库表中的模式匹配。因此,它们都需要通配符和模式才能发挥作用。但是,如果 LIKE 运算符用于查找使用通配符提到的类似模式,则 NOT LIKE 运算符用于查找不包含指定模式的所有记录。
NOT LIKE 运算符不过是两个 SQL 运算符NOT和LIKE运算符的组合。因此,具有它们功能的组合。
它用于在给定的字符串中匹配特定模式,并在匹配的情况下返回 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 运算符与不同的字符串模式一起使用来选择行,并将它们与AND或OR运算符结合使用。
语法
以下是使用 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/Python 的execute() 函数执行 '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')