조인
- 두 개 이상의 테이블을 연결지어서 데이터를 조회하는 것
- 그림과 같이 서로 연관있는 행을 연결하여 새로운 가상 테이블을 만들어서 사용 할 수 있음
교차조인(카티션곱, CROSS JOIN)
SELECT 테이블1.컬럼명, 테이블1.컬럼명, 테이블2.컬럼명, 테이블2.컬럼명, ...
FROM 테이블1, 테이블2
- join 조건 없이 각 테이블의 모든 행을 붙이는 것
테이블N의 행 수 x 테이블M의 행 수
만큼의 데이터가 출력됨
등가조인(EQUI JOIN)
SELECT 테이블1.컬럼명, 테이블1.컬럼명, 테이블2.컬럼명, 테이블2.컬럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.컬럼=테이블2.컬럼;
- 보편적으로 사용되는 조인방법
- 두 개 이상의 테이블의 공통된 데이터를 갖는 컬럼을 연결하여 결과를 검색
- WHERE절에 두 테이블의 겹치는 컬럼을 적어 컬럼을 연결함
SELECT E.EMPLOYEE_ID, J.JOB_TITLE, D.DEPARTMENT_NAME
FROM EMPLOYEES E, JOBS J, DEPARTMENTS D
WHERE E.JOB_ID = J.JOB_ID
AND E.DEPARTMENT_ID = D.DEPARTMENT_ID;
- FROM절에 테이블명을 적고 별칭을 적어서 명령어를 간략히 함
- AND 키워드로 여러 테이블/컬럼 조인 가능
- 컬럼의 이름이 달라도 조인 가능
비등가조인(NON-EQUI JOIN)
- 테이블 간 일치하는 컬럼은 없지만, 일정 범위 조건을 만족할때 비교연산자를 이용한 조인방법
- <, >, BETWEEN a AND b 등, '='가 아닌 연산자 사용
- 주로 등급과 관련된 테이블에서 많이 쓰임
SELECT E.EMPLOYEE_ID, E.FIRST_NAME, E.SALARY, S.GRADE
FROM EMPLOYEE.E, SALARY_GRADE S
WHERE E.SALARY >= S.MIN_SALARY
AND E.SALARY <= S.MAX_SALARY;
셀프조인(SELF JOIN)
- 하나의 테이블 안에서 조인을 구성하는 것
- 상위데이터-하위데이터를 서로 연관지어 조회할 때 사용
- 상사-부하직원 정보
- 같은 부서에서 일하는 직원 조회
SELECT 사원.ename, 상사.ename
FROM EMP 사원, EMP 상사
WHERE 사원.mgr=상사.empno;
-- mgr: 상사ID, empno: 본인ID
- 같은 테이블을 이용하더라도 컬럼이 중복 될 경우, 테이블을 한번 더 불러와야함
FROM EMPLOYEES EMP, EMPLOYEES MGR, SALARY_GRADE S1, SALARY_GRADE S2
포괄조인(OUTER JOIN)
- 데이터가 한쪽은 있고 한쪽은 없는 경우(NULL), 있는 쪽 기준으로 데이터를 조회하는 JOIN방법
- 처리속도가 늦어지므로 되도록 덜 쓰는 편이 좋음
SELECT L.COUNTRY_ID, L.UNITS, R.COUNTRY
FROM LEFT_TABLE L, RIGHT_TABLE R
WHERE L.COUNTRY_ID(+) = R.ID
-- 데이터가 없는 쪽에 (+) 기호를 붙여 포괄조인을 실행함