sqlin结果集
A. sql 中的in 和exists区别
in和exists在功能上本质没有区别,唯一的区别就在于性能。也就是说同样的sql你用那个执行效率高的问题。
其实说简单点就是exists用到了关联,而in是在一个大的数据及合理筛选,这么说性能的优劣你就很明白了吧。关联的速度是要大于筛选的,所以你只要能用exists就别用in,这是写出好的sql语句的基本规则。
exists是查询是否存在,它后边跟的语句是查询*还是直接写个1,效果都一样,比如你看到的sql的例子,我把*改成1,结果都一样的。
select sno,sname,sdept
from student s1
where exists
(select 1 --*
from student s2
where s2.dept=s1.depe
and s2.name='小刘');
比如说这个例子学生表被赋予了两个别名s1和s2
语句中要求dept和depe相等,我把上边的语句改一下你可能就明白他的意思了:
select sno,sname,sdept
from student s1 ,student s2
where s1.dept =s2.depe
and s1.name = '小刘';
语句就是为了要看出student表中某两行或者多行之间的关系,所以要对自己关联,你仔细看一下你所面对的student表的每一列,就可能看明白了。
记住sql不要从技术上去理解,你就直接把它的功能用汉字表达出来,然后去理解就行了,跟我们说话时一个样的:
从表student中找到dept和(student表中)depe相同的名字叫小刘的学生
B. SQL中如何取出用in查询后的结果集
这个问题你提的不够清楚。建议你还是举个例子比较容易让人明白。
in和exists用法上比较类似:
select * from emp where emp_id in (select emp_id from manager)
select * from emp a where exists (select emp_id from manager where emp_id=a.emp_id)
其实我遇到的情况来看,大多数情况的SQL都可以用另一个改写。个别情况exists没办法用in替换,之前曾遇到一个SQL要表示其他相关表的资料存在状况,想了很久都没有办法用in改写,例子手头没有。
还是讲你的实际问题吧,你发出来,大家想想解决办法吧。
C. sql语句中条件查询里in、like、及=三个的效率怎么样
1、如果条件字段都是非索引字段,那么效率都差不多,就看结果大小。
2、有差别的在于条件字段是索引字段时:
=在所以的情况下都会进行索引扫描,所以效率总是高的。
like 当模糊查询为右模糊,比如'abc%'时,扫描索引,高效。
当模糊查询含左模糊时,比如'%abc',进行全表扫描,低效。
in的作用等同于or ,也是进行索引扫描,高效。
另外,in还可以连接查询结果集,这时往往会和exists做比较。
a、 select * from t1 where f1 in (select f1 from t2 where t2.fx='x'),
其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。
b、 select * from t1 where f1 in (select f1 from t2 where t2.fx=t1.fx),
其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般效率不如exists,数据量大时,效果就更加明显。
D. sql中in和exist语句的区别
两者都能实现表功能查询,主要区别如下:
1、适用表的类型不同。
in是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而外面的表结果集大的情况。
exists是外面的表位驱动表,子查询里面的表为被驱动表,故适用于外面的表结果集小而子查询结果集大的情况。
2、子查询关联不同。
exists一般都是关联子查询。对于关联子查询,必须先执行外层查询,接着对所有通过过滤条件的记录,执行内层查询。外层查询和内层查询相互依赖,因为外层查询会把数据传递给内层查询。
in则一般都是非关联子查询,非关联子查询则必须先完成内层查询之后,外层查询才能介入。
3、执行次数不同。
IN 语句:只执行一次,确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。
EXISTS语句:执行次数根据表的长度而定。指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。
E. sql条件in三个sql的查询结果
你没写具体内容不好判断,不过一般来说是两种情况。
(1)三个sql取交集,这种情况下用and就可以,也就是满足第一个sql的同时满足第二个sql,而且还满足第三个sql。
where
字段
in(sql1)
and
字段
in(sql2)
and
字段
in(sql2)
(2)三个sql是并集的关系,那么用or就可以,要么满足第一个,要么第二个,要么第三个。
where
字段
in(sql1)
or
字段
in
(sql2)
or
字段
in(sql3)
当然如果有什么特殊的,那就不好说了。
F. sql中 in的用法
这样写
select * from proct where cid in(select cid from
category where cid= 10 or pid =10 )
其中 select cid from category where cid= 10 or pid =10
是得到 包括自己在内的大类下面的所有小类的cid
得到了所有满足条件的 cid 后就可以select出 所有类别下面的 产品
然后如果要排序 就在最后加 order by 什么的
G. sql server in()如何运用
您好:
IN后面跟一个结果集
SELECT*FROM表WHERE字段IN('值1','值2','值3')
或者跟一个子查询
SELECT*FROM表WHERE字段IN(SELECT字段FROM表)
H. sql 里等于与 in区别
比如说student表(ID,学生姓名)
查一个学生
select * from student where 学生姓名='张三'
select * from student where 学生姓 in('张三' )
查二个学生
select * from student where 学生姓名='张三' or 学生姓名='李四'
select * from student where 学生姓 in('张三' ,'李四')
明白了吧。。在于要查的值多少的问题。。多的话少了N-1个OR,如果有AND条件还少了几个括号!!