2014-02-26 51 views
0

在SQL中,你可以使用一个像这样:在select中使用select时,SQL IN关键字如何工作?

SELECT name, continent 
FROM world 
WHERE continent IN (
    SELECT continent 
    FROM world 
    WHERE name IN ('Belize', 'Thailand')); 

source

但我已经习惯看到是在使用这样的:

SELECT column_name(s) 
FROM table_name 
WHERE column_name IN ('Happy','Happened','Fish'); 

也是如此SQL自动将嵌套选择变成这样的东西?

('Test1','Test2','Test3') 
+2

不,你的第一个例子中的内部查询首先被执行,然后评估'IN'。 – user2989408

+3

作为一项规则,应避免使用针对子查询来支持连接。 – Maess

+0

@ user2989408 - 好吧,我现在明白了。所以第一个内部查询带回亚洲和北美,然后与IN – Coffee

回答

1

简单的答案是NO。事实上,你提供的两个例子甚至都不相似。
首先执行第一个示例中的内部查询,然后对IN进行评估。

1

第一个例子是一个子查询(嵌套查询),它将评价是这样的:

enter image description here

它将返回一个表格,然后过滤,在投影表匹配Continent主查询。

第二个将过滤与Continent相匹配的主表数组的值。

然而,结果可以是相同的,如果第一个例子返回此:

column_name 
--------- 
'Happy' 
'Happened' 
'Fish' 

和第二查询器阵列是('Happy','Happened','Fish')

我怀疑第二个查询更快。

相关问题