Join
- 조인은 두 개 이상의 테이블을 연결지어서 데이터를 조회하는 것이다.
- 오라클과 같은 관계형데이터베이스는 모든 정보를 하나의 테이블에 저장하는 것이 아니라, 데이터가 정규화되어 여러 테이블에 분산되어 있다.
- 데이터가 여러 테이블에 흩어져 있기 때문에 사용자가 원하는 데이터를 찾기위해서는 여러 테이블을 다 조회해야 한다.
- 조인은 여러 테이블에 흩어져 있는 정보중에서 사용자가 원하는 정보만 가져와서 가상의 테이블처럼 만들어서 데이터를 조회하는 것이다.
Join의 예
- 사원테이블에는 사번, 이름, 소속부서번호가 있다
- 부서테이블에는 부서번호, 부서명, 위치가 있다
- 아래와 같이 사원테이블에서 사원의 이름을 가져오고, 부서테이블에서 그 사원이 소속된 부서명을 조회해야 한다
- 사원테이블과 부서테이블의 각각의 행을 서로 연관있는 행끼리 연결지어서 새로운 가상의 테이블을 만들고, 그 테이블로부터 필요한 정보를 가져오는 것이다
Join의 방법
Oracle Join
SELECT a.col1, b.col2
FROM table1 a, table2 b
WHERE a.col2 = b.col2; -- Join 조건
ANSI Join
SELECT a.col1, b.col2
FROM table1 a [INNER] JOIN table2 b
ON a.col2 = b.col2
- 조인문법은 오라클에서만 사용되는 Oracle Join과 모든 RDBMS에서 공통적으로 사용하는 ANSI(표준) Join이 있다
- 조인이 수행될 때는 두 개 이상의 테이블이 사용되는데, 둘 중에 먼저 읽는 테이블을 선행 태이블이라 하고, 뒤에 오는 테이블을 후행 테이블이라고 한다
- 선행 테이블은 조회할 데이터가 적은 테이블로 선택하는 것이 속도면에서 유리
= 테이블의 조인은 조인대상이 되는 테이블의 이름을 FROM절에 나열하기만 하면된다
= 별도의 조건이 없으면 테이블1의 모든 행과 테이블2의 모든 행이 연결된 가상의 테이블이 생성된다 ( 카디션 곱 )
Join의 종류
카디션곱(Cartesian product)
- 조인에서 가장 중요한 부분은 조인조건을 지정해주는 부분이다
- emp테이블과 dept테이블에서 서로 관련있는 데이터를 가져올 때, 조인조건을 보고 가져오게 되는데 조인조건이 적절하지 않으면 틀린 데이터를 가져오거나 데이터를 가지고 오지 못할 수 있다
- 카티션곱은 조인조건을 지정하지 않고, 두 개 이상의 테이블을 조인하는 것이다
- 조인조건을 지정하지 않으면 조인된 테이블의 모든 데이터를 전부 가져오게 된다
- ANSI SQL에서는 CROSS Join이라고 한다
- 이런 경우 조인 작업에 참조되는 테이블의 행수를 모두 곱한 값 만큼의 행이 조회결과가 된다 ( M * N )
카디션곱 예시
등가조인(Equi Join)
- 조인에서 가장 많이 사용되는 조인
- 등가조인은 선행 테이블에서 데이터를 가져온 후 조인 조건절을 검사해서 동일한 값을 가진 데이터를 후행 테이블에서 꺼내오는 방법이다
- 조인조건에서 Equal(=) 연산자를 사용해서 Equi Join이라고 한다
등가조인 방법
-- ORACLE 등가조인
SELECT A.컬럼명, A.컬럼명, B.컬럼명, B.컬럼명, ...
FROM 테이블 A, 테이블 B
WHERE A.컬럼명 = B.컬럼명;
-- ANSI SQL 등가조인
SELECT A.컬럼명, A.컬럼명, B.컬럼명, B.컬럼명, ...
FROM 테이블 A JOIN 테이블 B
ON A.컬럼명 = B.컬럼명;
등가조인 사용예시
테이블 3개를 등가조인하는 예시
비등가조인(Non-Equi Join)
- 조인조건을 지정할 때 조인 대상테이블에서 같은 값을 가진데이터를 가져오는 대신, 크거나 작은 경우의 조건으로 데이터를 조회하는 조인 방식이 비등가 조인이다.
비등가조인 예시
포괄조인(Outer Join)
- 등가조인, 비등가조인은 조회하려는 데이터들이 조인에 참여하는 모든 테이블에 데이터가 존재하는 경우에만 조회된다
- 포괄조인은 한쪽 테이블에는 데이터가 있고, 다른쪽 테이블에는 데이터가 없는 경우에 데이터가 있는 쪽 테이블의 내용을 전부 조회하는 조인방법이다
포괄조인 예시
셀프조인(Self Join)
- 하나의 테이블을 이용해서 조인을 구성하는 것이다
- 하나의 테이블 안에 상위데이터, 하위데이터가 있는 경우 상위데이터와 하위데이터를 서로 연관지어서 조회할 때 셀프조인이 필요하다
- 하나의 테이블을 역할을 각각 나누어서 조인에 참여시켜야 한다
셀프조인 예시
'SQL' 카테고리의 다른 글
SQL_서브쿼리 (1) | 2023.12.17 |
---|---|
SQL_그룹함수(GROUP BY, HAVING) (0) | 2023.12.14 |
SQL_오라클 내장함수(변환함수, 기타함수) (0) | 2023.12.12 |
SQL_오라클 내장함수 (문자함수, 숫자함수, 날짜함수) (1) | 2023.12.11 |
SQL_오라클의 데이터타입 (2) | 2023.12.07 |