2013-03-03 7 views
-1

Я только учусь SQL, и мне интересно, в чем разница между следующими линиями:В чем разница между оператором IN и оператором = в SQL?

ГДЕ s.parent IN (SELECT l.parent .....)

против

WHERE s.parent = (SELECT l.parent .....)

+3

вы должны Google, прежде чем спросить. – 2013-03-03 05:27:42

+2

Не было бы здорово, если бы каждый ответ на каждый технический вопрос был на SO, хотя? Тогда, когда вы Googled это, они в конечном итоге здесь. –

+0

У вас есть ваш запрос? – Habibillah

ответ

5

IN

не будет генерировать ошибку, если у вас есть несколько результатов на вложенный запрос. Позволяет иметь более одного значения в результате, возвращаемом подзапросом.

=

выдаст ошибку, если у вас есть более одного результата на вложенный запрос.

+0

Спасибо. Итак, другими словами, нормально использовать оператор IN всякий раз, когда используется оператор =, но не наоборот? – user1363410

+0

* .. нормально использовать оператор IN всякий раз, когда используется оператор =. * - Я не понял, что вы имеете в виду, но дело в том, что если подзапрос возвращает несколько значений, используйте 'IN'. –

1

In может соответствовать значение с более чем одним значений, другими словами, он проверяет, является ли значение в списке значений так, например, дл

x in ('a', 'b', 'x') вернет истинный результат, х находится в списке значений

в то время как = ожидает только одно значение, его так просто, как

х = у возвращает ложные

и

x = x возвращает true

2

, когда вы используете «IN», он может сравнивать несколько значений .... например,

выберите * из имя_таблицы где student_name в ('мари', 'Шрути', 'takudu')

, но когда вы используете '=' Вы не можете сравнить несколько значений

select * from tablenamewhere student_name = «Шрути»

я надеюсь, что это правильный ответ

2

«In» пункт также многое многое медленнее. Если у вас есть много результатов в избранной части

IN (SELECT l.parent .....),

будет крайне неэффективным, так как она на самом деле создает отдельный оператор выбора 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 
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), каждое значение ячейки из таблицы 1 будет сравниваться по одному каждому значению ячейки всех строк из таблицы 2, если он затем эта строка будет выбрана (здесь эта строка будет выбрана, это означает, что строка из таблицы 1 и таблицы 2) для общего набора результатов иначе не будет выбрана.
  • Теперь, в случае IN, для сравнения будет использоваться полный набор результатов с правой стороны IN, поэтому его, как и каждое значение из таблицы 1, будет проверяться на наличие этого значения ячейки в полном наборе результатов IN, если он присутствует, то это значение будет отображаться для всех строк набора результатов IN, поэтому пусть в наборе результатов IN установлено 20 строк, так что значение ячейки из таблицы 1 будет присутствовать в общем результирующем наборе 20 раз (т.е. конкретное значение ячейки будет содержать 20 строк).

Для большей ясности смотри ниже снимок экрана, уведомления ниже, что, как полный набор результатов из справа от INNOT IN) рассматривается в общем наборе результатов; Весь акцент делается на том факте, что в случае сравнения с использованием =, выбран ряд строк из второй таблицы, а в случае IN выбран полный результат из второй таблицы.

enter image description here