SQL 中使用in语句

问题描述

在写sql时,听说过in语句的执行效率比较低,但是下面的情况我必须要用in语句,如一个表customer的主键为ID,我在程序里面找到了要取出来的所有的customer的ID然后我要根据这些ID把customer的详细信息从数据库中取出来,我只好用in了不知道这种情况有没有不用in语句的办法

解决方案

解决方案二:
同问,我的sql也很烂,平时也老用in...
解决方案三:
不一定,如果in里边的语句执行效率低,并且如果这个返回的数组比较大的话,那会比较响整个语句。不管怎么说in和=号肯定也是要差距的,但也有相同之处就是都是在什么范围内的,索引也能支持。但如果是!=或是notin,不在什么范围,那是索引不支持的。所以看情况吧。
解决方案四:
selectc.*fromcustomerc,另一张表wherec.id=另一张表.id楼主是想表达这意思么?
解决方案五:
用=号,或者用过程来实现
解决方案六:
主键为ID,这个是固定值的话,=号就好了in是一个集合,先判断下exists
解决方案七:
可以啊那就是一个ID的查询customer的详细信息
解决方案八:
可以你用=号啊select*from表名ID=要查询ID就可以
解决方案九:
in虽然会降低效率,关键还看用在何处了,如果客户感受速度可以,用in也无防.大家都因为降低一点效率不用in,用函数等其他方法,效率不是更低.
解决方案十:
1.尽量用关联查询,2.关联查询解决不了,可以考虑使用存储过程3.如果id是在程序里得到的可以考虑拼接sql语句,拼接成这种形式id='id1'orid='id2'or..4.如果id数量不太多,比如几十个,可以直接用in,效率上没什么区别的
解决方案十一:
不能一概而论吧如果id数据量较少用in效率还是很好的
解决方案十二:
数据量有多大呢?有没有百万级??~需要的话customer得主键ID上最好建个索引。
解决方案十三:
有时候用where子查询速度要比连接查询速度快些数量在10万左右的话,就用in,如果在百万级的话,那考虑建一个索引
解决方案十四:
顶!学习!
解决方案十五:
上传过一个连接查询PDF---自己看去吧!
解决方案:
如果ID是索引字段,那么用IN会导致索引失效,导致全表扫描,大数据量的情况下可能是致命的问题。如果ID的数量不多,就算对每一个ID执行一条查询语句,只要能用到索引,也是值得的。
解决方案:
in和exists看情况使用吧in在对付大的数据集合的时候很不理想还是使用exists好但exists对多条件支持不好
解决方案:
一般的说法是用exists代替in,用notexists代替notin。你这种情况倒是可以用连接代替子查询,理论上更高效。
解决方案:
我不知道什么in不in的,我写代码用的是spring,一般不会用到这个in。也能做到你的功能。有的时候用and是不是也可以啊。
解决方案:
我一般不把这些逻辑写在SQL语句中如果按你所说的意思我大概理解为表a;表bselect*fromawhereidin(selectidfromb)我一般都是通过代码吧ID全部查询出来然后通过传参吧ID传入完成所要查找详细信息的action中
解决方案:
我们的系统数据量是很大的,但是一般这种情况用in或者exists。没发现效率有多么不好。但是实用in的时候需要注意一下,这个是我同事和我说的,但是我没遇到过。就是in后面的括号里是有大小限制的,如果太大就会报sql异常。这里所说的大小就是将括号里的字符串拼起来的大小。

时间: 2024-12-06 03:24:18

SQL 中使用in语句的相关文章

sql中的select语句执行属性问题

问题描述 sql中的select语句执行属性问题 SELECT orders.*, (SELECT username FROM USER WHERE orders.user_id = user.id)username, (SELECT sex FROM USER WHERE orders.user_id = user.id)sex FROM orders 下面这个语句 的执行顺序是啥 这个语句这样写感觉好奇怪 有没有对sql比较懂得大神 解决方案 先执行子查询,然后结果保留,然后执行外部查询进行

pl/sql中操作DML语句

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 INSERT     DECLARE  v_empno emp.empno%TYPE := &empno;  v_ename emp.ename%TYPE := '&ename';  v_salary emp.sal%TYPE := &sal;  BEGIN  INSERT INTO emp(empno,ename,s

SQL中代替Like语句的另一种写法

比如查找用户名包含有"c"的所有用户, 可以用 use mydatabaseselect * from table1 where username like'%c%" 下面是完成上面功能的另一种写法:use mydatabaseselect * from table1 where charindex('c',username)>0这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字符串及其它的运算上,

在SQL中代替Like语句的另一种写法

语句 比如查找用户名包含有"c"的所有用户, 可以用 use mydatabaseselect * from table1 where username like'%c%" 下面是完成上面功能的另一种写法:use mydatabaseselect * from table1 where charindex('c',username)>0这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字符串及其它的运

SQL中代替Like语句的另一种写法_数据库其它

比如查找用户名包含有"c"的所有用户, 可以用 use mydatabase select * from table1 where username like'%c%" 下面是完成上面功能的另一种写法: use mydatabase select * from table1 where charindex('c',username)>0 这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字 符串及其它

sql中的iif语句详解

IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(«Logical Expression», «Numeric Expression1», «Numeric Expression2») 如果 «Logical Expression» 取值为 TRUE,则此函数返回 «Numeric Expression1»,否则,返回 «Numeric Expression2». 字符串 IIf(«Logical Expression», «String Expression1», «S

SQL邮件自动应答(根据收到的邮件中的查询语句回复语句执行结果)

语句|执行 SQLMail可以收发邮件,可能好多人都有xp_sendmail发送过邮件,这里介绍一种邮件服务器接收邮件后,根据邮件内容(只能是查询语句)把邮件中的查询语句执行后的结果以附件形式自动返回给发送邮件者. eg: 发送邮件,邮件内容为: select top 10 id,name from sysobjects则服务器自动回复邮件,内容为上述查询语句的执行结果,以附件形式发送. 1:当然是先配置好SQL邮件服务了,这方面的资料比较多,此处不赘述. 2: 把sp_processmail稍

Oracle中PL/SQL中if语句的写法介绍

以下是对Oracle中PL/SQL中if语句的写法进行了详细的分析介绍,需要的朋友可以过来参考下   复制代码 代码如下: /* If语句: 判断用户输入的数字. */ set serveroutput on --接收键盘输入 accept num prompt '请输入一个数字:'; declare   --将屏幕输入的数字付给变量   pnum number := # begin   if pnum = 0 then dbms_output.put_line('您输入的是0');   end

基于SQL中的数据查询语句汇总

以下是对SQL中的数据查询语句进行了汇总介绍,需要的朋友可以过来参考下   where条件表达式 --统计函数 复制代码 代码如下: Select count(1) from student; --like模糊查询 --统计班上姓张的人数 复制代码 代码如下: select count(*) from student where realName like '张%'; --统计班上张姓两个字的人数 复制代码 代码如下: select count(*) from student where rea