首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

MYSQL中in的用法

2023-11-13 来源:华拓网

   以如下SQL为例,分析in在嵌套查询语句中的工作原理:

SELECT * FROM A WHERE id IN (SELECT id FROM B);)
   等价于:
  • SELECT id FROM B ----->先执行in中的查询,并且缓存结果集;
  • SELECT * FROM A WHERE A.id = B.id。
  •    工作原理:缓存B中查询出来的id,A表查询时把A表的id与缓存数据比较,满足条件的数据加入结果集。   以上SQL语句中,in中的子查询语句仅仅执行一次,它查询出B中的所有的id并缓存起来,然后检查A表中的id在缓存中是否存在,如果存在则将A的当前记录加入到结果集中,直到遍历完A表中所有记录为止。 适用场景  从内外表数据量的大小视角剖析,B表数据比A表数据小,B表符合要求的数据都被缓存起来,A中每查询一次就与缓存中的数据比较一次。以下用遍历结果集的方式来分析IN查询:
     private void search() { List result = new ArrayList(); //结果集 String A[] = {"select * from A"}; // 存储从A表查询到的结果集 String B[] = {"select * from B"}; // 存储从B表查询到的结果集 for (String bValue : B) { for (String aValue : A) { if (aValue.equals(bValue)) { result.add(aValue); break; } } } System.out.println(result); }

       通过以上Java伪代码可以看出,当B表的数据较大时不适合使用in查询,因为它会遍历B表中的全部记录。

    案例分析   1、A表中有100条记录,B表中有1000条记录,那么最多可能遍历1000*100次,效率很差;   2、A表中有1000条记录,B表中有100条记录,那么最多可遍历100*1000此,内循环次数减少,效率大大提升。小结   IN查询适合B表数据量比A表数据量小的情况,并且是从缓存中取数据。

    MYSQL中in的用法

    标签:search   pre   数据   循环   class   mysql   col   array   break   

    小编还为您整理了以下内容,可能对您也有帮助:

    数据库in的用法

    数据库in的用法的用法你知道吗?下面我就跟你们详细介绍下数据库in的用法的用法,希望对你们有用。

      数据库in的用法的用法如下:

    MySQL IN 语法

    IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下:

    WHERE column IN (value1,value2,...)

    WHERE column NOT IN (value1,value2,...)

    当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择。

    IN 使用实例

    选取 uid 为 2、3、5 的用户数据:

    SELECT * FROM user WHERE uid IN (2,3,5)

    返回查询结果如下:

    uid

    username

    password

    email

    regdate

    2 小明 a193686a53e4de85ee3f2ff0576adf01 xiao@163.com 1278063917

    3 Jack 0193686a35e4de85ee3f2ff0567adf490 jack@gmail.com 1278061380

    5 5idev a193686a53e4de85ee3f2ff0576adf01 5idev@5idev.com 1291107029

    IN 子查询

    更多情况下,IN 列表项的值是不明确的,而可能是通过一个子查询得到的:

    SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)

    在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。首先通过一个查询得到所有所有 status=0 的用户:

    SELECT uid FROM user WHERE status=0

    然后将查询结果作为 IN 的列表项以实现最终的查询结果,注意在子查询中返回的结果必须是一个字段列表项。

    IN 运算符补充说明

    IN 列表项不仅支持数字,也支持字符甚至时间日期类型等,并且可以将这些不同类型的数据项混合排列而无须跟 column 的类型保持一致:

    SELECT * FROM user WHERE uid IN(1,2,'3','c')

    一个 IN 只能对一个字段进行范围比对,如果要指定更多字段,可以使用 AND 或 OR 逻辑运算符:

    SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','5idev')

    使用 AND 或 OR 逻辑运算符后,IN 还可以和其他如 LIKE、>=、= 等运算符一起使用。

    关于 IN 运算符的效率问题

    如果 IN 的列表项是确定的,那么可以用多个 OR 来代替:

    SELECT * FROM user WHERE uid IN (2,3,5)

    // 等效为:

    SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)

    一般认为,如果是对索引字段进行操作,使用 OR 效率高于 IN,但对于列表项不确定的时候(如需要子查询得到结果),就必须使用 IN 运算符。另外,对于子查询表数据小于主查询的时候,也是适用 IN 运算符的。

    数据库in的用法

    数据库in的用法的用法你知道吗?下面我就跟你们详细介绍下数据库in的用法的用法,希望对你们有用。

      数据库in的用法的用法如下:

    MySQL IN 语法

    IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下:

    WHERE column IN (value1,value2,...)

    WHERE column NOT IN (value1,value2,...)

    当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择。

    IN 使用实例

    选取 uid 为 2、3、5 的用户数据:

    SELECT * FROM user WHERE uid IN (2,3,5)

    返回查询结果如下:

    uid

    username

    password

    email

    regdate

    2 小明 a193686a53e4de85ee3f2ff0576adf01 xiao@163.com 1278063917

    3 Jack 0193686a35e4de85ee3f2ff0567adf490 jack@gmail.com 1278061380

    5 5idev a193686a53e4de85ee3f2ff0576adf01 5idev@5idev.com 1291107029

    IN 子查询

    更多情况下,IN 列表项的值是不明确的,而可能是通过一个子查询得到的:

    SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)

    在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。首先通过一个查询得到所有所有 status=0 的用户:

    SELECT uid FROM user WHERE status=0

    然后将查询结果作为 IN 的列表项以实现最终的查询结果,注意在子查询中返回的结果必须是一个字段列表项。

    IN 运算符补充说明

    IN 列表项不仅支持数字,也支持字符甚至时间日期类型等,并且可以将这些不同类型的数据项混合排列而无须跟 column 的类型保持一致:

    SELECT * FROM user WHERE uid IN(1,2,'3','c')

    一个 IN 只能对一个字段进行范围比对,如果要指定更多字段,可以使用 AND 或 OR 逻辑运算符:

    SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','5idev')

    使用 AND 或 OR 逻辑运算符后,IN 还可以和其他如 LIKE、>=、= 等运算符一起使用。

    关于 IN 运算符的效率问题

    如果 IN 的列表项是确定的,那么可以用多个 OR 来代替:

    SELECT * FROM user WHERE uid IN (2,3,5)

    // 等效为:

    SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)

    一般认为,如果是对索引字段进行操作,使用 OR 效率高于 IN,但对于列表项不确定的时候(如需要子查询得到结果),就必须使用 IN 运算符。另外,对于子查询表数据小于主查询的时候,也是适用 IN 运算符的。

    mysql查询 怎么使用 in

    in作为查询条件,一般典型有两种用法:

    一是IN常量,例如下面语句查询一、三年级的学生:

    SELECT * FROM student WHERE grade IN ('一','三');

    二是使用子查询,也就是IN(SQL语句),例如下面的语句查询不及格的班级的所有学生:

    SELECT * FROM student WHERE classno IN (

    select classno from scores where score<60

    );

    mysqlin一个条件和等于

    如果子查询只有1条记录,in和=是没有区别,如果子查询有多条记录,用=会出错的,所以in是无论只查询有多少条记录都可以使用,而=只有当子查询只有1条记录的时候才能使用 in和exists理解上其实是差不多,但对数据库而言,in的执行顺序是先执行只查询条件,然后把记录和外查询核对,找符合条件的, 而exists是先执行外查询,再执行子查询,找到外查询记录后和只查询对比符合条件的, 如果外查询和子查询的条目数差异很大,那么效率相差很明显的

    显示全文