프로그래밍/MySQL

[MySQL] SQL ZOO Using Null 답 해설

모영이 2021. 2. 22. 13:48

 

Using Null - SQLZOO

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

sqlzoo.net

 

기본 정보

teacher -> id, dept, name, phone, mobile

dept -> id, name

 

#1 NULL은 IS

NULL은 =이 아니라 IS를 사용해야 한다.

SELECT name 
FROM teacher
WHERE dept IS NULL

 

#2 INNER JOIN은 NULL 제외

단순 JOIN문제

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

 

#3 LEFT JOIN은 NULL포함

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

 

#4 RIGHT JOIN은 NULL 포함

LEFT JOIN한다음 FROM과 JOIN값을 변경한거랑 똑같음

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

 

#5 COALESCE은 NULL값 대체

COALESCE은 NULL값을 대체 한다.

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

 

#6 COALESCE은 NULL값 대체

COALESCE은 NULL값을 대체 한다.

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

 

#7 단순 COUNT 

단순 COUNT문제 

COUNT(컬럼명) -> NULL 제외 카운트

COUNT(*) ->NULL 포함 카운트

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

 

#8 JOIN COUNT

dept에 teacher을 JOIN시켜주어야 한다.

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

 

#9 CASE WHEN 1

dept = 1 OR dept = 2이면 'Sci'

그렇지 않으면 'Art'

SELECT teacher.name, CASE WHEN dept = 1 OR dept = 2
                          THEN 'Sci'
                          ELSE 'Art'
                          END
FROM teacher
LEFT JOIN dept
ON (teacher.dept=dept.id)

 

#10 CASE WHEN 2

dept = 1 OR dept = 2이면 'Sci'

dept = 3 이면 'Art'

그렇지 않으면 'None'

SELECT teacher.name, CASE WHEN dept = 1 OR dept = 2
                          THEN 'Sci'
                          WHEN dept = 3
                          THEN 'Art'
                          ELSE 'None'
                          END
FROM teacher
LEFT JOIN dept
ON (teacher.dept=dept.id)

 

정리하기