SQLZOO:Using Null

数据表:teacher-dept

teacher
id dept name phone mobile
101 1 Shrivell 2753 07986 555 1234
102 1 Throd 2754 07122 555 1920
103 1 Splint 2293
104 Spiregrain 3287
105 2 Cutflower 3212 07996 555 6574
106 Deadyawn 3345
...
dept
id name
1 Computing
2 Design
3 Engineering
...

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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 20:44:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 20:44:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 20:44:04       61 阅读
  4. Python语言-面向对象

    2024-05-13 20:44:04       71 阅读

热门阅读

  1. Redis面试高频问题

    2024-05-13 20:44:04       29 阅读
  2. 【编程向导】Docker-常用命令

    2024-05-13 20:44:04       34 阅读
  3. OSINT技术情报精选·2024年5月第1周

    2024-05-13 20:44:04       25 阅读
  4. 二分查找GO语言实现

    2024-05-13 20:44:04       36 阅读
  5. MYSQL DBA运维实战

    2024-05-13 20:44:04       26 阅读
  6. js设计模式--发布订阅者模式

    2024-05-13 20:44:04       37 阅读
  7. Goframe学习笔记(六)上下文共享变量

    2024-05-13 20:44:04       46 阅读
  8. 1900年-2100年公历转农历数据

    2024-05-13 20:44:04       30 阅读