首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第1章 数据库和SQL
1-1 数据库是什么
我们身边的数据库
为什么DBMS那么重要
DBMS的种类
1-2 数据库的结构
RDBMS的常见系统结构
表的结构
1-3 SQL概要
标准SQL
SQL语句及其种类
SQL的基本书写规则
1-4 表的创建
表的内容的创建
数据库的创建(CREATE DATABASE语句)
表的创建(CREATE TABLE语句)
命名规则
数据类型的指定
约束的设置
1-5 表的删除和更新
表的删除(DROP TABLE语句)
表定义的更新(ALTER TABLE语句)
向Product表中插入数据
第2章 查询基础
2-1 SELECT语句基础
列的查询
查询出表中所有的列
为列设定别名
常数的查询
从结果中删除重复行
根据WHERE语句来选择记录
注释的书写方法
算术运算符
需要注意NULL
比较运算符
对字符串使用不等号时的注意事项
不能对NULL使用比较运算符
2-3 逻辑运算符
NOT运算符
AND运算符和OR运算符
通过括号强化处理
逻辑运算符和真值
含有NULL时的真值
第3章 聚合与排序
3-1 对表进行聚合查询
聚合函数
计算表中数据的行数
计算NULL之外的数据的行数
计算合计值
计算平均值
计算值和小值
使用聚合函数删除重复值(关键字DISTINCT)
3-2 对表进行分组
GROUP BY子句
聚合键中包含NULL的情况
使用WHERE子句时GROUP BY的执行结果
与聚合函数和GROUP BY子句有关的常见错误
3-3 为聚合结果指定条件
HAVING子句
HAVING子句的构成要素
相对于HAVING子句,更适合写在WHERE子句中的条件
3-4 对查询结果进行排序
ORDER BY子句
指定升序或降序
指定多个排序键
NULL的顺序
在排序键中使用显示用的别名
ORDER BY子句中可以使用的列
不要使用列编号
当前位置:
首页>>
技术小册>>
SQL基础教程(上)
小册名称:SQL基础教程(上)
### 需要注意NULL:深入理解SQL中的空值概念 在SQL(Structured Query Language)的广阔世界里,`NULL`是一个既基础又复杂的概念。它代表缺失的、未知的或不适用的数据值,与零(0)、空字符串('')或任何具体的值都不同。正确理解和使用`NULL`对于构建健壮、高效的数据库查询至关重要。本章将深入探讨`NULL`的本质、行为特性、处理策略以及在实际应用中的注意事项。 #### 一、`NULL`的本质 在SQL中,`NULL`是一个特殊的标记,用于表示某个字段的值未知或未定义。它不是零、不是空字符串,也不是任何其他具体的值。它代表的是一种“无值”的状态,这种状态在数据库中是明确的,且需要特别处理。 - **非确定性**:`NULL`与任何值(包括它自己)的比较操作都会返回`NULL`,而不是`TRUE`或`FALSE`。这意味着`NULL`值在逻辑上是不确定的,不能直接用于条件判断。 - **传染性**:当`NULL`参与算术运算、字符串连接或比较操作时,结果往往是`NULL`。这种“传染性”要求开发者在设计查询时格外小心,以避免意外的结果。 #### 二、`NULL`的行为特性 ##### 2.1 比较操作 在SQL中,任何与`NULL`的比较操作都会返回`NULL`,而不是`TRUE`或`FALSE`。例如: ```sql SELECT NULL = NULL; -- 结果为 NULL,不是 TRUE SELECT 1 = NULL; -- 结果为 NULL,不是 FALSE ``` 这种特性导致直接使用`=`或`<>`来检查`NULL`值是不可行的。为了检测`NULL`,需要使用`IS NULL`或`IS NOT NULL`。 ##### 2.2 聚合函数 在聚合函数(如`COUNT()`, `SUM()`, `AVG()`等)中,`NULL`值通常被忽略。例如,`COUNT(*)`会计算所有行,而`COUNT(column_name)`则只计算`column_name`非`NULL`的行数。 ##### 2.3 排序 在排序(ORDER BY)时,`NULL`值通常被视为最低值(尽管这取决于具体的数据库系统和设置,某些数据库允许用户指定`NULL`的排序顺序)。 #### 三、处理`NULL`的策略 ##### 3.1 使用`IS NULL`和`IS NOT NULL` 为了检查字段是否为`NULL`,应使用`IS NULL`或`IS NOT NULL`。例如: ```sql SELECT * FROM employees WHERE department_id IS NULL; ``` ##### 3.2 使用`COALESCE`函数 `COALESCE`函数返回其参数列表中第一个非`NULL`值。这对于替换`NULL`值非常有用。例如,如果你想在查询中用一个默认值(如0)替换`NULL`工资值,可以这样做: ```sql SELECT name, COALESCE(salary, 0) AS salary FROM employees; ``` ##### 3.3 使用`CASE`表达式 `CASE`表达式提供了更灵活的条件逻辑处理,包括处理`NULL`值。你可以根据字段是否为`NULL`来执行不同的操作。 ```sql SELECT name, CASE WHEN salary IS NULL THEN 'Unknown' ELSE CAST(salary AS VARCHAR) END AS salary_description FROM employees; ``` ##### 3.4 设计时考虑非空约束 在设计数据库表时,对于不应该有`NULL`值的字段,应使用非空约束(`NOT NULL`)。这有助于保持数据的完整性和一致性。 #### 四、实际应用中的注意事项 ##### 4.1 逻辑判断需谨慎 在编写包含`NULL`的逻辑判断时,务必使用`IS NULL`或`IS NOT NULL`,而不是`=`或`<>`。同时,要注意`NULL`的“传染性”,避免在条件表达式中直接使用可能导致`NULL`结果的表达式。 ##### 4.2 聚合函数的结果 在使用聚合函数时,要清楚哪些函数会忽略`NULL`值(如`COUNT(column_name)`),哪些不会(如`COUNT(*)`)。这对于数据分析和报告非常重要。 ##### 4.3 排序和分组 在排序和分组数据时,要留意`NULL`值的处理。不同的数据库系统可能有不同的默认行为,了解并测试你的特定环境是很重要的。 ##### 4.4 性能考虑 大量使用`NULL`值可能会影响查询性能,特别是在涉及索引和连接(JOIN)操作时。虽然`NULL`是SQL的一个重要特性,但在设计数据库时,应尽量避免不必要的`NULL`值,或者通过适当的设计来减少其影响。 #### 五、总结 `NULL`在SQL中是一个复杂但至关重要的概念。正确理解其本质、行为特性以及处理策略,对于编写高效、健壮的数据库查询至关重要。通过合理使用`IS NULL`、`COALESCE`、`CASE`表达式等工具,以及在设计阶段就考虑`NULL`值的处理,我们可以更好地管理数据库中的不确定性和缺失数据,从而提高数据的质量和应用的可靠性。在《SQL基础教程(上)》的后续章节中,我们将继续探讨更多SQL的高级特性和最佳实践,帮助读者逐步掌握这门强大的数据操作语言。
上一篇:
算术运算符
下一篇:
比较运算符
该分类下的相关小册推荐:
SQL基础教程(中)
PostgreSQL入门教程
高性能的Postgres SQL
SQL基础教程(下)