INNER JOIN과 OUTER 조인

INNER JOIN : 두 개의 테이블 A, B가 있을 때 이들의 교집합을 찾는 JOIN입니다.

OUTER JOIN : 두 개의 테이블 A, B가 있을 때 이들의 합집합을 찾는 JOIN입니다.

 

예를 들어, A와 B 테이블에 다음과 같이 자료가 들어가 있을 때 어떻게 사용하는지 봅시다.

 

A B
1 3
2 4
3 5
4 6

 

A와 B 테이블의 INNER JOIN 수행

INNER JOIN을 수행하면 두 테이블에 공통 데이터가 있는 열이 출력됩니다.

 

SELECT * FROM A
INNER JOIN B ON A.a = B.b

 

위의 쿼리를 수행 시 아래와 같이 데이터가 출력됩니다.

 

A B
3 3
4 4

출력 결과에서 알 수 있듯 두 테이블에 공통으로 들어간 열만 출력되는 것을 볼 수 있습니다.

 

A와 B 테이블의 LEFT OUTER JOIN 수행

LEFT OUTER JOIN을 수행하면 기준이 되는 테이블의 모든 열에 B와 공통되는 부분을 추가로 얻을 수 있습니다.

 

SELECT * FROM A
LEFT OUTER JOIN B ON A.a = B.b

 

위의 쿼리를 수행 시 아래와 같이 데이터가 출력됩니다.

 

A B
1 null
2 null
3 3
4 4

출력 결과에서 알 수 있듯 두 테이블 중 기준이 되는 A 테이블의 열은 모두 출력하고 B에서는 A와 곂치는 부분만 출력하는 것을 알 수가 있습니다.

 

JOIN을 할 때 조건으로 어떤 컬럼과 일치시켜 줄 것인가에 대해 ON이나 USING을 사용하는데 두 키워드의 차이점을 설명드리겠습니다.

 

EMPLOYEE 테이블과 SALARY 테이블이 있고 이 두 테이블에 모두 DEPT_ID라는 컬럼이 있어서 이 컬럼을 기준으로 조인을 해주게 되면 아래와 같이 작성하면 됩니다.

 

SELECT *
FROM EMPLOYEE e
JOIN SARALY s
ON e.DEPT_NO = s.DEPT_NO

 

그런데 이처럼 조인할 두 컬럼의 이름이 같은 경우에는 ON 대신에 USING을 사용할 수 있고 USING 사용 시 다음과 같이 작성하시면 됩니다.

 

SELECT *
FROM EMPLOYEE e
JOIN SALARY s
USING(DEPT_NO)

 

* 주의할 점은 두 컬럼의 이름이 같을 때만 동작한다는 것입니다.

 

GROUP BY

GROUP BY는 특정 컬럼을 기준으로 그룹화 하는 명령어로 그룹화를 통해 통계 데이터를 추출할 수 있습니다.

 

SELECT 컬럼
FROM 테이블명
WHERE 조건
GROUP BY 그룹화할 컬럼
HAVING 그룹화할 조건

부서에서 연봉이 5000 이상인 정보를 추출

SELECT
DEPT.NAME,
COUNT(EMP.ID),
SUM(EMP.SALARY),
AVG(EMP.SALARY),
MIN(EMP.SALARY),
MAX(EMP.SALARY)
FROM EMPLOYEE EMP
JOIN DEPARTMENT DEPT ON (DEPT.ID = EMP.DEPT_ID)
GROUP BY DEPT.ID
HAVING AVG(EMP.SALARY) >= 5000

중복된 데이터를 제거하고 싶을 때는 DISTINCT를 사용합니다.

 

아래는 학생 테이블에서 학과를 하나씩만 출력하는 쿼리입니다.

 

SELECT DISTINCT(DEPARTMENT) FROM STUDENT;

 

+ Recent posts