2013-03-03 162 views
-1

我刚学SQL,我想知道有什么区别以下线之间:SQL中的IN运算符和=运算符有什么区别?

WHERE s.parent IN(SELECT l.parent .....)

WHERE s.parent =(SELECT l.parent .....)如果你有子查询多个结果

+3

你应该在你提出问题之前将它谷歌。 – 2013-03-03 05:27:42

+2

虽然每个技术问题的答案都是如此,但这不是很棒吗?然后当你谷歌搜索时,他们会在这里结束。 – 2013-03-03 05:28:22

+0

你试过你的查询吗? – Habibillah 2013-03-03 05:28:30

回答

5

IN

不会产生错误。 允许在子查询返回的结果中有多个值。如果你有子查询多个结果

=

会产生错误。

+0

谢谢。所以,换句话说,只要使用=运算符就可以使用IN运算符,而不是相反呢? – user1363410 2013-03-03 05:43:00

+0

* ..只要使用=运算符,就可以使用IN运算符。* - 我没有明白你的意思,但问题是,如果子查询返回多个值,则使用'IN'。 – 2013-03-03 05:47:30

1

In可以匹配与多于一个的值的值,换句话说,它会检查是否一个值是在值的列表所以对于例如

x in ('a', 'b', 'x')将返回真结果作为x为值

的列表而=预计只有一个值,其那样简单

X = Y返回false

x = x返回true

2

当您使用'IN'时,它可以比较多个值....例如

SELECT * FROM表名,其中student_name在( '真理', 'sruthi', 'takudu')

但是当你使用 '=' 你不能多值

SELECT * FROM比较tablenamewhere student_name =“sruthi”

我希望这是正确的答案

2

的“IN”的条款也非常非常多的要慢得多。如果你有在

IN (SELECT l.parent .....)选择部分许多成果,

这将是非常低效的,因为它实际上是为每个单独的选择SQL语句并在SELECT语句中的每一个结果......所以如果你返回'猫','狗','牛'

它将基本上为每个结果创建一个sql语句...如果您有200个结果...您将获得完整的sql语句200次...需要永久。 ..(这是几年前的......也许现在已经被打乱了......但是在大的结果集上它的速度非常慢。)

更有效做内连接,例如:

Select id, parent 
from table1 as T 
inner join (Select parent from table2) as T2 on T.parent = T2.parent 
1

一般的经验法则是:

=要求单一值与之比较。就像这样:

WHERE s.parent = 'father_name' 

IN是在场景中=不能工作,你需要有多个值的比较,即场景中是非常有用的。

WHERE s.parent IN ('father_name', 'mother_name', 'brother_name', 'sister_name') 

希望这是有用的!

1

对于未来的访问者。

  • 基本处于平等的情况下(只记得我们在这里说话像where a.name = b.name)从表2,表1中的每个单元格的值进行比较逐一所有行的每个单元格的值,如果它匹配,那么将选择该行将被选择(这里该行将被选择意味着来自表1和表2的行),否则将不会选择整个结果集。
  • 现在,在IN的情况下,在IN右侧的完整结果集将用于比较,因此它将像表1中的每个值一样检查该单元格值是否存在于完整的结果集中如果IN存在,那么IN的结果集的所有行都会显示该值,所以假设IN结果集有20行,这样表1中的单元格值将出现在整个结果集中20次(即该特定单元值将具有20行)。

为了更清楚看到下面的屏幕截图,低于通知结果从右侧设置如何完成IN(和NOT IN)在整个结果集考虑; 整体强调的是在使用=的情况下比较的情况下,选择第二张表的匹配行,而在IN的情况下选择第二张表的完整结果。

enter image description here

相关问题