SQLZOO - Using NULL
小目录:(SQLZOO Using NULL)
- order by 2
- is NULL 和 = NULL
- NULL的分组、排序、计数
- 如何将NULL替换成你想要的东西
- 条件分支语句:case when用法
正文:
- order by 2
根据select字段的第二个字段进行排序
SELECT a, b
FROM TA
ORDER BY 2
等价于
SELECT a, b
FROM TA
ORDER BY b
- is NULL 和 = NULL
-SQL中存在三值逻辑:true,false,unknown;
-当你用任何值(包括NULL)与NULL做比较时,都会得到unknown;
-在查询语句中(where和having),unknown的返回值时false,所以如果使用something = NULL或 something <> NULL,语句中返回false,你将得不到结果;
select name
from teacher
where dept is NULL
需要注意的是:(check约束)
-在check约束中,unknown的返回值是true,所以当我们设置字段 >=0的情况下,可以在该字段中插入NULL;
- NULL的分组、排序、计数
-NULL属于一组;
-group by会把NULL分为一组;
-order by会把NULL值排列在一起,占用一个序位;
-COUNT()会把NULL值过滤,可以用子查询统计NULL的个数
- 如何将NULL替换成你想要的东西
使用COALESCE(x, y, z)按顺序判断x、y、z,谁不是NULL,就输出谁,并且不继续判断此变量后面那个变量;
示例:
把值为空(NULL)的电话都替换成0000;
SELECT COALESCE(number, '0000')
FROM number
- 条件分支语句:case when用法
用法:
case when (条件1)then (结果1)
when (条件2)then (结果2)
else (其他情况下的统一结果)
end
示例:
根据部门id,为教师打上学术领域标签;
select t.name, case when (d.id = 1 or d.id = 2) then 'Sci'
when (d.id = 3) then 'Art'
else 'None' end
AS AcademicType
from teacher t LEFT JOIN dept d ON t.dept = d.id