精华内容
下载资源
问答
  • MySQL查询语句in子查询的优化

    万次阅读 2018-08-28 16:16:07
    项目中有需要,使用MySQL的in子查询,查询符合in子查询集合中条件的数据,但是没想到的是,MySQL的in子查询会如此的慢,让人无法接收,于是上网搜索解决办法,下面记录下: 一、原始in子查询 ...该查询语句居...

    项目中有需要,使用MySQL的in子查询,查询符合in子查询集合中条件的数据,但是没想到的是,MySQL的in子查询会如此的慢,让人无法接收,于是上网搜索解决办法,下面记录下:

    一、原始in子查询

    SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM basic_h WHERE zdcode != "" )

    该查询语句居然耗时45秒左右的时间,实在无法接收

    子查询: SELECT zdcode FROM basic_h WHERE zdcode != ""   只需要约0.05秒查询时间

    将子查询结果放到in中,查询语句瞬间出结果

    分析如下:

    二、解决方法如下:

    (1)仍使用in子查询,多查询一次

    SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM ( SELECT zdcode FROM basic_h WHERE zdcode != "" ) AS h )

    查询速度非常快,毫无延迟

    上面的语句只是对in子查询又做了一次查询

    分析如下:

    (2)使用LEFT JOIN

    SELECT zd.* FROM ( SELECT DISTINCT zdcode FROM basic_h WHERE zdcode != "" ) AS h LEFT JOIN basic_zdjbxx zd ON zd.suiji = h.zdcode

    查询速度也非常快,毫无延迟

    分析如下:

     

    如有更好的的解决方法,请留言告之,谢谢!

     

    让我们一起遨游在代码的海洋里!

    展开全文
  • mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。 如果查询的...

    mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。

    如果查询的两个表大小相当,那么用in和exists差别不大。 

    如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 

    例如:表A(小表),表B(大表)

    1:

    select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;

     

    select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引。 

    相反的

     

    2:

    select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引;

     

    select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。

     

    not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。 

    in 与 =的区别 

    select name from student where name in ('zhang','wang','li','zhao'); 

    与 

    select name from student where name='zhang' or name='li' or name='wang' or name='zhao' 

    的结果是相同的。

    转载于:https://www.cnblogs.com/yizitrd/p/5429745.html

    展开全文
  • 在开发的时候,mybatisl中使用in的时候会遇到一些问题,如果我们传的参数是String类型,以“,”来进行隔开的,例如:参数是0,1,2字符串,mybatis中的语句如下 <select id="findByName" parameterType=...

      在开发的时候,mybatisl中使用in的时候会遇到一些问题,如果我们传的参数是String类型,以“,”来进行隔开的,例如:参数是0,1,2字符串,mybatis中的语句如下

     <select id="findByName" parameterType="string" resultType="com.domain.Factory">
       SELECT * FROM FACTORY WHERE ID IN (#{ids})
     </select>

    如果用#{}来传递参数的话,执行sql语句的时候mybatis的时候它会解析为

    SELECT * FROM FACTORY WHERE ID IN ('0,1,2')

    分析:mybatis中传入的参数它会自动加上‘’把它包裹起来解析成字符串,而我们希望的sql语句是下面的:

    SELECT * FROM FACTORY WHERE ID IN (0,1,2)

    我们可以使用${}来传递参数可以实现上面的sql语句。

     

    #{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。

    ${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

    注意:${}有sql注入的危险

    在mybatis中运用in语句的时候,如果传递的参数是String类型的,例子如上面的情况,可以使用${}来解析传递的参数,但是用这种方法有sql注入的危险。也可以把传递的参数改为Array、List类型,详情请看http://www.cnblogs.com/xusir/archive/2013/07/24/3210286.html里面有介绍。

     

      其实,我们在使用模糊查询的时候也可以使用${}来解析,例子如下:

    <select id="findByName" parameterType="string" resultType="com.domain.Factory">
         SELECT * FROM FACTORY WHERE NAME LIKE "%${parameter}%"
    </select>

    eg.

      select id,name from student where name=#{name}   -- name='ha'

           select id,name from student where name=${name}    -- name=ha

    模糊查询这是一种方法,还有一种方法见:http://www.cnblogs.com/javJoker/p/7260195.html

    转载于:https://www.cnblogs.com/javJoker/p/7345318.html

    展开全文
  • --创建临时表 create table #tb(id varchar(500)) insert into #tb select dbo.f_Get_AllQybm(@qybm)--dbo.f_Get_...--查询记录 declare @a nvarchar(500),@b nvarchar(500); select @b=id from #tb; set...
    --创建临时表
    create table #tb(id varchar(500))
    insert into #tb select dbo.f_Get_AllQybm(@qybm)--dbo.f_Get_AllQybm 是函数
    
    --查询记录
    declare @a nvarchar(500),@b nvarchar(500);
    select  @b=id from #tb;
    set @a='SELECT ROW_NUMBER() OVER(ORDER BY JLRQ DESC) AS RowNumber,* 
    FROM XM_GoodBehavior
    where QYBM in ('+@b+')';
    SET NOCOUNT ON
    exec(@a)
    --删除临时表
    drop table #tb


    以上代码是写在存储过程中的(SET NOCOUNT ON 这句话是为了在finereport报表中使用添加的),创建一个临时表,将查询满足dbo.f_Get_AllQybm函数的值放入临时表,将临时表中的id列给变量@b。

     

    转载于:https://www.cnblogs.com/hllxy/p/7421526.html

    展开全文
  • 在oracle中,in后面的参数个数超过1000个的sql语句拼装
  • 我的思路很简单,select查找course表,然后使用in嵌套一个子查询查询出所有的id。 所以第一次的代码是这样的: SELECT * FROM course cou WHERE cou.id IN ( SELECT c.course_ids FROM class c WHERE ...
  • Mybatis使用IN语句查询

    万次阅读 多人点赞 2018-03-23 16:45:03
    一、简介在SQL语法中如果我们想使用in的话直接可以像如下一样使用:select * from HealthCoupon where useType in ( '4' , '3' )但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错: Map&lt;String, ...
  • #IN查询#采用IN查询获得参加考试的在读学生名单SELECT student_no,student_name FROM student WHERE student_noIN(SELECT student_no FROM resultWHERE subject_no=(#获得参加Logic Java课程最近一次考试的...
  • MongoDb查询语句($ne $in )

    千次阅读 2020-09-30 10:50:13
    mongodb 不等于查询语句$ne、范围包含in语句$in 提示:以下是本篇文章正文内容,下面案例可供参考 一、MongoDb查询语句 不等于查询 use question; db.getCollection("questions").find( { "subjectId" : ...
  • 示例:查询状态不等于0的数据 db.getCollection(‘Wiki’).find({“status”:{ $ne : 0 }}); 2、$in举例: db.things.find( { key : { $in :value } } ); 示例:查询状态为0和1的数据 db.getCollection(‘Wiki...
  • criteriabuilder in 查询语句怎么写

    千次阅读 2019-09-12 19:43:07
    criteriaBuilder.in 得到In对象, 可以用于添加in的列表 Path<Object> path = root.get("hospId"); CriteriaBuilder.In<Object> in = criteriaBuilder.in(path)...
  • 含有IN的子查询 含有IN的子查询特点: 通过IN引入的子查询结果是包含0个或多个值的列表,他表示的是一种值的”等于”关系 ...注:语句中的search_expression可以是变量值,列名,表达式或子查询...
  • Delphi使用in语句引入子查询,设定查询条件:由in引入子查询的例子,以子表的方式查询学生名称为李丽的信息,测试前请把Database目录中的SQL数据库文件附加好,并设置数据库连接信息,然后点击“查询”按钮即可。...
  • 主要介绍了浅谈pymysql查询语句中带有in时传递参数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • sql查询语句,查询语句

    2015-05-05 03:28:27
    假如我在某张表中得出5条数据分别是: ...select * from VDishList where DishId in(571,580,671,571,571) 问题来了,按道理应该是得出5条数据,为什么数据查询出来只有3条?我想看到5条,这能做到的吗???
  • 报错如下 java.lang.IllegalArgumentException: Encountered array-valued parameter binding, but was expecting [java.lang.String (n/a)] 具体原因不明,只是我之前传的是String数组,改成了集合类以后就可以...
  • Select查询语句

    2019-07-23 19:37:34
    Select查询语句 1.1 查询语句 select [distinct] 字段名1 [as 别名1], 字段名2 [as 别名2], … from 表名 [where 查询的条件]; 1.2 按照范围进行查找 between … and … – 表示查询在…和…之间的内容,而且是闭...
  • 最近在写SQL语句时,对选择IN 还是Exists 犹豫不决,于是把两种方法的SQL都写出来对比一下执行效率,发现IN查询效率比Exists高了很多,于是想当然的认为IN的效率比Exists好,但本着寻根究底的原则,我想知道这个...
  • 有一张表tableA,在tableA表的ID...如果in后面括号中的枚举值的个数超过4个,则在执行查询时,将会执行全表扫描,不会使用到索引(自己实践得出,或许他人早已得知)。 002 in后面括号中的枚举值的个数超过1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,168
精华内容 3,667
关键字:

查询语句in