SELF JOIN
같은 테이블을 조인하는 것을 말한다.
ERD를 봤을 때는 아래와 같이 재귀 느낌이라고 보면 된다.
-- 구문 ANSI
SELECT *
FROM 컬럼 E
JOIN 컬럼 S ON (E.컬럼명 = S.컬럼명);
여기서 E와 S는 테이블에 대한 별칭을 나타냅니다.
-- 구문 ORACLE
SELECT *
FROM 컬럼 E,컬럼 S
WHERE E.컬럼명 = S.컬럼명;
이건 USING을 쓸 수 없고 ON으로 조건 절을 줘야 한다.
그 이유는 당연히 JOIN을 거는 USING은 부모 키와 자식 키 사이의 연관성이 있을 때 사용하는 것으로 헷갈린다면 그 JOIN 글을 보는 걸 추천합니다.
지금 위에 있는 쿼리는 ANSI 표준으로 FROM에서 EMPLOYEE 테이블이 나오는데 JOIN 부분에서도 EMPLOYEE가 나온다.
이렇게 자기 자신을 조인 걸어서 필요한 값들을 출력하는 데 사용할 수 있다.
위 같은 경우에는 직원과 관리자로 나타내기 위해 사용했다.
사원 테이블에 매니저 ID라는 칼럼이 있다. 이 매니저 ID 칼럼과 사원의 번호가 같은 경우에 그 사원에 대한 관리자가
다른 사원이다. 그것을 여기서 출력해주기 위해 JOIN을 걸어서 나타냈다.
간단하게 매니저 번호 = 사원번호 해당 사원이 한 사원의 관리자라는 뜻을 나타낸다. 이런 식으로 재귀적으로 사용한다.
여기서는 그 매니저를 관리하는 MGR_ID를 찾아 관리자의 관리자 즉 임원을 찾아낸다.
SELF JOIN에 SELF JOIN을 사용했다.
이렇게 N개의 테이블을 조인하려면 최소 N-1개의 조인 조건이 필요하다.
JOIN을 두 번 거는 경우
6개의 테이블을 조인해서 값 가져오기
USING 은 각 테이블의 부모 키와 자식 키 연관성이 있어 키만 넣어주면 된다.
ON은 연관성이 없을 때 사용하는 걸로
이렇게 여러 개를 조인할 때는 차례대로 해야 한다. JOIN으로 테이블은 병합되는 것이므로 테이블의 순서에
맞춰서 하지 않는다면 인식하지 못할 수 있다. 예를 들어 EMPLOYEE와 JOB을 JOIN 한 다음에 COUNTRY 조인한다면
해당 JOIN은 인식하지 못해 에러가 난다. 조인을 할 때는 연관이 있는 걸로 차례차례 해야 한다.
'Base > Database' 카테고리의 다른 글
[Database] Subquery(단일,다중) 사용법 (0) | 2020.07.17 |
---|---|
[Database] SEP Operator(UNION,UNION ALL, INTERSECT,MINUS) & IN Operator사용법 (0) | 2020.07.17 |
[Database] INNER JOIN / OUTER JOIN 함수 사용법 및 차이(ORACLE & ANSI표준) (0) | 2020.07.16 |
[Database] ORDER BY 절,GROUP BY 절 함수 사용법 (Oracle SQL) (0) | 2020.07.16 |
[Database] DECODE & CASE 함수 사용법 (Oracle SQL) (0) | 2020.07.15 |