SQL Null函数
NULL 函数用于在数据库表中执行对NULL值的操作。
当我们的数据缺失或所需数据不可用时,NULL值类似于数据库中的占位符。它是一个灵活的值,不属于任何实际的数据类型,并且可以放在任何数据类型的列中,例如字符串、整数、varchar等。
以下是NULL值的各种特性:
- NULL值与零值或包含空格的字段是不同的。具有NULL值的记录是在记录创建过程中留空的记录。
- NULL值有助于消除数据的不明确性。同时,NULL值有助于在列中保持统一的数据类型。
如果用户在手机号码列中输入了他们的出生日期,当需要联系时可能会产生歧义。为了解决这个问题,我们必须在插入数据之前检查数据,并使用NULL函数将不是日期数据类型的数据更新为NULL。
SQL中的NULL函数
有了识别NULL数据的能力,我们可以对其执行类似于SQL中的聚合方法的操作。它们包括:
- ISNULL()
- COALESCE()
- NULLIF()
- IFNULL()
让我们逐一详细讨论这些函数。
ISNULL()函数
SQL服务器的 ISNULL() 函数允许在表达式为空时返回替代值。或者我们可以说它用于替换NULL值。
此函数可用于需要更新表的情况。如果最终找到一个适当的值来填充记录中的空白空间,就会替换NULL值。
语法
ISNULL() 函数的语法如下:
SELECT ISNULL(column_name, value_to_return) FROM table_name;
示例
在下面的示例中,我们将客户表中的薪水的NULL值替换为”500000″。
假设我们使用以下查询创建了一个名为Customers的表,该表包含客户的个人详细信息,包括姓名、年龄、地址和薪水等。
CREATE TABLE CUSTOMERS (
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
现在,使用以下的INSERT语句将值插入到这个表中 –
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', NULL );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', NULL );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );
表将被创建为-
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | NULL |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | NULL |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
以下是替换空值的查询:
SELECT ISNULL(SALARY, 500000) AS Result FROM CUSTOMERS;
输出
执行上述查询后,我们得到”salary”列,并且空值将被替换为”500,000″,正如我们在结果列中看到的那样。
+---------+
| Result |
+---------+
| 2000 |
| 1500 |
| 50000 |
| 6500 |
| 8500 |
| 50000 |
| 10000 |
+---------+
COALESCE() 函数
SQL服务器的 COALESCE() 函数返回其参数中第一个出现的非NULL表达式。如果所有表达式都为NULL,则COALESCE()函数将返回NULL。
在COALESCE()函数中,整数始终先进行评估,而整数后面跟着一个字符表达式将产生一个整数作为输出。
语法
以下是 COALESCE() 函数的语法-
SELECT COALESCE (expression_1, expression_2, …, expression_n) FROM table_name;
示例
在下面的示例中,我们使用以下查询来返回第一个出现的非空值。
SELECT COALESCE (NULL, 'tutorialspoint', NULL) AS Result;
输出
在执行上述查询时,我们得到了”tutorialspoint”作为结果,因为它是第一个紧随NULL值之后的字符串,正如我们可以在随后的结果列中看到的那样。
+-----------------+
| Result |
+-----------------+
| tutorialspoint |
+-----------------+
示例
在下面的示例中,我们使用 COALESCE() 函数来检索”姓名”和”薪水”,将参数”年龄”和”薪水”传递给coalesce()函数,并作为结果。如下面的查询所示−
SELECT NAME, SALARY, COALESCE(SALARY, AGE) Result FROM CUSTOMERS;
输出
执行上述查询后,我们获取到姓名和工资,并使用COALESCE()函数比较工资和年龄。它将返回一个不为空的值作为结果,在输出表中可以看到。
+----------+------------+------------+
| NAME | SALARY | Result |
+----------+------------+------------+
| Ramesh | 2000.0000 | 2000.0000 |
| Khilan | 1500.0000 | 1500.0000 |
| kaushik | NULL | 23.0000 |
| Chaitali | 6500.0000 | 6500.0000 |
| Hardik | 8500.0000 | 8500.0000 |
| Komal | NULL | 22.0000 |
| Muffy | 10000.0000 | 10000.0000 |
+----------+------------+------------+
NULLIF()函数
NULLIF()函数接受两个参数。如果两个表达式相同,则返回NULL。否则,返回第一个参数。我们可以直接在SELECT、WHERE和GROUP BY等子句中使用这个函数。
语法
以下是NULLIF()函数的语法-
SELECT column(s), NULLIF(expression_1, expression_2) FROM table_name;
示例
在下面的示例中,我们使用WHERE子句创建了一个查询,利用NULLIF()函数从Customers表中返回“name”和“age”。我们将年龄和薪水作为NULLIF()函数的参数。
SELECT NAME, NULLIF(AGE, SALARY) AS Result FROM CUSTOMERS WHERE SALARY IS NULL;
输出
在执行以上查询时,我们使用NULLIF()函数检索名称和年龄。我们将年龄返回作为结果,因为NULLIF()函数在两个参数不相同时返回第一个参数。如下所示的输出表中可以看到:
+----------+---------+
| NAME | Result |
+----------+---------+
| Kaushik | 23 |
| Komal | 22 |
+----------+---------+
IFNULL()函数
IFNULL()函数仅在MySQL中可用,而不在SQL服务器中可用。它接受两个参数;如果第一个参数不为null,则返回第一个参数;否则,返回第二个参数。通常用于将NULL值替换为另一个值。根据使用的上下文,它返回字符串或数值。
语法
IFNULL()函数的语法如下所示:
SELECT column(s), IFNULL(column_name, value_to_replace) FROM table_name;
示例
在下面的示例中,我们正在获取ID、NAME、AGE和SALARY,并将空的薪水替换为”550000″,并使用别名Result。正如我们在下面的查询中所看到的-
SELECT ID, NAME, AGE, SALARY, IFNULL(SALARY, 550000) AS Result FROM customers WHERE SALARY IS NULL;
输出
在执行上述查询时,我们得到了我们正在获取的所有详细信息。如下面的输出表所示−
+----+---------+-----+--------+-------------+
| ID | NAME | AGE | SALARY | Result |
+----+---------+-----+--------+-------------+
| 3 | kaushik | 23 | NULL | 550000.0000 |
| 6 | Komal | 22 | NULL | 550000.0000 |
+----+---------+-----+--------+-------------+
2 rows in set (0.05 sec)