我只是在学习 SQL,我想知道以下几行之间有什么区别:
WHERE s.parent IN (SELECT l.parent .....)
相对
WHERE s.parent = (SELECT l.parent .....)
“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
当您使用“IN”时,它可以比较多个值....比如
select * from tablename where student_name in('mari','sruthi','takudu')
但是当你使用'='时,你不能比较多个值
select * from tablenamewhere student_name = 'sruthi'
我希望这是正确的答案
对于未来的访客。
where a.name = b.name
),表 1 中的每个单元格值将与表 2 中所有行的每个单元格值一一进行比较,如果匹配,则将选择该行(此处将选择该行意味着表 1 和表 2) 中的行用于整个结果集,否则将不会被选择。为了更清楚地看到下面的屏幕截图,请注意下面的IN
(和NOT IN
)右侧的完整结果集是如何在整个结果集中被考虑的;整个重点在于,在使用 比较的情况下=
,选择第二个表中的匹配行,而在第二个表中选择IN
完整结果的情况下。
In
可以将一个值与多个值匹配,换句话说,它检查一个值是否在值列表中,例如
x in ('a', 'b', 'x')
将返回真结果,因为 x 在值列表中
虽然=
只期望一个值,但它很简单
x = y 返回假
和
x = x 返回真
一般的经验法则是:
期望与=
单个值进行比较。像这样:
WHERE s.parent = 'father_name'
IN
在 = 无法工作的情况下非常有用,即需要与多个值进行比较的情况。
WHERE s.parent IN ('father_name', 'mother_name', 'brother_name', 'sister_name')
希望这有用!!!
在
当子查询返回多个结果时,这会有所帮助。
=
此运算符不能处理多个结果。
就像在这个例子中一样:
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');
1) 有时 = 也用作比较运算符,以防 IN 没有的连接。2) 您可以在 IN 块中传递多个值,而 = 则无法做到这一点。例如,
SELECT * FROM [Products] where ProductID IN((select max(ProductID) from Products),
(从产品中选择 min(ProductID)))
可以工作并为您提供预期的行数。但是,
SELECT * FROM [Products] where ProductID = (select max(ProductID) from Products)
and ProductID =(select min(ProductID) from Products)
将为您提供“无结果”。这意味着,如果子查询应该返回多个行数,在这种情况下 '=' 是没有用的。