在select中使用select时,SQL IN关键字如何工作?

在select中使用select时,SQL IN关键字如何工作?,sql,select,Sql,Select,在SQL中,您可以像这样使用: SELECT name, continent FROM world WHERE continent IN ( SELECT continent FROM world WHERE name IN ('Belize', 'Thailand') ); 但我习惯于看到的是这样使用: SELECT column_name(s) FROM table_name WHERE column_name IN ('Happy','Happened','Fi

在SQL中,您可以像这样使用:

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

但我习惯于看到的是这样使用:

SELECT column_name(s)
FROM table_name
WHERE column_name IN ('Happy','Happened','Fish');
那么SQL是否会自动将嵌套的select转换为类似的内容呢

('Test1','Test2','Test3')

简单的答案是否定的。事实上,您提供的两个示例并不相似。

首先执行第一个示例中的内部查询,然后计算中的

第一个示例是子查询(嵌套查询),其计算方式如下:

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

它将返回一个表,然后过滤与投影表中的
大陆
匹配的主查询

第二个将筛选与值的数组中的
大陆
匹配的主表

但是,如果第一个示例返回以下内容,则结果可能相同:

column_name
---------
'Happy'
'Happened'
'Fish'
第二个查询过滤器数组是
('Happy'、'accounted'、'Fish')


我怀疑第二个查询速度更快。

不,第一个示例中的内部查询首先执行,然后计算
中的
。通常,应该避免对子查询使用in,而是使用join。@user2989408-好的,我现在明白了。所以,第一个内部查询带回了亚洲和北美,然后这就和INI一起使用了,我猜你们会感到困惑。要计算outter,most查询需要从子查询返回的值,子查询需要将自身的行与传入in运算符的值相匹配。