プログラミング

8. Using NUll/SQL Zooの答えと解説

sql_zoo_8 using null eyecatch

 

この章では teacherテーブルの学部(dept)がnullが含まれているのに注意です。¥
そのため、外部結合やCOALESCE関数を使用していきます。

今までの解説はこちら
5. SUM and COUNT/SQL Zooの答えと解説
6. JOIN /SQL ZOOの答えと解説
7. More JOIN operations /SQL ZOOの答えと解説

1. List the teachers who have NULL for their department.

  Q. 部門にNULLがある教師をリストします。

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.

Q.  INNER JOINは学部のない教師と 教師のない学部を見逃していることに注意してください。

内部結合なので、deptが空の教師(Spiregrain,Deadyawn…)や
教師が所属してない学部(Engineering)は含まれません。

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

3. Use a different JOIN so that all teachers are listed.

Q. 別のJOINを使用して、すべての教師がリストされるようにします。

LEFT JOINを使って、外部結合にしましょう

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

4. Use a different JOIN so that all departments are listed.

Q. 別のJOINを使用して、すべての部門がリストされるようにします。

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

5. Use COALESCE to print the mobile number.

Q. Use the number ‘07986 444 2266’ if there is no number given.
Show teacher name and mobile number or ‘07986 444 2266’

Q. COALESCEを使用して携帯電話番号を印刷します。番号が指定されていない場合は、「07986 444 2266」を使用してください。 教師の名前と携帯番号を表示するか、「07986 444 2266」

COALESCE関数は、nullではない最初の値を返す。

COALESCE(x,y,z)とした場合, xがnullの時はyが。
さらにyがnullの場合はzが出力されます。

下の例ではpartyの値がnullの場合は’None’が出力されます。

SELECT name, party
,COALESCE(party,'None') AS aff
FROM msp WHERE name LIKE 'C%'

参考 http://bashalog.c-brains.jp/18/02/28-171400.php  

答え

Q. Use the number ‘07986 444 2266’ if there is no number given.
Show teacher name and mobile number or ‘07986 444 2266’

Q. COALESCEを使用して携帯電話番号を印刷します。番号が指定されていない場合は、「07986 444 2266」を使用してください。 教師の名前と携帯番号を表示するか、「07986 444 2266」

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

6. Use the COALESCE function and a LEFT JOIN to print the teacher name and department name.

Q. Use the string ‘None’ where there is no department.
COALESCE関数とLEFT JOINを使用して、教師名と部門名を印刷します。

部門がない場合は、文字列「None」を使用します。

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

7. Use COUNT to show the number of teachers and the number of mobile phones. COUNTを使用して、教師の数と携帯電話の数を表示します。

SELECT COUNT(t.id),COUNT(t.mobile)
FROM teacher t

8. Use COUNT and GROUP BY [dept.name](http://dept.name/) to show each department and the number of staff.

Q. Use a RIGHT JOIN to ensure that the Engineering department is listed.

Q. COUNTおよびGROUP BY dept.nameを使用して、各部門とスタッフの数を表示します。

RIGHT JOINを使用して、エンジニアリング部門がリストされていることを確認します。 所属するteacherがいないはずのEngineeringが出力されていればOK

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

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

Q. CASEを使用して各教師の名前を表示し、教師が部門 1または2 の場合は「Sci」それ以外の場合は「Art」を表示します。

CASEを使用して条件分岐

CASE WHEN 条件 THEN 値 END の形 例

CASE WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE def_value
END

答え

Q. CASEを使用して各教師の名前を表示し、教師が部門 1または2 の場合は「Sci」、それ以外の場合は「Art」を表示します。

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

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.

Q. CASEを使用して、各教師の名前を表示し、次に教師が部門1または2の場合は「Sci」、教師の部門が3の場合は「Art」、それ以外の場合は「None」を表示します。

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

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です