Fork me on GitHub

sqlzoo练习14-using-null

sqlzoo练习14-using NULL

本文中讲解的是当数据库的表中的数据存在缺失值NULL的时候,该如何进行处理。下面的数据含有两个表teacherdept

The school includes many departments. Most teachers work exclusively for a single department. Some teachers have no department.

using null

练习

  1. List the teachers who have NULL for their department.

找出dept为空的老师

1
2
3
select name
from teacher
where dept in NULL; -- 注意不能使用dept=NULL
  1. Note the INNER JOIN misses the teachers with no department and the departments with no teacher.

inner join能够排除老师为空的系或者没有系的老师

1
2
3
select teacher.name, dept.name
from teacher
inner join dept on (teacher.dept=dept.id);
  1. Use a different JOIN so that all teachers are listed.
1
2
3
4
select teacher.name. dept.name
from teacher
full join dept on teacher.dept=dept.id
where teacher.name is not null; -- 方法1
1
2
3
select teacher.name, dept.name
from teacher
left join dept on teacher.dept=detp.id; -- 方法2
  1. Use a different JOIN so that all departments are listed.
1
2
3
4
5
6
7
8
9
10
-- 方法1
select teacher.name, dept.name
from dept
full join teacher on dept.id=teacher.dept
where dept.name is not null;

-- 方法2
select teacher.name, dept.name
from teacher
right join dept on teacher.dept=detp.id;
  1. Use COALESCE to print the mobile number. Use the number ‘07986 444 2266’ if there is no number given. Show teacher name and mobile number or '07986 444 2266’
1
2
select name, coalesce(mobile, '07986 444 2266')
from teacher
  1. Use the COALESCE function and a LEFT JOIN to print the teacher name and department name. Use the string ‘None’ where there is no department.
1
2
3
select teacher.name, coalesce(dept.name, 'None')
from teacher
left join dept on teacher.dept=dept.id;
  1. Use COUNT to show the number of teachers and the number of mobile phones.
1
2
select count(name), count(mobile)
from teacher;
  1. Use COUNT and GROUP BY dept.name to show each department and the number of staff. Use a RIGHT JOIN to ensure that the Engineering department is listed.
1
2
3
4
select dept.name, count(teacher.name)
from teacher
right join dept on dept.id=teacher.dept
group by dept.name;
  1. Use CASE to show the name of each teacher followed by ‘Sci’ if the teacher is in dept 1 or 2 and ‘Art’ otherwise.
1
2
3
4
select teacher.name,
case when (teacher.dept=1 or teacher.dept=2) then 'Sci'
else 'Art' end
from teacher;
  1. Use CASE to show the name of each teacher followed by ‘Sci’ if the teacher is in dept 1 or 2, show ‘Art’ if the teacher’s dept is 3 and ‘None’ otherwise.
1
2
3
4
5
select teacher.name,
case when teacher.dept=1 or teacher.dept=2 then 'Sci'
when teacher.dept=3 then 'Art'
else 'None' end
from teacher

About coalesce函数

COALESCE takes any number of arguments and returns the first value that is not null.

笔记:取第一个不是NULL值的数据

About case function

case表达式的两种写法

1
2
3
4
5
6
7
8
9
case sex   -- 1. 简单表达式
when '1' then '男'
when '2' then '女'
else 'other' end


case when sex='1' then '男' -- 2. 搜索表达式
when sex='2' then '女'
else 'other' end

本文标题:sqlzoo练习14-using-null

发布时间:2020年01月31日 - 15:01

原始链接:http://www.renpeter.cn/2020/01/31/sqlzoo%E7%BB%83%E4%B9%A014-using-null.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea