IN 函数 和 and 在where条件中联合使用的注意事项:

本文详细解析了 SQL 中 IN 函数的工作原理及其与其他条件结合使用时的注意事项,特别是 IN 函数与 AND 运算符之间的交互作用,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    IN 函数一般在 where 条件中使用。使用的方法为:

    SELECT columns 

    FROM tables 

    WHERE column1 in (value1, value2, .... value_n);


当where 条件中 IN 函数 和 and 一起使用的时候,需要特别的注意:

先思考一下下列两个语句的查询结果是否一样

   SELECT columns FROM tables WHERE column1 in (value1, value2, .... value_n) AND column2 ='column2';

   SELECT columns FROM tables WHEREcolumn2 ='column2' AND column1 in (value1, value2, .... value_n);


有的人认为:两个条件取并集,与条件的先后关系没有关系,结果应该是一样的。

这种想法是错误的,上面两个语句的结果是不一样的。


IN函数的实质是什么? 一堆OR条件组合的简略形式。

clumn1 =value1 OR column1=value2 OR…… OR column = value_n   等于 column1 in (value1, value2, .... value_n);

说白了,IN函数只是有助于减少OR条件的复合使用。


当把上述两个语句还原:

SELECT columns FROM tables 

WHERE clumn1 =value1 OR column1=value2 OR…… ORcolumn = value_n AND column2 ='column2';

SELECT columns FROM tables 

WHERE column2 ='column2' AND clumn1 =value1 OR column1=value2 OR…… OR column = value_n;


根据 OR 和 AND 的执行顺序,先执行AND,然后执行OR。 

第一个语句先执行column = value_n AND column2 ='column2';获取的值和前面的条件取或值。

第二个语句先执行column2 ='column2' AND clumn1 =value1;获取的值和后面的条件取或值。

column2 ='column2' AND clumn1 =value1 和 column2 ='column2' AND clumn1 =value1 获取的值肯定不同。



所以要实现取 IN函数 和其他条件的并集,只需要在 IN函数 外面添加"()"即可。下面的查询语句的结果是一样的。


  SELECT columns FROM tables WHERE(column1 in (value1, value2, .... value_n)) AND column2 ='column2';

   SELECT columns FROM tables WHERE column2 ='column2' AND(column1 in (value1, value2, .... value_n));








本关任务:查询企业客户表 tb_company 与个人客户表 tb_personal 的所有信息。 编程要求 命令行或图形化两种客户端均可选择来完成查询SQL命令操作闯关。 1、命令行操作方式:: 根据提示,在右侧“代码文件”编辑器补充SQL命令代码,在 begin-end 里面完成SQL命令代码的编写。 2、图形化操作方式: 根据提升,在右侧“图形化界面”使用MySQL Workbench客户端登录MySQL服务器(登录密码:123123)后,在MySQL Workbench里查看数据库数据表及完成SQL命令代码的编写。 (db_ebank数据库数据表结构也可见教材附录) 相关知识 为了完成本关任务,你需要掌握: 查询; 复杂查询; 查询 查询是我们使用数据库最常用的、也是最重要的方法,关键字是 select,使用语法如下: SELECT 字段1 【别名1】,字段2 【别名2】... FROM 表【WHERE 筛选条件】; 筛选条件分类 简单条件运算符:=、!=、>、<、>=、<=。 运算符 筛选条件 = 等于 != 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 语法: SELECT 字段名 FROM 表名 WHERE 字段名 [条件运算符] 参数值; 逻辑运算符:&&(and)、||(or) 、!(not) 运算符 筛选条件 && (and) 与 ||(or) 或 !(not) 非 语法: // 多条件筛选 SELECT 字段名 FROM 表名 WHERE 【筛选条件】 [逻辑运算符] 【筛选条件】; 模糊查询条件: like:一般搭配通配符使用,可以判断字符型或数值型; 通配符:% 任意多个字符,_ 任意单个字符; between ... and ... : 判断属性是否在变量1变量2之间; in:判断属性是否等于那几个常量其中的一个; is nul is not null:判断属性是否为空,= 不能判断 null 属性。 各自语法如下: // LIKE 通配符 SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符%'; // BETWEEN ... AND ... SELECT 字段名 FROM 表名 WHERE 字段名 between 值1 and 值2; // IN SELECT 字段名 FROM 表名 WHERE 字段名 IN (值1,值2,...); // IS NULL IS NOT NULL SELECT 字段名 FROM 表名 WHERE 字段名 is null [is not null]; 分组排序 分组查询的关键字是Group By,查询的是每个分组中 首次出现的一条记录。 语法: SELECT 字段名 FROM 表名 GROUP BY 字段名; 排序查询的关键字是Order By,会对指定字段进行排序。 语法: SELECT 字段名 FROM 表名 OEDER BY 字段名; 复杂查询 嵌套查询 嵌套查询又称子查询,就是把一个查询嵌套在另一个查询当中,在执行过程中先执行子查询的语句,将子查询的结果作为外部查询的筛选条件进行查询。 语句示例: SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2); 子查询可以分为四类: 标量子查询:返回单一值的标量,最简单的形式; 列子查询:返回的结果集是 N 行一列; 行子查询:返回的结果集是一行 N 列; 表子查询:返回的结果集是 N 行 N 列。 连接查询 在 MySQL 中可以使⽤ join 实现多表的联合查询——连接查询,通过连接查询从多张数据表提取数据,join 按照其功能不同分为 三个操作: inner join (内连接):组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集部分。 语句示例: select * from 表1 a inner join 表2 b on a.a_id = b.b_id; left join (左连接):全称是左外连接,是外连接中的一种。 左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为 NULL。 语句示例: select * from 表1 a left join 表2 b on a.a_id = b.b_id; right join (外连接):全称是右外连接,是外连接中的一种。 左表只会显示符合搜索条件的记录,而右表的记录将会全部表示出来。左表记录不足的地方均为 NULL。 语句示例: select * from 表1 a right join 表2 b on a.a_id = b.b_id; union (全连接):将多个结果合并在一起显示出来。 语句示例: (select colum1,colum2...columN from 表1 ) union (select colum1,colum2...columN from 表2 ) 语句注意事项: 通过 union 连接的 SQL 它们分别单独取出的列数必须相同; 不要求合并的表列名称相同时,以第一个 sql 表列名为准; 使用 union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用 union all 进行合并; 被 union 连接的 sql 子句,单个子句中不用写 order by ,因为不会有排序的效果。但可以对最终的结果集进行排序; 聚合函数 聚合函数又叫组函数,通常是对表中的数据进行统计计算,一般结合分组(group by)来使用,用于统计计算分组数据。 常用的五个聚合函数函数名称 作用 COUNT 求指定列的总行数 MAX 求指定列的最大值 MIN 求指定列的最小值 SUM 求指定列的 AVG 求指定列的平均值 示例: select [聚合函数](字段名) from 表名 [where 筛选条件]; 测试说明 平台会对你编写的代码进行测试:
05-12
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值