我只是在学习SQL,我想知道以下几行之间有什么区别:
WHERE.parent IN(SELECT l.parent .....)
与
WHERE s.parent =(SELECT l.parent .....)
答案 0 :(得分:10)
答案 1 :(得分:3)
当你使用'IN'时它可以比较多个值....比如
从tablename中选择*,其中student_name in('mari','sruthi','takudu')
但是当你使用'='时,你无法比较多个值
select * from tablenamewhere student_name ='sruthi'
我希望这是正确的答案
答案 2 :(得分:3)
“IN”子句的速度要慢得多。如果
的选择部分有很多结果 IN (SELECT l.parent .....)
,
它会非常低效,因为它实际上为select语句中的每个结果生成一个单独的select sql语句...所以如果你返回'Cat','Dog','Cow'
它基本上会为每个结果创建一个sql语句...如果你有200个结果......你得到完整的sql语句200次......永远需要......(这是几年前的结果。 ..现在可能已经得到了改进......但是在大结果集上却非常缓慢。)
更有效地进行内部联接,例如:
Select id, parent
from table1 as T
inner join (Select parent from table2) as T2 on T.parent = T2.parent
答案 3 :(得分:1)
In
可以匹配具有多个值的值,换句话说,它会检查值是否在值列表中,例如。
x in ('a', 'b', 'x')
将返回true结果,因为x位于值列表
而=
只需要一个值,就像
x = y返回false
和
x = x返回true
答案 4 :(得分:1)
一般的经验法则是:
=
期望与之比较单个值。像这样:
WHERE s.parent = 'father_name'
IN
在=无法工作的情况下非常有用,例如您需要与多个值进行比较的情况。
WHERE s.parent IN ('father_name', 'mother_name', 'brother_name', 'sister_name')
希望这很有用!!!
答案 5 :(得分:1)
面向未来的访问者。
where a.name = b.name
),表1中的每个单元格值将逐一与表2中所有行的每个单元格值进行比较,如果是匹配然后将选择该行(此处将选择行表示来自表1和表2的行),否则将不会选择整个结果集。 为了更加清晰,请参阅下面的屏幕截图,请注意下面的整体结果集中如何考虑IN
(和NOT IN
)右侧的完整结果集。 整体强调的事实是在使用=
进行大小写比较时,选择了第二个表中的匹配行,而在IN
的情况下,选择了第二个表的完整结果。
答案 6 :(得分:0)
IN
这在子查询返回多个结果时有帮助。
=
此运算符不能处理多个结果。
如本例所示:
SQL>
Select LOC from dept where DEPTNO = (select DEPTNO from emp where
JOB='MANAGER');
给出错误ORA-01427:单行子查询返回多个行
代替使用
SQL>
Select LOC from dept where DEPTNO in (select DEPTNO from emp
where JOB='MANAGER');
答案 7 :(得分:0)
1)有时=在IN不存在的联接的情况下也用作比较运算符。 2)您可以在IN块中传递多个值,而不能使用=传递这些值。例如,
SELECT * FROM [Products] where ProductID IN((select max(ProductID) from Products),
(从产品中选择min(产品ID))
可以工作,并为您提供预期的行数。
SELECT * FROM [Products] where ProductID = (select max(ProductID) from Products)
and ProductID =(select min(ProductID) from Products)
将为您提供“没有结果”。这意味着,如果子查询应该返回多个行,那么'='就没有用了。