mysql中的IN和NOT IN

在MySQL中,INNOT IN 是用于进行集合比较的条件运算符。它们可以用于简化多个 ORAND 条件的查询。这些运算符在查询语句中非常常见,用于检查某个值是否在指定的集合中。

  • IN 运算符用于检查某个值是否在指定的集合中。
  • NOT IN 运算符用于检查某个值是否不在指定的集合中。
  • 使用子查询时要注意空值(NULL)的处理,避免意外的查询结果。
  • 在处理较大的数据集时,使用连接(JOIN)操作可能会比 INNOT IN 更高效。

IN 运算符

IN 运算符用于检查某个值是否在指定的集合中。如果值在集合中,则条件为真。

语法
expression IN (value1, value2, ..., valueN)
示例
  1. 基本使用

    SELECT * FROM employees WHERE department IN ('Sales', 'Marketing', 'HR');
    

    这条查询语句从 employees 表中选择部门为 SalesMarketingHR 的员工。

  2. 使用子查询

    SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE location = 'New York');
    

    这条查询语句从 employees 表中选择那些部门位于 New York 的员工。

NOT IN 运算符

NOT IN 运算符用于检查某个值是否不在指定的集合中。如果值不在集合中,则条件为真。

语法
expression NOT IN (value1, value2, ..., valueN)
示例
  1. 基本使用

    SELECT * FROM employees WHERE department NOT IN ('Sales', 'Marketing', 'HR');
    

    这条查询语句从 employees 表中选择部门不是 SalesMarketingHR 的员工。

  2. 使用子查询

    SELECT * FROM employees WHERE department_id NOT IN (SELECT id FROM departments WHERE location = 'New York');
    

    这条查询语句从 employees 表中选择那些部门不位于 New York 的员工。

注意事项

  1. 空值处理

    • 使用 NOT IN 时要特别注意空值(NULL)。如果子查询结果或集合中包含NULL值,NOT IN 的结果可能会导致意外行为。为了避免这种情况,可以使用 IS NOT NULL 来过滤掉 NULL 值。
    SELECT * FROM employees WHERE department_id NOT IN (SELECT id FROM departments WHERE location = 'New York' AND id IS NOT NULL);
    
  2. 性能考虑

    • 对于较大的集合,INNOT IN 的性能可能不如连接(JOIN)操作。这是因为 MySQL 需要扫描整个集合以确定结果。在这种情况下,使用连接(JOIN)操作可能会更高效。
    -- 使用 JOIN 代替 IN
    SELECT e.* FROM employees e
    JOIN departments d ON e.department_id = d.id
    WHERE d.location = 'New York';
    
    -- 使用 LEFT JOIN 和 NULL 检查代替 NOT IN
    SELECT e.* FROM employees e
    LEFT JOIN departments d ON e.department_id = d.id AND d.location = 'New York'
    WHERE d.id IS NULL;
    

相关推荐

  1. mysqlINNOT IN

    2024-06-06 04:20:01       29 阅读
  2. mysqlexistsin区别

    2024-06-06 04:20:01       35 阅读
  3. MySQLinexists区别

    2024-06-06 04:20:01       25 阅读
  4. MySQL inexists用法区别

    2024-06-06 04:20:01       37 阅读
  5. MySQL in exists 区别

    2024-06-06 04:20:01       33 阅读
  6. mysql使用IN注意事项

    2024-06-06 04:20:01       59 阅读
  7. MySQL inexists取舍

    2024-06-06 04:20:01       61 阅读
  8. MYSQL inexists

    2024-06-06 04:20:01       30 阅读
  9. MySQL not in not exists 区别

    2024-06-06 04:20:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 04:20:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 04:20:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 04:20:01       82 阅读
  4. Python语言-面向对象

    2024-06-06 04:20:01       91 阅读

热门阅读

  1. 阿里云计算之linux入门命令学习笔记(二)

    2024-06-06 04:20:01       23 阅读
  2. 汽车之家评论

    2024-06-06 04:20:01       31 阅读
  3. flink 状态

    2024-06-06 04:20:01       23 阅读
  4. 0开篇-介绍

    2024-06-06 04:20:01       29 阅读
  5. 在RT-Thread下为MPU手搓以太网MAC驱动-3

    2024-06-06 04:20:01       30 阅读
  6. oracle sql--计算某一日期到当前日期的间隔天数

    2024-06-06 04:20:01       30 阅读
  7. docker mqqt 安装

    2024-06-06 04:20:01       24 阅读
  8. USB - ACK、NAK和STALL的含义

    2024-06-06 04:20:01       36 阅读