У мене виникло питання по SQL щодо того;
У чому різниця між наведеними 4 кодами?
1. SELECT NAME FROM CUSTOMER WHERE refereeid != 2 OR refereeid IS NULL;
2. SELECT NAME FROM CUSTOMER WHERE refereeid != 2 OR refereeid = NULL;
3. SELECT NAME FROM CUSTOMER WHERE refereeid != 2 AND refereeid = NULL;
4. SELECT NAME FROM CUSTOMER WHERE refereeid != 2 AND refereeid IS NULL;
Ось відповідь
Кожен з цих запитів намагається фільтрувати записи з таблиці CUSTOMER на основі стовпця referee_id
. Однак поведінка цих запитів різна через те, як SQL обробляє NULL значення.
ЗАПИТ 1
SELECT NAME FROM CUSTOMER
WHERE
refereeid != 2 OR refereeid IS NULL;
Пояснення
- Цей запит вибирає імена клієнтів, де:
referee_id
не дорівнює 2 (referee_id != 2
) АБОreferee_id
є NULL (referee_id IS NULL
).- Оскільки
NULL
означає невідоме значення, його не можна порівнювати за допомогою!=
. Замість цього слід використовуватиIS NULL
. - Правильний та дійсний запит: Це поверне клієнтів, у яких:
referee_id
не дорівнює 2.- Має значення
NULL
уreferee_id
.
Перекладено з: Difference between (IS NULL) and (= NULL) in SQL query