使用 NULL(缺失值)
老师和学部
一个学校中包含不同的学部,大部分老师只为一个学部工作上课,部分老师不归属于任何学部。
1.部门属性是 NULL 的老师
SELECT name
FROM teacher
WHERE dept IS NULL
2.inner JOIN
SELECT teacher.name, dept.name
FROM teacher INNER JOIN dept
ON (teacher.dept=dept.id)
注意:inner JOIN
省略了 dept 是 NULL 的老师,以及没有教师数据的学部
3.LEFT OUTER JOIN
SELECT teacher.name, dept.name
FROM teacher
LEFT OUTER JOIN dept
ON (teacher.dept=dept.id)
注意:LEFT OUTER JOIN
,列出所有教师名字
4.RIGHT OUTER JOIN
SELECT teacher.name, dept.name
FROM teacher
RIGHT OUTER JOIN dept
ON (teacher.dept=dept.id)
注意:RIGHT OUTER JOIN
,列出所有学部名称
使用 COALESCE 函数
- 使用
COALESCE
函数
SELECT name ,COALESCE(mobile,'07986 444 2266')
FROM teacher
注意: COALESCE
函数,可以方便更换对于缺省值 NULL的输出。比如,本例中,如果 Mobile 字段是 NULL,则返回'07986 444 2266'
- 使用
COALESCE
函数和 LEFT JOIN
SELECT teacher.name ,COALESCE(dept.name ,'None')
FROM teacher
LEFT OUTER JOIN dept
ON (teacher.dept=dept.id)
- 使用
COUNT
函数
SELECT COUNT(name),COUNT(mobile)
FROM teacher
- 使用
COUNT
函数和 GROUP BY 语句
SELECT dept.name, COUNT(teacher.name)
FROM teacher
RIGHT JOIN dept ON (teacher.dept=dept.id)
GROUP BY dept.name
- 使用
CASE
函数
如果教师来自学部属性为 1 或 2,那么后面跟上「SCI」,否则一律跟上「Art」。
SELECT teacher.name
,CASE WHEN dept IN (1,2)
THEN 'Sci'
ELSE 'Art'
END
FROM teacher
LEFT OUTER JOIN dept
如果教师来自学部属性为 1 或 2,那么后面跟上「SCI」,如果教师来自学部属性为 3,那么后面跟上「Art」,否则一律跟上「None」。
SELECT teacher.name
,CASE WHEN dept IN (1,2)
THEN 'Sci'
WHEN dept = 3
THEN 'Art'
ELSE 'None'
END
FROM teacher
LEFT OUTER JOIN dept
ON (teacher.dept=dept.id)