Member 12673779 Ответов: 2

Разница между isnull и оператором (! =)


Привет,

Может ли кто-нибудь сказать мне, пожалуйста, в чем разница между функцией isnull is != operator.

Что я уже пробовал:

например
Я хочу найти сотрудников, у которых нет менеджера или чей менеджер равен нулю.
Что я должен использовать функцию ISNULL или оператор != и какой подход хорош? и почему?

EmpID	EmpName	ManagerID
1	Gayatri	1
2	Radhika	[NULL]
3	Chetan	[NULL]
4	Ankur	5
5	Chhuts	11

PIEBALDconsult

Да.

Robert Welliever

Просто любопытно, если сотрудники, у которых нет менеджера, являются нулевыми, как еще вы обозначаете сотрудников, у которых нет менеджера? Похоже, вам нужно будет только проверить наличие null. Если вы просто проверяете null, вы можете пойти с тем, что является наиболее распространенным, т. е.:

Выберите * из сотрудников, где ManagerID равен NULL

Robert Welliever

Я вижу, что решение было выбрано, но решение не отвечало точно на ваш вопрос в том, что проверка равна нулю и использование функции ISNULL-это две разные вещи. Возможно, вы захотите понять этот нюанс. Также на уровне лучших практик не используйте !=, вместо этого используйте < & gt;. Многие крупные организации (например, Microsoft) не рекомендовали использовать! = (хотя все еще поддерживали). Хотя я не совсем уверен, почему он был устаревшим (может быть, стандарт SQL-92?) Я бы не стал создавать привычки против лучших практик без причины.

2 Ответов

Рейтинг:
5

OriginalGriff

Попробовать это.
Вы получите разные результаты...

SELECT * FROM MyTable WHERE Manager != NULL
Не даст вам никаких ссор.
SELECT * FROM MyTable WHERE Manager IS NOT NULL
Даст вам строки, где есть менеджер.
Почему? Потому что согласно W3Schools[^] "Невозможно проверить наличие нулевых значений с помощью операторов сравнения, таких как=, < или <>."
Нули распространяются через выражения - все, что связано с нулевым значением, приводит к нулю. Поэтому, когда вы используете условие, включающее оператор равенства, и одна из сторон равна нулю, результат не является истинным или ложным, он равен нулю.
На самом деле, оба они приведут к одинаковым результатам:
SELECT * FROM MyTable WHERE Manager != NULL

SELECT * FROM MyTable WHERE Manager = NULL
Оба не дают вам никаких ссор!


Maciej Los

Хорошо объяснено, 5!

CPallini

Мой 5.

Рейтинг:
2

Nirav Prabtani

Вы должны использовать IS NOT NULL вместо использования !=,

!= не собираюсь давать результат

Если вы хотите использовать != то вы должны использовать

SELECT * FROM MyTable WHERE ISNULL(Manager,0) != 0

Дайте мне знать, если вам понадобятся дополнительные объяснения.