Skip to content

Latest commit

 

History

History
218 lines (169 loc) · 5.48 KB

8.1 Using Null (Outer joins).md

File metadata and controls

218 lines (169 loc) · 5.48 KB

Using Null

Link to the page - https://sqlzoo.net/w/index.php/Using_Null

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
...

Teachers and Departments

The school includes many departments. Most teachers work exclusively for a single department. Some teachers have no department.

NULL, INNER JOIN, LEFT JOIN, RIGHT JOIN

1.

List the teachers who have NULL for their department.

select name from teacher
where dept is NULL

2.

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)
name name
Shrivell Computing
Throd Computing
Splint Computing
Cutflower Design

3.

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)
name name
Shrivell Computing
Throd Computing
Splint Computing
Spiregrain
Cutflower Design
Deadyawn

4.

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)
name name
Shrivell Computing
Throd Computing
Splint Computing
Cutflower Design
Engineering

5. COALESCE function

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') as mobile
from teacher
name COALESCE(mobi..
Shrivell 07986 555 1234
Throd 07122 555 1920
Splint 07986 444 2266
Spiregrain 07986 444 2266
Cutflower 07996 555 6574
Deadyawn 07986 444 2266
  • NOTE COALESCE takes any number of arguments and returns the first value that is not null.

      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
    

6.

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 t.name, COALESCE(d.name, 'None') department
  from teacher t
    left join dept d ON dept = d.id
name department
Shrivell Computing
Throd Computing
Splint Computing
Spiregrain None
Cutflower Design
Deadyawn None

7.

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

select count(id) "teachers total"
  , count(mobile) "mobiles total"
  from teacher
teachers total mobiles total
6 3

8.

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 d.name, COUNT(t.id) "number of staff"
  from teacher t right join dept d
    on dept = d.id
  group by d.name
name number of staff
Computing 3
Design 1
Engineering 0

9. Using CASE

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 = 1 OR dept = 2) THEN
           'Sci'
         ELSE
           'Art'
    END
  from teacher
-- NOTE condition bellow should be used, but this "isnt correct"
-- where dept IS NOT NULL
name CASE WHEN (de..
Shrivell Sci
Throd Sci
Splint Sci
Spiregrain Art
Cutflower Sci
Deadyawn Art

10.

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 = 1 OR dept = 2) THEN
           'Sci'
         WHEN dept = 3 THEN
           'Art'
         ELSE 
           'None'
    END
  from teacher
name CASE WHEN (de..
Shrivell Sci
Throd Sci
Splint Sci
Spiregrain None
Cutflower Sci
Deadyawn None