SQLZOO笔记-NULL

使用 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 函数

  1. 使用 COALESCE 函数
SELECT name ,COALESCE(mobile,'07986 444 2266') 
FROM teacher 

注意: COALESCE 函数,可以方便更换对于缺省值 NULL的输出。比如,本例中,如果 Mobile 字段是 NULL,则返回'07986 444 2266'

  1. 使用 COALESCE 函数和 LEFT JOIN
SELECT teacher.name ,COALESCE(dept.name ,'None') 
FROM teacher 
LEFT OUTER JOIN dept
ON (teacher.dept=dept.id)
  1. 使用 COUNT 函数
SELECT COUNT(name),COUNT(mobile)
FROM teacher 

  1. 使用 COUNT 函数和 GROUP BY 语句
SELECT dept.name, COUNT(teacher.name)
FROM teacher 
RIGHT JOIN dept ON (teacher.dept=dept.id)
GROUP BY dept.name
  1. 使用 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)

你可能感兴趣的:(SQLZOO笔记-NULL)