2013-03-03 293 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

相關問題