(Oracle DB 사용 / 툴: SQL Developer / scott 계정 사용)
* Join (조인) 이란
관계형 데이터베이스에서는 테이블간의 관계가 중요하기 때문에 하나 이상의 테이블이 빈번히 결합되어 사용된다.
한 개 이상의 테이블에서 원하는 결과를 얻기 위해 사용 되는 것이 Join이다.
조인의 종류 | |
Equi Join - inner join, simple join | 동일 칼럼을 기준으로 조인한다. |
Non Equi Join | 동일 칼럼이 없이 다른 조건을 사용하여 조인한다. |
Outer Join | 조인 조건에 만족하지 않는 행도 나타낸다. |
Self Join | 한 테이블 내에서 조인한다. |
0. Cross Join
2개 이상의 테이블이 조인될 때 where 절에 의해 공통되는 칼럼에 의한 결합이 발생 되지 않는 경우를 말한다.
다음은 cross join으로 특별한 키워드 없이 select 문의 from 절에 emp 테이블과 dept 테이블을 동시에 기술한 예제인데
select *
from emp, dept;
위와 같은 조인은 아무런 의미 없이 테이블을 조합해 놓은 것으로 개발자의 실수로 발생 되는 경우가 대부분이다.
따라서 기본적으로 조인은 다음과 같은 규칙을 준수해야 한다.
- Primary Key와 Foreign Key열을 통한 다른 테이블의 행과 연결한다.
- 연결 Key 사용으로 테이블과 테이블이 결합한다.
- where 절에서 조인 조건을 사용한다. (조인 조건 개수 = 연결 테이블 수 -1)
- 명확성을 위해 칼럼 이름 앞에 테이블명 또는 테이블 별칭을 붙인다.
1. Equi Join
가장 많이 사용하는 조인 방법으로,
조인 대상이 되는 두 테이블에서 공통적으로 존재하는 칼럼의 값이 일치되는 행을 연결하여 결과를 생성하는 조인 방법이다.
ex-1) 부서번호가 같은 사원의 이름과 부서 이름을 출력하기
select ename, dname
from emp, dept
where emp.deptno = dept.deptno;
두 테이블을 조인 하려면 일치되는 공통 칼럼을 사용해야 하기 때문에
emp 테이블과 dept 테이블의 공통 칼럼인 deptno 값이 일치(=) 되는 조건을 where 절에 사용한다.
칼럼명이 같게 되면 혼동이 오기 때문에 칼럼명 앞에 테이블명을 점(.)과 함께 기술함
조인한 결과를 보면 부서번호를 기준으로 같은 값을 가진 사원 테이블과 부서 테이블이 결합 되었다.
(▼ 사원 테이블과 부서 테이블)
부서 테이블의 Primary Key인 부서번호가 사원 테이블의 Foreign Key로 설정되어 있다.
이 연결 Key를 where 절에서 조인 조건에 사용하고 비교 연산자로 '='를 사용 하였으므로 이를 Equi Join 이라고 한다.
* 테이블 명이 너무 긴 경우에는 테이블 명에 간단하게 별칭을 부여해서 문장을 간단하게 기술 할 수 있다.
테이블 명의 별칭은 from 절 다음에 테이블 이름을 명시하고 공백을 둔 다음 지정한다.
select e.ename, d.dname, e.deptno, d.deptno
from emp e, dept d
where e.deptno = d.deptno;
ex-2) 부서번호가 같은 사원의 이름과 부서 이름을 출력하는데 이름이 SCOTT인 사람의 정보만 출력하기
위 예제에서 이름이 SCOTT인 사람의 정보만 출력하기 위해서는 where 절에서 and 연산자를 추가하면 된다.
select e.ename, d.dname
from emp e, dept d
where e.deptno = d.deptno and e.ename = 'SCOTT';
2. Non-Equi Join
조인할 테이블 사이에 칼럼의 값이 직접적으로 일치하지 않을 시 사용하는 조인으로,
'='을 제외한 연산자를 사용한다.
ex) 급여 등급 테이블에서 정보를 얻어와서 각 사원의 급여 등급 지정하기
먼저 급여 등급을 5개로 나누어 놓은 테이블인 SALGRADE 테이블을 살핀다.
select *
from salgrade;
급여가 700~1200 사이면 1등급
급여가 1201~1400 사이면 2등급
급여가 1401~2000 사이면 3등급
급여가 2001~300 사이면 4등급
급여가 3001~999 사이면 5등급
급여 등급을 지정하기 위해 emp 테이블과 salgrade 테이블을 조인한다.
select e.ename, e.sal, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;
(* between and 연산자: salgrade 테이블의 losal과 hisal 사이에 있는 emp 테이블의 sal을 출력)
급여가 800인 SMITH는 1등급(급여가 700~1200 사이)
급여가 1250인 WARD는 2등급(급여가 1201~1400 사이)
등을 확인 가능!
위 where 절은 and 연산자를 사용하여 다음과 같이 기술 할 수도 있다.
where e.sal >= s.losal and e.sal <= s.hisal
'Dev > Database' 카테고리의 다른 글
JDBC 프로그래밍 (0) | 2022.09.06 |
---|---|
데이터베이스 프로그래밍 (0) | 2022.09.05 |
SQL - JOIN 조인 2 (Outer Join, Self Join) (0) | 2022.08.31 |
SQL - 그룹 함수 2 (group by문과 having 조건) (0) | 2022.08.30 |
SQL - 그룹 함수 1 (0) | 2022.08.30 |
댓글