Szukaj…
Wprowadzenie
NULL
w SQL, podobnie jak programowanie, oznacza dosłownie „nic”. W SQL łatwiej jest zrozumieć „brak jakiejkolwiek wartości”.
Ważne jest, aby odróżnić go od pozornie pustych wartości, takich jak pusty ciąg ''
lub liczba 0
, z których żadna z nich nie ma w rzeczywistości wartości NULL
.
Ważne jest również, aby uważać, aby nie zawrzeć wartości NULL
w cudzysłowach, takich jak 'NULL'
, co jest dozwolone w kolumnach akceptujących tekst, ale nie ma wartości NULL
i może powodować błędy i nieprawidłowe zestawy danych.
Filtrowanie pod kątem NULL w zapytaniach
Składnia filtrowania dla NULL
(tj. Brak wartości) w blokach WHERE
jest nieco inna niż filtrowanie dla określonych wartości.
SELECT * FROM Employees WHERE ManagerId IS NULL ;
SELECT * FROM Employees WHERE ManagerId IS NOT NULL ;
Zauważ, że ponieważ NULL
nie jest równy niczym, nawet samemu sobie, użycie operatorów równości = NULL
lub <> NULL
(lub != NULL
) zawsze da wartość prawdy UNKNOWN
które zostanie odrzucone przez WHERE
.
WHERE
filtruje wszystkie wiersze o warunku FALSE
lub UKNOWN
i zachowuje tylko wiersze o warunku TRUE
.
Nullable kolumny w tabelach
Podczas tworzenia tabel można zadeklarować kolumnę jako dopuszczającą wartość zerową lub inną.
CREATE TABLE MyTable
(
MyCol1 INT NOT NULL, -- non-nullable
MyCol2 INT NULL -- nullable
) ;
Domyślnie każda kolumna (poza ograniczeniami klucza podstawowego) ma wartość zerową, chyba że jawnie ustawimy ograniczenie NOT NULL
.
Próba przypisania wartości NULL
do kolumny, która nie ma wartości NULL, spowoduje błąd.
INSERT INTO MyTable (MyCol1, MyCol2) VALUES (1, NULL) ; -- works fine
INSERT INTO MyTable (MyCol1, MyCol2) VALUES (NULL, 2) ;
-- cannot insert
-- the value NULL into column 'MyCol1', table 'MyTable';
-- column does not allow nulls. INSERT fails.
Aktualizowanie pól do NULL
Ustawienie pola na NULL
działa dokładnie tak samo, jak w przypadku każdej innej wartości:
UPDATE Employees
SET ManagerId = NULL
WHERE Id = 4
Wstawianie wierszy z polami NULL
Na przykład wstawienie pracownika bez numeru telefonu i menedżera do przykładowej tabeli Pracownicy :
INSERT INTO Employees
(Id, FName, LName, PhoneNumber, ManagerId, DepartmentId, Salary, HireDate)
VALUES
(5, 'Jane', 'Doe', NULL, NULL, 2, 800, '2016-07-22') ;