2014-02-26 62 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')

我懷疑第二個查詢更快。

相關問題