1. 程式人生 > >sqlzoo - Using Null 答案

sqlzoo - Using Null 答案

http://zh.sqlzoo.net/wiki/Using_Null

  1. List the teachers who have NULL for their department.
SELECT name FROM teacher
WHERE dept IS NULL /* 這裡不能使用dept = '' 或者 dept = NULL*/
  1. Note the INNER JOIN misses the teachers with no department and the departments with no teacher.
/* INNER JOIN 關鍵字在表中存在至少一個匹配時返回行; 與JOIN是相同的 */
SELECT t.name,d.name FROM teacher t INNER JOIN dept d ON (t.dept=d.id)
  1. Use a different JOIN so that all teachers are listed.
/* LEFT JOIN 關鍵字從左表(teacher)返回所有的行,即使右表(dept)中沒有匹配。如果右表中沒有匹配,則結果為 NULL */
SELECT t.name,d.name
FROM teacher t
LEFT JOIN dept d ON (t.dept=d.id) 
  1. Use a different JOIN so that all departments are listed.
/* LEFT JOIN 關鍵字從右表(dept)返回所有的行,即使右表(teacher)中沒有匹配。如果右表中沒有匹配,則結果為 NULL */
SELECT t.name,d.name
FROM teacher t
RIGHT JOIN dept d ON (t.dept=d.id)

Using the COALESCE function
5. 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’

/* COALESCE 給空值置預設值*/
SELECT name, COALESCE(mobile,'07986 444 2266')
FROM teacher
  1. 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')
FROM teacher t
LEFT JOIN dept d ON (t.dept = d.id) 
  1. Use COUNT to show the number of teachers and the number of mobile phones.
SELECT COUNT(name),COUNT(mobile)
FROM teacher
  1. 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.name)
FROM teacher t
RIGHT JOIN dept d ON (t.dept=d.id)
GROUP BY d.name
  1. 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 t.name
  ,CASE WHEN d.id IN (1,2)
        THEN 'Sci'
        ELSE 'Art' 
   END
FROM teacher t
LEFT JOIN dept d ON (t.dept=d.id) 
  1. 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 t.name
  ,CASE WHEN d.id IN (1,2)
        THEN 'Sci'
        ELSE 'None' 
   END
FROM teacher t
LEFT JOIN dept d ON (t.dept=d.id)