[SQL] SQL 조인(Join)

JUNBEOM PARK·2022년 3월 8일

💡 SQL

목록 보기
6/7
post-thumbnail

🤔 조인(Join) ?

조인(JOIN)을 통해서 2개 이상의 테이블을 연결 할 수 있다.

조인은 기본적으로 기본키나 외부키 값의 연관에 의해 성립 되지만, 논리적인 값들의 연관만 으로도 성립할 수 있다.

1. 내부 조인(Inner Join)

Equi Join, Simple Join 이라고도 한다.

가장 기본적인 조인이며, 테이블 간의 공통 컬럼을 사용하여 컬럼 조건에 의한 결과를 출력하게 해준다.

이 때 출력한 로우(Row)의 수는 조회조건에 만족하는 수 이다.


구문

SELECT E.LAST_NAME, D.DEPARTMENT_NAME
FROM EMPLOYEES E, DEPARTMENTS D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND LAST_NAME = 'Himuro';



2. 외부 조인(Outer Join)

내부 조인의 경우에 만족하지 않을 경우 출력 되지 않는 데이터들이 있다

이때 만족 하지 않는 데이터도 출력할 수 있게 해주는 것이 외부 조인이다.


구문

SELECT E.EMPLOYEE_ID, E.DEPARTMENT_ID, D.DEPARTMENT_NAME
FROM EMPLOYEES E, DEPARTMENTS D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID(+);

외부조인은 출력되지 않은 데이터를 가진 테이블과 조인한 테이블 쪽에(+)를 추가해야 한다.

외부조인을 사용하기 위한 규칙
1. (+)는 WHERE 절에서만 사용 가능하다
2. 조인 조건 외에 다른 조건이 올 경우 해당 조건에도 (+)를 추가한다.
3. (+)는 컬럼에만 사용이 가능하며, OR 연산자와는 사용할 수 없다.
4. 오직 하나의 테이블과 외부 조인이 가능하다.
5. IN과 서브커리와는 함께 사용할 수 없다
6. 조건 중 한 쪽에만 (+)를 추가할 수 있다.




3. Self Join

다른 테이블이 아닌 자신의 테이블에 연결 하는 조인이다.

예를 들어 사원의 직속상관, 나의 정보 등에 사용 할 수 있다.

구문

SELECT A.LAST_NAME || '의 매니저는 ' || B.LAST_NAME || '이다.'
FROM EMPLOYEES A, EMPLOYEES B
WHERE A.MANAGER_ID = B.EMPLOYEE_ID
AND A.LAST_NAME = 'Kochhar';  // Kochhar 의 매니저는 King이다



4. ANSI Join

DBMS(Oracle, MySQL, MSSQL 등)에서 각기 다른 SQL문을 사용하기 때문에 모든 데이터베이스에서 호환이 되도록 하는 구문이다.


Oracle Join 구문 - 내부조인

SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL 
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND SAL > 2000;

ANSI Join 구문 - 내부조인

SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL
FROM EMP E INNER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
WHERE SAL > 2000;


Oracle Join 구문 - 외부조인

SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.JOB, E.SAL
FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO;

ANSI Join 구문 - 외부조인

SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.JOB, E.SAL
FROM EMP E RIGHT JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;

위 와 같이 기존 구문과 차이점은 FROM 절에 JOIN 키워드를 추가하며, 기존 구문 WHERE절에
동일 컬럼명을 명시 해놓은 구문을 ON절에 명시한다.

profile
DB 엔지니어👍

0개의 댓글