프로그래밍/MySQL

[MySQL] SQL ZOO Using Null Quiz 답 해설

모영이 2021. 3. 14. 21:13

 

Using Null Quiz - SQLZOO

Test your understanding of the NULL value teacher id dept name phone 101 1 Shrivell 2753 102 1 Throd 2754 103 1 Splint 104 Spiregrain 105 2 Cutflower 3212 106 Deadyawn dept id name 1 Computing 2 Design 3 Engineering Select the code which uses an outer join

sqlzoo.net

1. OUTTER JOIN 사용

JOIN에는 OUTTER와 INNER이 존재하고, OUTTER은 합집합, INNER은 교집합이다.

간단하게 기억을 하려면 OUTTER은 NULL값을 포함하고

INNER은 NULL값을 포함하지 않는다.

OUUTER JOIN에는 LEFT JOIN과 RIGHT JOIN이 있는데, 사실 어떤 것을 써도 상관 없다.

하지만 보통 LEFT JOIN을 사용하고 이것만 사용해서 문제 될 것은 없다.

LEFT OUTTER JOIN에서 OUTTER을 생략해도 된다.

techer 테이블에 dept 테이블을 LEFT JOIN하는데, teacher.dept와 dept.id를 매개로 진행한다.

하지만 teacher.dept에는 NULL값이 있다. 이렇게 되면 INNER JOIN은 NULL값인 teacher 데이터에 dept를 합치지 않지만, OUTTER JOIN은 dept을 합친다. dept가 없는데 어떻게 합칠까?

그냥 dept의 모든 칼럼이 NULL인 데이터를 합친다.

복잡할 필요가 없다. 그냥 합칠게 없어서 NULL을 표시했다. 라고 생각하면 편하다.

 

2. JOIN 사용

그냥 사용하면 된다.

 

3. RIGHT JOIN 사용

문제를 많이 풀어봤는데 RIGHT JOIN을 이렇게 강제로 쓰게하는 문제를 제외하고는 RIGHT JOIN을 쓰지 않아도 된다.

직관적으로, 내가 생각한 팁

teacher <- dept 이렇게 집어 넣는게 LEFT JOIN

teacher -> dept 이렇게 집어 넣는게 RIGHT JOIN

그렇다면

FROM A LEFT JOIN B 

FROM B RIGHT JOIN A는 같을까?

직관적으로

A <- B

B -> A

같다. 그래서 편한거 사용하면 된다.

 

4. COALESCE의 사용

COALESCE(칼럼명, A) -> 칼럼의 데이터 중 NULL값을 A로 대체한다.

 

5. CASE 사용

CASE문은 이렇게 사용하면 된다.

CASE                      -> CASE문의 시작

WHEN A                 -> A을 만족하면

THEN a                   -> a을 표시한다.

WHEN B                  -> B를 만족하면

THEN b (추가 가능)    -> b를 표시한다.

ELSE c (생략 가능)      -> 아무것도 만족 안하면 c를 표시한다.

END AS K                 -> CASE문의 종료, 표시된 값의 칼럼명을 K라고 한다.

 

Trod의 phone값은 2754이다.

 

6. CASE문 사용

dept가 1이면 'Computing'표시 그렇지 않으면 'Other' 표시