SQLZOO:Using Null

数据表:teacher-dept

teacher
iddeptnamephonemobile
1011Shrivell275307986 555 1234
1021Throd275407122 555 1920
1031Splint2293
104Spiregrain3287
1052Cutflower321207996 555 6574
106Deadyawn3345
...
dept
idname
1Computing
2Design
3Engineering
...

Q1

List the teachers who have NULL for their department.

SELECT name FROM teacher WHERE dept IS NULL
IS NULL | IS NOT NULL

Q2

Note the INNER JOIN misses the teachers with no department and the departments with no teacher.

SELECT teacher.name,dept.name 
FROM teacher INNER JOIN dept ON (teacher.dept=dept.id)
INNER JOIN

INNER JOIN 关键字在表中存在至少一个匹配时返回行

只返回那些在两个表中都有匹配的记录

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

参数说明:

  • columns:要显示的列名
  • table1:表1的名称
  • table2:表2的名称
  • column_name:表中用于连接的列名

注释:INNER JOIN 与 JOIN 是相同的

Q3

Use a different JOIN so that all teachers are listed.

SELECT teacher.name,dept.name 
FROM teacher LEFT JOIN dept ON (teacher.dept=dept.id)
LEFT JOIN

LEFT JOIN 关键字从左表返回所有的行,即使右表中没有匹配

如果右表中没有匹配,则结果为 NULL

Q4

Use a different JOIN so that all departments are listed.

SELECT teacher.name,dept.name 
FROM teacher RIGHT JOIN dept ON (teacher.dept=dept.id)
RIGHT JOIN

RIGHT JOIN 关键字从右表返回所有的行,即使左表中没有匹配

如果左表中没有匹配,则结果为 NULL


Using the COALESCE function

Q5

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'

SELECT name,COALESCE(mobile,'07986 444 2266') FROM teacher

COALESCE

COALESCE接受任意数量参数并返回第一个非空值

  COALESCE(x,y,z) = x if x is not NULL
  COALESCE(x,y,z) = y if x is NULL and y is not NULL
  COALESCE(x,y,z) = z if x and y are NULL but z is not NULL
  COALESCE(x,y,z) = NULL if x and y and z are all NULL

Q6

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.

SELECT teacher.name,COALESCE(dept.name,'None') 
FROM teacher LEFT JOIN dept ON teacher.dept=dept.id

Q7

Use COUNT to show the number of teachers and the number of mobile phones.

SELECT COUNT(name),COUNT(mobile) FROM teacher

Q8

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.

SELECT dept.name,COUNT(teacher.name) 
FROM teacher RIGHT JOIN dept ON teacher.dept=dept.id 
GROUP BY dept.name


Using CASE

CASE

CASE语句遍历条件并在满足第一个条件时返回一个值

一旦条件为真,它将停止读取并返回结果

如果没有条件为 true,则返回 ELSE 子句中的值

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;


Q9

Use CASE to show the name of each teacher followed by 'Sci' if the teacher is in dept 1 or 2 and 'Art' otherwise.

SELECT name,
    CASE 
        WHEN dept IN (1,2) THEN 'Sci'
        ELSE 'Art'
    END
FROM teacher

Q10

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.

 

SELECT name,
    CASE 
        WHEN dept IN (1,2) THEN 'Sci'
        WHEN dept=3 THEN 'Art'
        ELSE 'None'
    END
FROM teacher

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值