관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

JOIN 심화 4 - FROM 절 JOIN 형태 3~4 : CROSS JOIN, OUTER JOIN 본문

알고리즘 및 자료 관리/SQL

JOIN 심화 4 - FROM 절 JOIN 형태 3~4 : CROSS JOIN, OUTER JOIN

huenuri 2024. 10. 23. 11:04

수학 공부도 마쳤고 이제 10시 반이 다 되었지만 3시간 동안 열심히 아침 공부를 해볼 것이다. 가능하면 1주 차 학습을 모두 마치고 싶지만 아직 많은 공부가 남아서 할 수 있을지는 모르겠다. 그래도 최대한 빠르게 학습을 진행할 것이다.

그리고 오후에는 서브쿼리에 대해서 공부를 마쳐야 진도를 맞출 수 있다.


 

 

 

 

이론 4 - FROM 절 JOIN 형태 3 : CROSS JOIN

 

 

USER와 CLASS 테이블의 모든 데이터와 조합해서 결과값이 출력되고 있다.

 

 

 

 

 

INNER JOIN에서처럼 CROSS JOIN도 CROSS를 생략할 수 있다. 그러면 INNER와 CROSS를 어떻게 구별할까? INNER에는 ON 조건절이 반드시 들어가야 한다. 또는 USING이 올 수도 있고 그 외에 NATURAL JOIN이 오게 된다.

하지만 이러한 것을 사용하지 않으면 이 자체가 CROSS JOIN이 된다.

 

이 데이터는 2 X 3 = 6개의 데이터가 생긴다.


 

 

 

 

 

실습 5 - FROM 절 JOIN 형태 : CROSS JOIN

 

 

 


 

 

1. 두 데이블의 모든 정보 출력하기

 


 

 

 

2. 크로스 조인으로 성과 이름이 나올 수 있는 모든 경우 출력하기

 

CROSS JOIN은 조건이 없기 때문에 두 테이블의 위치를 바꾸어도 결과에는 영향을 주지 않는다.

 

 

 

 

문제를 잘 풀었다.


 

 

 

 

 

이론 5 - FROM 절 JOIN 형태 4 : OUTER JOIN

 

 

 

 

 

 

 

왼쪽에 있기 때문에 LEFT OUTER JOIN으로 생각하면 된다. USER 테이블에 대해서 모든 데이터를 조회한다. CLASS_ID의 003 값은 들어오지 않았기 때문에 NULL 값으로 존재한다.

 

 

 

 

 

 

OUTER를 생략할 수도 있지만 일반적으로는 명시하는 것이 관례이다. 만약 일반 JOIN이었다면 1003은 출력되지 않고 그 앞에까지 출력이 될 것이다. 하지만 LEFT OUTER JOIN이므로 USER 테이블의 모든 데이터가 출력되어 이러한 정보가 나온다.

 

 

 

 

 

 

RIGHT OUTER JOIN은 반대로 CLASS 테이블의 모든 데이터가 출력되고, CLASS 테이블의 USER 테이블 값이 없더라도 NULL로 채워진다.

  • USER RIGHT JOIN CLASS
  • CLASS LEFT JOIN USER

이 두 테이블의 결과값은 같다. 즉 LEFT와 RIGHT는 방향만 바뀐 것이다. 일반적으로 실무에서는 LEFT OUTER JOIN을 많이 사용한다.

 

 

 

 

 

LEFT와 RIGHT OUTER JOIN이 모두 출력된 결과이다. 1003의 CLASS_ID 값이 없기 때문에 NULL로, 004도 CLASS 테이블에만 있기 때문에 NULL이 출력된다. 003만 출력되는 것은 RIGHT OUTER JOIN이고, 004만 출력되는 것은 LEFT OUTER JOIN이다.

 

 

 

 

 

 

 

 

UNION이기 때문에 중복된 것은 제외하고, LEFT OUTER JOIN과 RIGHT OUTER JOIN 결과가 나온다.

 

 

 

 


 

 

 

 

 

학습을 마치고

CROSS JOIN과 OUTER JOIN에 대해서 공부해 보았다. OUTER JOIN은 전에는 이해하기 힘든 개념이었으나 이제는 무엇인지 확실히 이해했다. 문제를 풀면서 더 자세히 알아볼 수 있을 것 같다.

LEFT와 RIGHT의 방향에 주의하며 어떤 것이 NULL값으로 채워지는지 잘 확인해야 한다.