SQLD/SQL 기본과 활용
SQL JOIN(EQUI JOIN, NON-EQUI JOIN, OUTER JOIN)
DevPing9_
2020. 8. 24. 16:04
# JOIN의 기준이 되는 테이블은 JOIN 조건을 기술할때 나열되는 두 테이블중 뒤에 위치하는 테이블이다


SQL> SELECT A.PLAYER_NAME, A.TEAM_ID
B.TEAM_NAME
FROM PLAYER A, TEAM B
WHERE B.TEAM_ID = A.TEAM_ID; # A.TEAM_ID를 기준으로 B테이블과 비교하며 조인
# 실행결과
PLAYER_NAME TEAM_ID TEAM_NAME
-----------------------------------------------
고종수 K07 포항
문창수 K06 대구
이청용 K01 서울
1. EQUI JOIN
- 보통 'PK-FK' 관계로 이루어져, 조인조건이 '='로 성립하는 조인 (조인 칼럼이 1:1 맵핑이 가능한 경우)
SQL> SELECT A.PLAYER_NAME, A.TEAM_ID
B.TEAM_NAME
FROM PLAYER A, TEAM B
WHERE B.TEAM_ID = A.TEAM_ID; # A.TEAM_ID를 기준으로 B테이블과 비교하며 조인
# 실행결과
PLAYER_NAME TEAM_ID TEAM_NAME
-----------------------------------------------
고종수 K07 포항
문창수 K06 대구
이청용 K01 서울
2. NON-EQUI JOIN
- 'PK-FK' 관계로 이루어져 있지 않으며, 조인조건이 '>, >=, <=, <, BETWEEN' 으로 기술되는 조인


SQL> SELECT A.ENAME, A.SAL,
B.GRADE
FROM EMP A, SALGR B
WHERE A.SAL BETWEEN B.LOWSAL AND B.HIGHSAL
# 실행결과
ENAME SAL GRADE
-----------------------------------------------
문성태 500 6
김그림 800 5
고종수 1500 2
이태환 1000 4
3. OUTER JOIN
- 바로 위의 예시에서 Brian 이 SALGR 테이블의 조건에 만족하지 않아 출력이 되지않음 (조인조건에 만족하지 않음)
- OUTER JOIN은 조인할 테이블이없어도 특정테이블의 모든 데이터를 표시하고 싶은 경우에 사용
- OUTER JOIN과 NON-EQUI JOIN의 동시사용에 대해선 테스트후 재업로드 예정
- Oracle 은 WHERE 절에 (+) 기호를 NULL출력대상에 기술
# 이 예시는 검증되지않음
SQL> SELECT A.ENAME, A.SAL,
B.GRADE
FROM EMP A, SALGR B
WHERE A.SAL BETWEEN B.LOWSAL(+) AND B.HIGHSAL(+)
# 실행결과
ENAME SAL GRADE
-----------------------------------------------
문성태 500 6
김그림 800 5
고종수 1500 2
이태환 1000 4
Brian 1750
728x90