JOIN이란?
- 둘 이상의 테이블을 연결하여 데이터를 검색
- 일반적으로 테이블의 식별키인 Primary Key와 공통키인 Foreign Key값을 사용하여 조인
JOIN의 종류
- Equi Join: 동일한 칼럼을 기준으로 조인
- Non Equi Join: 동일한 칼럼 없이 다른 조건을 사용하여 조인
- Other Join: 조인 조건에 만족하지 않는 행도 나타냄
- Self Join: 한 테이블 내에서 조인
- Inner Join: 일반적인 Join에서 ,(콤마) 대신 INNER JOIN절을 사용 → 조건을 만족하는 행만 반환
- Outer Join: 조인 조건을 만족하지 못하는 행들을 같이 조인하기 위하여 사용 → 조건을 만족하지 않는 행도 반환
1. Equi Join
- 조인을 할 대상 테이블에서 공통적으로 사용하는 컬럼의 값이 일치되는 행을 연결하여 결과 생성
- 가장 많이 사용하는 '='에 의해 조인함
-- 형식
SELECT 별칭1.컬럼명1, 별칭2,컬럼명2...
FROM 테이블명1 별칭1, 테이블명2 별칭2
WHERE 별칭1.공통칼럼 = 별칭2.공통칼럼
예제 1: Allen의 부서명 조회
SELECT e.ename, d.*
FROM emp_table e, dept_table d
WHERE e.deptno = d.deptno AND ename = 'ALLEN';
예제 2: 뉴욕에서 근무하는 사원 정보 조회
SELECT e.ename, e.job, e.hiredate, d.loc
FROM emp_table e, dept_table d
WHERE e.deptno = d.deptno AND d.loc = 'NEW YORK';
2. Non EquiJoin
- 동일한 컬럼이 없이 다른 조건을 사용하여 조인 (많이 쓰이지는 않음)
- BETWWEN AND, IS NULL, IS NOT NULL, NOT IN 사용
예제 : 급여 grade 별 사원 정보 조회
SELECT e.ename, e.job, e.sal, s.grade
FROM emp_table e, salgrade_table s
WHERE sal BETWEEN losal AND hisal;
3. Self Join
- 하나의 테이블에서 Equi Join
예제 : 각 사원들과 매니저의 이름을 합쳐서 조회
SELECT e.ename || '의 매니저는 ' || m.ename || '입니다' 매니저
FROM emp_table e, emp_table m
WHERE e.mgr = m.empno;
4. Inner Join
- 일반적인 Join
- (,)콤마 대신 INNER JOIN절 / WHERE 대신 ON절 / INNER 키워드는 생략 가능
-- 형식
SELECT 별칭1.컬럼명1, 별칭2,컬럼명2...
FROM 테이블명1 별칭1 INNER JOIN 테이블명2 별칭2
ON 별칭1.공통칼럼 = 별칭2.공통칼럼
예제 : 직무가 salesman인 사원들의 부서정보 조회
SELECT e.ename, e.job, d.*
FROM emp_table e INNER JOIN dept_table d
ON e.deptno = d.deptno AND e.job = 'SALESMAN';
5. Outer Join
- Equi 조인의 경우 한쪽 컬럼에만 값이 있다면 해당 행은 조회되지 못한다. (값이 이상하게 겹쳐서 나옴)
- 조인 조건을 만좃하지 못하는 행들도 같이 조회하기 위하여 Outer Join을 사용한다.
- '+' 연산자를 사용하며 조인조건을 만족하는 값이 없어도 조회하려는 쪽(한쪽에만)에 사용한다.
예제: King은 제일 상위 직급이기 때문에 매니저가 없다. 그래서 위의 Self Join의 예제 결과에서는 조회되지 않았는데,
King도 포함하여 정보를 조회할 수 있다.
SELECT e.ename || '의 매니저는 ' || m.ename || '입니다' 매니저
FROM emp_table e, emp_table m
WHERE e.mgr = m.empno(+);
ANSI 문법
- 표준 SQL문으로 다른 DBMS에서도 사용 가능한 문법이다.
- 종류: LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN
1. LEFT OUTER JOIN
- JOIN의 왼쪽에 오는 테이블을 모두 포함하여 조회.(오른쪽에 오는 테이블에 null이 있어도 왼쪽의 모든 행이 조회)
예제: 매니저가 없는 직원을 포함하여 조회(위의 그냥 outer join예제와 동일
SELECT e.ename || '의 매니저는 ' || m.ename || '입니다' 매니저
FROM emp_table e LEFT OUTER JOIN emp_table m
ON e.mgr = m.empno(+);
2. RIGHT OUTER JOIN
: JOIN의 오른쪽에 오는 테이블을 모두 포함하여 조회.(왼쪽에 오는 테이블에 null이 있어도 왼쪽의 모든 행이 조회)
예제: Operations부서에 속하는 직원을 포함하여 조회
SELECT e.ename, e.job, d.*
FROM emp_table e RIGHT OUTER JOIN dept_table d
ON e.deptno = d.deptno
ORDER BY e.deptno;
3. FULL OUTER JOIN
: 왼쪽 오른쪽 어느쪽에 NULL값이 있더라도 포함하여 모두 출력
예제: t1_table과 t2_table 조인하기
SELECT test1_table.no NO1, test2_table.no NO2
FROM test1_table FUll OUTER JOIN test2_table
ON test1_table.no = test2_table.no;
'Database' 카테고리의 다른 글
9. 집합연산자 (0) | 2023.05.04 |
---|---|
8. 서브쿼리 (0) | 2023.05.04 |
6. DML/TRANSACTION (0) | 2023.05.04 |
5. 단일함수/그룹함수/CASE문 (0) | 2023.05.04 |
4. SQL언어의 종류 / SELECT / WHERE / 연산자 (0) | 2023.05.04 |