Using Null/ru

From SQLZoo
Language:Project:Language policy English  • 日本語 • русский • 中文
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
...

Преподаватели и кафедры

В учебном заведении есть множество кафедр. Большинство преподавателей работают только на одной кафедре. Некоторые преподаватели не относятся ни к одной кафедре.

Выбор значений NULL.

Поиск NULL

Выведите преподавателей, у которых в поле кафедры указано NULL.

Можно подумать, что здесь сработает выражение dept=NULL, но это не так — вместо него следует использовать dept IS NULL

Да, это так, но более подробное объяснение можно прочитать в Википедии:NULL.

SELECT name
FROM teacher
WHERE dept IS NULL

INNER JOIN

Обратите внимание: INNER JOIN не включает преподавателей без кафедры и кафедры без преподавателей.

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

Включение NULL при JOIN

Используйте другой тип JOIN, чтобы вывести всех преподавателей.

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

Включение всех строк без соответствия

Используйте другой тип JOIN, чтобы вывести все кафедры.

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

Использование функции COALESCE

Используйте COALESCE, чтобы вывести номер мобильного телефона. Если номер не указан, используйте '07986 444 2266'. Выведите имя преподавателя и номер мобильного телефона или '07986 444 2266'

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

Замена NULL

Используйте функцию COALESCE и LEFT JOIN, чтобы вывести name преподавателя и название кафедры. Если кафедра не указана, используйте строку 'None'.

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

Подсчёт значений, отличных от NULL

Используйте COUNT, чтобы вывести количество преподавателей и количество указанных номеров мобильных телефонов.

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

Количество сотрудников по кафедрам

Используйте COUNT и GROUP BY dept.name, чтобы вывести каждую кафедру и количество её сотрудников. Используйте RIGHT JOIN, чтобы кафедра Engineering также попала в результат.

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

Использование CASE

Используйте CASE, чтобы после name каждого преподавателя вывести 'Sci', если преподаватель относится к dept 1 или 2, и 'Art' в остальных случаях.

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

Значение по умолчанию в CASE

Используйте CASE, чтобы после имени каждого преподавателя вывести 'Sci', если преподаватель относится к dept 1 или 2, 'Art', если преподаватель относится к dept 3, и 'None' в остальных случаях.

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

  • Served by: hammy at 2026-08-11T10:15
  • Sinehold – hold a Lissajous figure still by tilting your phone