조인의 대분류
- EQUI JOIN ( 10=10처럼 값이 같은지 비교하겠다. )
- NON-EQUI JOIN (조건에 맞게 ~ )
우리는 EQUI JOIN만 실습
1. INNER JOIN
2. OUTER JOIN
- -- LEFT OUTER JOIN
- -- RIGHT OUTER JOIN
- -- FULL OUTER JOIN
3. CROSS JOIN
4. SELF JOIN
[ 1번 - INNER JOIN ]
- INNER JOIN은 앞에 INNER생략 가능
JOIN 할 2개의 테이블 내용 확인
- TEMP 테이블에서 SMITH 사원의 부서 번호 20번 확인
- DEPT 테이블에서 부서번호 10번의 부서 이름 확인
- SMITH 사원의 부서이름 확인 가능!
부서 번호 칼럼의 값을 20번으로 사용한 이유는?
- 부서명을 숫자로 사용하지 않고 RESERCH라는 부서명을 사용하면
- 사원 추가시 부서명 칼럼에 많은 문자열을 매번 넣어줘야 하고 추가될 것이다.
- 부서 코드로 관리 시 - 숫자 2개로 관리 가능
- 공간을 훨신 더 효율적으로 사용 가능 ( 메모리 아껴서 사용 가능 )
그렇지만..
- 부서 번호를 가지고 다른 테이블에 가서 부서명을 가져오고 하는 과정이 너무 귀찮다.
- 이 귀찮음을 해결해주는 것이 JOIN
- JOIN 작업을 해주면 2개의 테이블이 조건에 맞게 매칭 되어서 하나로 합쳐진다!
- 하나의 테이블에서 조회가능~!
JOIN 은 어떻게 사용하나요?
1. 합칠 테이블 조회
2. 기준 테이블인 EMP 테이블과 조인 테이블인 DEPT테이블 JOIN
- FROM 기준 테이블
- JOIN 테이블 ON 조건식
- DEPTNO 가 겹치네? 하나만 출력되게 해주자
- 누구의 DEPTNO 표시해줄 것인지 표시 해줘야 한다. EMP.DEPTNO
INNER JOIN 끝!
+@ 오라클에서는 WHERE 이용해서 JOIN 가능
- 다른 곳에서는 안될 수도 있다.
가능하면 ANSI표준으로 작성하는 것이 범용성면에서 좋다.!
진도--
2번 - OUTER JOIN
- INNER JOIN 인 INNER 생략 가능했지만 OUTER는 불가능
- OUTER JOIN 은 LEFT 인지 RIGHT인지 FULL인지 표시해주어야 함
2-1 : LEFT OUTER JOIN 사용해보기
- 비교 기준인 DEPT NO에 NULL인 값 애도 표시해준다
- INNER JOIN 은 매칭 안되면 잘라주었다.
OUTER JOIN 은 매칭 안되어도( 조건에 맞지 않아도) 일단 출력해주는구나~
대신 오른쪽 빈칸 값에 NULL이라고 표시되는구나~~
2-2 : RIGHT OUTER JOIN 사용해보기
- ROW가 1개 더 나왔다.
- 왜 그러냐?
## INNER JOIN 사용한 경우
- :: 결과표에 DEPT테이블에 매칭 된 애들 ROW 14개 출력
## LEFT OUTER JOIN 사용한 경우
- :: 결과표에 왼쪽 테이블 ( EMP 테이블 ) 기준 :
- 왼쪽(EMP)테이블에서 조건에 맞지 않아서 매칭 X - 남아있던 swy - 1개 추가해서 - ROW 15개 출력
- ( 오른쪽 테이블 dept테이블에 있는 - 매칭 안된 40번 OPERATION 이랑, 매칭안된 99번 부서부서 안 나옴)
## RIGHT OUTER JOIN 사용한 경우
- :: 결과표에 오른쪽 테이블 ( DEPT 테이블 ) 기준 :
- 오른쪽(DEPT)테이블에서 조건에 맞지 않아서 매칭 X - 남아있던 40번, 99번 - 2개 추가해서 - ROW 16개 출력
- ( 왼쪽 테이블 EMP 테이블에 있는 - 매칭 안된 번 매칭안된 SWY 안 나옴 )
## 짝이 없는 친구도 보여주려고 OUTER JOIN 사용! -기준 테이블을 정해준다.(LEFT / RIGHT)
## 쿼리문에 먼저 사용한 것이 LEFT ///// JOIN절에 사용한 것이 RIGHT
##일반적으로는 LEFT기준으로 사용
2-3 : FULL OUTER JOIN 사용해보기
- +++( 왼쪽 / 오른쪽 ) 양쪽에 소외된 애들 다 보여주고 싶다면?
- --- 소외된 애들까지 모두 출력되어서 RESULT SET에 : ROW 17개 출력
왼쪽 오른쪽 매칭 안된 애들까지 모두 다 RESULT SET에서 보여준다.
진도--
3번 - CROSS JOIN
- -- 곱하기를 생각하면 편하다.
- -- 모든 행을 다 연결한다고 생각
##기준행 조건 필요 없다..
## 왼쪽테이블 X 오른쪽 테이블 ROW수만큼 출력
진도--
4번 - SELF JOIN
## 특정 사원의 관리자 번호로 관리자의 이름을 알고 싶다!
## 관리자 이름 가지고 있는 테이블은?
## 그걸 가지고 있는 것이 지금의 테이블이구나! -
## 주의할 점은 별칭 잘 정해주기
## 실행사례 ) 댓글에 대댓글 - SELF JOIN으로 구현 가능 ( 다른 방식으로 처리한다 보통 JOIN이 무거워서)
## OUTER JOIN을 제일 많이 사용할 것이다. 이것만 잘해도 괜찮을 것이다.
## 이걸로도 해결안되면 CROSS JOIN 사용하는데. 흔치않다.
진도 --
집합 연산자 [ UNION, INTERSECT, UNIONALL, MINUS ]
## UNION == 중복되는 데이터 있을 시 1개만 남겨주고 없애버린다. - 4개의 ROW 보여준다.
## INTERSECT == 교집합인 것만 보겠다 - 중복되는 데이터 - 1개의 ROW만 보여준다
## UNION ALL == 두 개의 테이블 모든 칼럼 보겠다 - 5개의 ROW 모두 보여준다
## MINUS - 교집합을 빼고 보겠다 - 중복 데이터 빼고 3개의 ROW 보여준다
1번 - UNION
- UNION : 칼럼 타입, 개수 일치해야 함.
- ( 숫자면 숫자로, 문자면 문자로 ) , ( 2개면 2개로 개수도 같이 )
- 결과 집합을 연결해줌(세로 형태로)
## 서로 다른 어떤 결과 집합을 하나로 합쳐주는데 JOIN처럼 옆으로 합쳐주는 것이 아니라 밑으로 합쳐주는구나~!
## 첫 번째 SELECT 쿼리의 스키마만 적용되는구나~
## 실제 DB에 적용된 것은 아니다~ 결과 집합에서만 보이는 것!
2번 - INTERSECT ( 교집합 )
- 교집합을 조회하겠다.
3번 - UNION ALL ( 합집합 )
- 칼럼 모두 다 보겠다 - UNION ALL
4번 - MINUS ( 차집합 )
- ## 교집합을 빼고 보겠다 - MINUS
REVIEW
JOIN과 집합 연산자에 대해 학습하였다.
두 가지 개념 모두 사용하거나 이해하는데
큰 무리는 없었다.
다만 실제 어떤 상황에 사용해야 할지 궁금해서 생각해보았다.
대표적인 INNER JOIN은
학생들이 수강하는 과목을 가지고
해당 과목 교수님과 매칭 지어주는 상황에서 사용할 수 있을 것 같고
[ LEFT,RIGHT,FULL ] OUTER JOIN 은
수강신청 안 한 학생, 수강생이 없는 과목 확인하려 할 때
SELF JOIN은 -
1차 검색 결과물을 대상으로 다시 검색할 때, 댓글에 대댓글을 다는 경우
사용할 수 있을 것 같다.
집합 연산자는
5가지 메뉴가 있는 푸드코트의 상황에서
INTERSECT ==> 떡볶이와 돈가스 모두 먹은 손님
UNION ALL ==> 푸드코트를 이용한 모든 손님
MINUS ==> 1개의 메뉴만 이용한 손님
실제 상황으로 사용해 본 적이 없어서 맞는 상황 예시인지 모르겠다.ㅎㅎ
어떤 기능이 있고, 어떻게 사용하는지 체크해 놓고
주어진 상황에 맞춰 사용할 수 있도록 해보자!
'Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원 > 5월' 카테고리의 다른 글
22.05.24 - 회원가입, 로그인 기능 구현 !! (0) | 2022.05.27 |
---|---|
22. 05. 23 - 3차 시험! - 데이터베이스 구현 test (0) | 2022.05.25 |
22. 05. 19 - 함수 사용해보기, GROUP BY, 서브 쿼리 (0) | 2022.05.22 |
22.05.18 - jdbc ( Connection, Statement, ResultSet ) (0) | 2022.05.19 |
22.05.18 - 정규표현식, ORDER BY, ROWNUM, DISTINCT (0) | 2022.05.19 |