ALTIBASE HDB 5.3.3 기초강좌
JOIN 0 0 7,406

by Altibase JOIN EQUI JOIN INNER JOIN OUTER JOIN [2012.01.25]


JOIN이란?

  두 개 이상의 테이블들을 연결하여 데이터를 검색하는 것을 JOIN 이라고 합니다.

  JOIN 시 사용되는 JOIN 연산자에 따라서 EQUI JOIN과 NON EQUI JOIN 으로 구별되며, FROM 절의 JOIN 형태에 따라서 INNER JOIN과 OUTER JOIN 으로 구별합니다.

  JOIN 조건으로 사용되는 연산자에 따른 분류

JOIN 설명
EQUI JOIN 두 테이블 간의 칼럼 값들이 서로 일치하는 경우
JOIN 조건으로 '=' 연산자를 사용
NON EQUI JOIN 두 테이블 간의 칼럼 값들이 서로 일치하지 않는 경우
JOIN 조건으로 'BETWEEN ~ AND' 등의 범위 비교 연산자를 사용

  FROM 절의 JOIN 형태에 따른 분류

JOIN 설명
INNER JOIN JOIN 조건에서 값이 일치하는 행만 반환
OUTER JOIN JOIN 조건에서 한쪽 값이 없더라도 행을 반환

EQUI JOIN

EQUI JOIN 개념
  • - 두 테이블 간의 컬럼 값들이 서로 정확하게 일치하는 경우에 사용하는 JOIN으로 WHERE 절에 '=' 연산자를 사용하여 JOIN 조건을 명시합니다.
  • - 일반적으로 기본키, 외래키로 지정된 컬럼을 JOIN으로 많이 사용합니다.
  • [그림] EQUI JOIN 개념
  • EQUI JOIN 개념

EQUI JOIN 구문
 
SELECT table1.column_name, table2.column_name
FROM table1, table2
WHERE table1.column_name = table2.column_name;
    
  • - table1.column_name : 데이터를 검색할 테이블 및 열을 명시한다.
  • - table 이름 대신에 FROM 절에 기술한 테이블의 alias를 사용해도 된다.
  • - table1.column_name = table2.column_name : 두 테이블을 JOIN 시킬 JOIN 조건을 명시한다.
  • - table 이름 대신에 FROM 절에 기술한 테이블의 alias를 사용해도 된다.

EQUI JOIN 예제

  사원이 어떤 부서에서 근무하는지를 검색하시오.

 
iSQL> SELECT employee.eno, employee.ename, department.dno, department.dname
      FROM employee, department
      WHERE employee.dno = department.dno;
    

  사원이 어떤 부서에서 근무하는지를 검색하시오(별칭을 사용하시오).

 
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
      FROM employee e, department d
      WHERE e.dno = d.dno;
    

NON EQUI JOIN

NON EQUI JOIN 개념

  두 테이블 간의 컬럼 값들이 서로 일치하지 않는 경우에 사용하는 JOIN 방법으로 WHERE 절에 보통 BETWEEN ~ AND, < , > 등의 비교 연산자를 사용하여 JOIN 조건을 작성합니다.

  • [그림] NON EQUI JOIN 개념
  • ON EQUI JOIN 개념

NON EQUI JOIN 예제

  사원이 받는 급여의 등급을 조회

 
iSQL> SELECT e.ename, e.salary, s.grade
      FROM employee e, salary s
      WHERE e.salary BETWEEN s.low_sal AND s.high_sal;
    

INNER JOIN

INNER JOIN 개념

  JOIN 조건을 만족하는 행만 반환하는 JOIN으로 FROM 절에 INNER JOIN 혹은 JOIN 절을 사용합니다. JOIN 조건은 ON 절에 명시합니다.

INNER JOIN 구문
 
SELECT table1.column_name, table2.column_name, …
FROM table1 [INNER] JOIN table2
ON table1.column_name = table2.column_name;
    
  • - table1 [INNER] JOIN table2 : JOIN 할 테이블의 이름을 나열한다. INNER 를 생략해도 INNER JOIN 방식이 적용된다.
  • - ON table1.column_name=table2.column_name : JOIN 조건을 명시한다

INNER JOIN 예제

  사원정보와 사원이 근무하는 부서이름을 검색하시오.

 
-- 아래 두 쿼리는 결과가 동일하다
-- 일반적인 조인 방식
iSQL> SELECT e.eno, e.ename, d.dno, d.dname 
      FROM employee e, department d
      WHERE e.dno = d.dno;

-- INNER JOIN 을 사용한 방식
iSQL> SELECT e.eno, e.ename, d.dno, d.dname 
      FROM employee e INNER JOIN department e
      ON e.dno = d.dno;
    

OUTER JOIN

OUTER JOIN 개념

  조인 조건을 만족하지 않는 데이터를 처리하기 위한 JOIN의 확장 형태입니다. INNER JOIN 이 두 테이블에 있는 키 갑싱 일치하는 데이터만 가져오는 것에 비해 OUTER JOIN은 어느 한 쪽의 데이터를 모두 가져옵니다.

  또한, 한 테이블의 행이 다른 테이블의 행에 대응되지 않을 때 반환된 결과 집합의 경우, 대응되지 않는 행을 갖고 있는 테이블로 확인된 모든 결과 집합 열에 대해 NULL값이 제공됩니다.

  • [그림] OUTER JOIN 개념
  • OUTER JOIN 개념

OUTER JOIN 구문
 
SELECT table1.column_name, table2.column_name, …
FROM table1 {LEFT|RIGHT|FULL} OUTER JOIN table2
ON table1.column_name = table2.column_name;
    
  • - LEFT OUTER JOIN : JOIN 수행 시 왼쪽에 표기된 데이터를 기준으로 OUTER JOIN을 수행한다.
  • - RIGHT OUTER JOIN : JOIN 수행 시 오른쪽에 표기된 데이터를 기준으로 OUTER JOIN을 수행한다.
  • - FULL OUTER JOIN : 조인 수행 시 왼쪽, 오른쪽 테이블의 모든 데이터를 읽어 JOIN을 수행한다. LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일하다.

OUTER JOIN 예제

  사원이 어떤 부서에서 근무하는지를 검색하고, 부서를 아직 배정받지 못한 사원정보까지 함께 검색하시오

 
-- 아래 두 쿼리의 결과는 동일하다.
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
      FROM employee e LEFT OUTER JOIN department d
      ON e.dno = d.dno;

iSQL> SELECT e.eno, e.ename, d.dno, d.dname
      FROM department d RIGHT OUTER JOIN employee e
      ON e.dno = d.dno;
    

  사원이 어떤 부서에서 근무하는지 검색하고, 부서를 아직 배정받지 못한 사원 및 사원이 아직 없는 부서정보도 함께 검색하시오.

 
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
      FROM department d RIGHT OUTER JOIN employee e
      ON e.dno = d.dno;
    

- 강좌 URL : http://www.gurubee.net/lecture/2178

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입