SQLD/SQL 기본과 활용

SQL JOIN(EQUI JOIN, NON-EQUI JOIN, OUTER JOIN)

DevPing9_ 2020. 8. 24. 16:04

# JOIN의 기준이 되는 테이블은 JOIN 조건을 기술할때 나열되는 두 테이블중 뒤에 위치하는 테이블이다

 

좌) PLAYER 테이블, 우) TEAM 테이블

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' 으로 기술되는 조인

좌) EMP 테이블, 우) SALGR 테이블

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