SQL ISNULL条件
这个教程将会教我们如何在SQL和SQL服务器中实现IS NULL条件和IsNull函数。
SQL中的IS NULL条件
用户可以使用IS NULL条件来验证一个数据值是否为NULL。如果值为NULL,则条件返回TRUE,否则返回False。用户可以在SQL的SELECT、INSERT、DELETE或UPDATE子句中实现IS NULL条件。
IS NULL条件的语法
实现IS NULL条件的语法如下:
Expr IS NULL
IS NULL条件的参数或参数
Expr: 它指定了被检查是否为NULL值的值或语句。
IS NULL条件的实现
示例1: 我们将使用SELECT子句实现IS NULL条件。
如果用户想要验证一个值是否为NULL,则建议在SQL中使用IS NULL条件作为比较运算符。考虑一个使用SELECT语句实现IS NULL条件的示例。
在这种情况下,我们将使用一个名为Student的表格。该表包含以下记录:
S_ID | F_Name | L_Name | S_City | Phone_Number |
---|---|---|---|---|
1 | Aman | Gupta | Delhi | 8649293478 |
2 | Ritik | Sharma | Noida | 9294234754 |
3 | Aditi | Verma | NULL | 8849430799 |
4 | Harsh | Gupta | Jaipur | 9372994792 |
5 | Saarthak | Sharma | Meerut | 7653294814 |
使用以下SQL查询创建上述表格:
CREATE TABLE Students (
S_ID INT,
F_Name VARCHAR(50),
L_Name VARCHAR(50),
S_City VARCHAR(50),
Phone_Number VARCHAR(20)
);
INSERT INTO Students (S_ID, F_Name, L_Name, S_City, Phone_Number)
VALUES (1, 'Aman', 'Gupta', 'Delhi', '8649293478');
INSERT INTO Students (S_ID, F_Name, L_Name, S_City, Phone_Number)
VALUES (2, 'Ritik', 'Sharma', 'Noida', '9294234754');
INSERT INTO Students (S_ID, F_Name, L_Name, S_City, Phone_Number)
VALUES (3, 'Aditi', 'Verma', NULL, '8849430799');
INSERT INTO Students (S_ID, F_Name, L_Name, S_City, Phone_Number)
VALUES (4, 'Harsh', 'Gupta', 'Jaipur', '9372994792');
INSERT INTO Students (S_ID, F_Name, L_Name, S_City, Phone_Number)
VALUES (5, 'Saarthak', 'Sharma', 'Meerut', '7653294814');
现在,我们将使用SELECT子句来检索S_City值为NULL的记录。
SELECT S_ID, F_Name, S_City
FROM Students
WHERE S_City IS NULL;
它将只返回Students表中S_City字段为NULL值的记录。
示例2: 我们将使用UPDATE子句在SQL中实现IS NULL条件。
让我们通过一个例子来了解如何在对表进行UPDATE操作时实现IS NULL条件。我们将使用相同的Students表来实现SQL查询。表格如下:
S_ID | F_Name | L_Name | S_City | Phone_Number |
---|---|---|---|---|
1 | Aman | Gupta | Delhi | 8649293478 |
2 | Ritik | Sharma | Noida | 9294234754 |
3 | Aditi | Verma | NULL | 8849430799 |
4 | Harsh | Gupta | Jaipur | 9372994792 |
5 | Saarthak | Sharma | Meerut | 7653294814 |
现在,在上面的表格中实现以下UPDATE语句。
UPDATE Students
SET S_City = 'Ghaziabad'
WHERE S_City IS NULL;
如果您想查看更新后的表格,请执行以下查询,它将更新Students表中的1条记录。
SELECT S_ID, F_Name, S_City FROM Students;
这是您应该看到的结果:
如果将列中的多个值赋值为NULL作为数据值,则所有这些值将被修改为Ghaziabad。由于只有1条记录满足上述条件,因此只有该记录被更新。
例3: 我们将在SQL中使用DELETE子句实现IS NULL条件。在实施查询之前,让我们创建一个表来实现DELETE语句中的IS NULL条件。
表名为Orders。如下所示:
OID | CID | Price | DoO |
---|---|---|---|
1 | 01 | 1000.00 | 03/06/2023 |
2 | 05 | 1500.00 | 11/06/2023 |
3 | 03 | NULL | 12/06/2023 |
4 | 02 | 2000.00 | 07/06/2023 |
5 | 04 | 1300.00 | 04/06/2023 |
要在数据库中创建上述表格,请执行以下SQL查询。
CREATE TABLE Orders (
OID INT,
CID INT,
Price DECIMAL(10,2),
DoO DATE
);
INSERT INTO Orders (OID, CID, Price, DoO)
VALUES
(1, 01, 1000.00, '2023-06-03'),
(2, 05, 1500.00, '2023-06-11'),
(3, 03, NULL, '2023-06-12'),
(4, 02, 2000.00, '2023-06-07'),
(5, 04, 1300.00, '2023-06-04');
SELECT * FROM Orders;
实现以下的DELETE语句:
DELETE FROM Orders
WHERE Price IS NULL;
上述的SQL查询将删除所有Price为NULL的记录。上述表格只显示了一个OID为3的实体。
使用下面的SQL查询来显示删除后的更新表格。
SELECT * FROM Orders;
这是您应该看到的结果:
SQL中的ISNULL()函数
当用户想要用特定值替换所有分配为NULL的值时,可以使用ISNULL函数。
ISNULL()语法
在SQL查询中实现ISNULL()函数的语法如下:
ISNULL (Expr, Modified_value)
ISNULL()函数的参数
用户需要在ISNULL()函数中传递两个参数。参数如下:
- Expr: ISNULL()函数的第一个参数可以是任何表达式,将对其进行NULL值验证。
- Modified_value: 第二个参数是替换表达式中所有NULL值的值。用户需要确保替换值可以转换为表达式的数据类型。
如果表达式包含或被认为是NULL,则ISNULL函数将返回替换值。但在分配值之前,函数将修改值转换为与表达式求值后的值相同的数据类型。只有当modified_value和表达式的数据类型不同时,才执行转换。
如果表达式求值为非NULL值,则ISNULL()函数将返回表达式的值,因为它保持不变。
SQL中ISNULL()函数的实现
让我们以用户可以实现SQL的ISNULL()函数的不同场景为例。
示例1: 在数值数据上实现SQL ISNULL函数。
我们将使用上面定义的Orders表来实现ISNULL()函数。
OID | CID | Price | DoO |
---|---|---|---|
1 | 01 | 1000.00 | 03/06/2023 |
2 | 05 | 1500.00 | 11/06/2023 |
3 | 03 | NULL | 12/06/2023 |
4 | 02 | 2000.00 | 07/06/2023 |
5 | 04 | 1300.00 | 04/06/2023 |
下面的查询将返回第二个参数,因为第一个参数是NULL。
SELECT OID, CID, ISNULL(Price, 2200.00) AS Price, DoO
FROM Orders;
它将使用NULL更新记录,该NULL会被2200.00替换。
用户还可以通过直接使用NULL作为第一个参数来实现ISNULL()函数。
SELECT ISNULL(NULL,100);
它只会返回第二个参数,因为第一个参数为空。
使用ISNULL()函数与字符字符串
用户还可以使用ISNULL()函数将NULL替换为第二个参数中的字符串。
示例2: 在下面的示例中,我们将使用ISNULL()函数将NULL值替换为另一个字符串。
SELECT ISNULL (NULL, "hi");
让我们尝试使用另一个字符串作为第一个参数的另一个例子。
SELECT ISNULL ("hello", "hi");
在这种情况下,它将仅返回第一个参数,因为它不是一个NULL值。
使用有意义的值实现NULL值
在许多情况下,数据分析师往往有大量的数据记录,而数据需要进行清理,可能包含多个NULL值。使用ISNULL函数可以用有意义的值替换这些NULL值。
让我们从创建一个名为division的表开始。它记录了每个运动员在一个比赛中的年龄。表格如下:
PlayerID | Name | Min_Age | Max_Age |
---|---|---|---|
1 | Aman | 18 | 30 |
2 | Harsh | 20 | NULL |
3 | Abhay | NULL | 35 |
4 | Mayank | 20 | NULL |
实现下面的SQL查询以创建上述表格并插入给定的记录。
CREATE TABLE division (
PlayerID INT,
Name VARCHAR(50),
Min_Age INT,
Max_Age INT
);
INSERT INTO division (PlayerID, Name, Min_Age, Max_Age)
VALUES
(1, 'Aman', 18, 30),
(2, 'Harsh', 20, NULL),
(3, 'Abhay', NULL, 35),
(4, 'Mayank', 20, NULL);
实施SELECT查询以确保所有记录都在表中。
SELECT * FROM division;
在Max_Age Min_Age列中的NULL值表示特定的运动不需要注册的最大或最小年龄。我们将用适当的值替换NULL值。
使用ISNULL()函数将Min_Age列中的NULL更改为0,并将Max_Age列中的NULL更改为99:
SELECT
PlayerID,
Name,
ISNULL(Min_Age,0) Min_Age,
ISNULL(Max_Age,99) Max_Age
FROM division;