数据准备
首先创建一个数据库educational_manage
,记住字符集
和排序规则
如下选择:
接着创建表和数据,具体的sql
代码如下:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`student_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL,
`gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`student_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `students` VALUES (1, '丁一', 18, '男');
INSERT INTO `students` VALUES (2, '解放', 18, '男');
INSERT INTO `students` VALUES (3, '李总结', 19, '男');
INSERT INTO `students` VALUES (4, '周末离', 18, '女');
INSERT INTO `students` VALUES (5, '谢村花', 18, '女');
INSERT INTO `students` VALUES (6, '周一', 18, '女');
INSERT INTO `students` VALUES (7, '刘星', 19, '女');
INSERT INTO `students` VALUES (8, '夏雨', 18, '男');
INSERT INTO `students` VALUES (9, '夏天', 18, '男');
INSERT INTO `students` VALUES (10, '战书', 19, '男');
INSERT INTO `students` VALUES (11, '周易', 18, '女');
SET FOREIGN_KEY_CHECKS = 1;
MySQL NOT IN 使用说明
NOT IN
是 IN
的否定操作符,本文通过实例介绍了 MySQL 中如何使用 NOT IN 判断一个值是否不包含在一个值列表中
。
NOT 是一个逻辑运算符,用来用来否定一个操作。NOT IN 是 IN 的否定操作符。
MySQL NOT IN
语法
NOT IN 和 IN 用法几乎一样,只是在 IN 前面添加一个 NOT 关键字,IN 的否定操作符。 NOT IN 语法如下:
expression NOT IN (value1, value2, ...)
用法说明:
- NOT 是一个否定逻辑运算符。
- expression 可以是一个字段名、值或其他的表达式(比如函数调用、运算等)。
- (value1, value2, …) 是一个值列表,多个值之间使用 , 分隔,并使用小括号 () 将它们包围起来。
- value1 是具体的值,比如:1, 2, ‘A’, ‘B’ 等。
- (value1, value2, …) 最少可以是 1 个值,比如 (1), (‘A’)。
MySQL NOT IN
运算规则
NOT IN 检查一个字段或值是否不包含于一个值列表中,如果值不包含在值列表中,返回 1,否则返回 0。
NOT IN 操作符想弹雨多个 OR 组合操作的否定操作
,比如下面的语句:
name NOT IN ('Alice', 'Tim', 'Jack')
相当于下面的or语句
:
NOT (name = 'Alice' OR name = 'Tim' OR name = 'Jack')
由于 =
的反义词是 <>
,因此也相当于下面的语句:
name <> 'Alice' AND name <> 'Tim' AND name <> 'Jack'
NOT IN 运算符的运算规则如下:
- 当左侧和右侧都没有 NULL 时,右侧值列表不包含左侧的值时返回 1,否则返回 0。
SELECT 1 NOT IN (1, 2), 3 NOT IN (1, 2), 'A' NOT IN ('A', 'B'), 'C' NOT IN ('A', 'B');
+-----------------+-----------------+-----------------------+-----------------------+
| 1 NOT IN (1, 2) | 3 NOT IN (1, 2) | 'A' NOT IN ('A', 'B') | 'C' NOT IN ('A', 'B') |
+-----------------+-----------------+-----------------------+-----------------------+
| 0 | 1 | 0 | 1 |
+-----------------+-----------------+-----------------------+-----------------------+
- 当左侧操作数为 NULL,返回 NULL。
SELECT NULL NOT IN (1, 2), NULL NOT IN (1, 2, NULL);
+--------------------+--------------------------+
| NULL NOT IN (1, 2) | NULL NOT IN (1, 2, NULL) |
+--------------------+--------------------------+
| NULL | NULL |
+--------------------+--------------------------+
- 当右侧值列表含有 NULL,如果包含左侧的非 NULL 值,返回 0,否则返回 NULL
SELECT 1 NOT IN (1, NULL), 2 NOT IN (1, NULL);
+--------------------+--------------------+
| 1 NOT IN (1, NULL) | 2 NOT IN (1, NULL) |
+--------------------+--------------------+
| 0 | NULL |
+--------------------+--------------------+
MySQL NOT IN
实例
在实际开发中,我们会在 SELECT、UPDATE、DELETE 语句中的 WHERE 子句中使用 NOT IN 运算符。在 NOT IN 运算符中,除了与值列表比较,还可能与子查询进行比较。
我们以上述创建的数据库表为例,进行演示:
SELECT *
FROM students
WHERE name NOT IN ('丁一', '周一', '周易');
+------------+--------+------+--------+
| student_id | name | age | gender |
+------------+--------+------+--------+
| 2 | 解放 | 18 | 男 |
| 3 | 李总结 | 19 | 男 |
| 4 | 周末离 | 18 | 女 |
| 5 | 谢村花 | 18 | 女 |
| 7 | 刘星 | 19 | 女 |
| 8 | 夏雨 | 18 | 男 |
| 9 | 夏天 | 18 | 男 |
| 10 | 战书 | 19 | 男 |
+------------+--------+------+--------+
8 rows in set (0.03 sec)
结论
本文通过实例介绍了 MySQL 中 NOT IN 运算符的语法和用法。 NOT IN
运算符的用法要点如下:
- NOT IN 是 IN 运算符的
否定操作
。 - NOT IN 检查左侧值是否
不包含于右侧
的值列表中。