공통점 : 서로 다른 두개 이상의 테이블을 합쳐줌
차이점 : 집합연산자를 사용한 결과는 두개 이상의 select 문을 사용하므로 결과값을 세로로 연결해주고
조인을 사용한 결과는 하나의 select 문을 사용하므로 결과값을 가로로 연결해줌.
ex)
1) 조건이 없이 출력할때
select *
from emp,dept
order by empno;
===> 조인의 조건이 명시 되지 않으면 , 모든 행을 조합하여 출력됨.
2) 조건을 명시 해줬을 때
select e.ename , d.loc, e.deptno //한쪽에만 있는 컬럼은 별칭을 안적어줘도 무관 하지만
from emp e, dept d 양쪽테이블에 모두 존재하는 컬럼은 하나를 골라서 꼭 써줘야 함.
where e.deptno=d.deptno (deptno의 값이 같은것만)
order by empno;
===> deptno 열의 값이 같은 14개의행만 출력됨.
: 같은 컬럼의 데이터를 소유하는 서로 다른 테이블 끼리 비교 할때
ex)
select e.empno,e.ename, e.sal,d.deptno, d.dname,d.loc
from emp e, dept d
where e.deptno= d.deptno and e.sal<=2500 and e.empno<=9999
order by e.empno;
: 테이블 사이에 겹치는 컬럼과 데이터가 없지만 비교할 때
: 항상 각 테이블의 컬럼명을 확인해야함.
ex) 사원의 sal의 등급이 알고 싶을때
select*
from emp e, salgrade s
where e.sal between s.losal and s.hisal;
: 같은 테이블의 내용을비교할때
ex)
1) 테이블을 복사해서 찾기
create table copy_emp as select * from emp; // 같은 테이블을 복사.
select e.empno, e.ename, e.empno as mgr_empno, c.ename as mgr_name
from emp e, copy_emp c
where e.mgr= c.empno
order by e.empno;
2) 테이블을 두개라고 생각하고 찾기 ( ≒ 객체 생성)
select e1.empno, e1.ename, e2.empno as mgr_empno, e2.ename as mgr_name
from emp e1, emp e2
where e1.mgr= e2.empno
order by e1.empno;
!!!!! 셀프조인과 외부조인 합치기
: 셀프 조인의 결과는 null값을 제외하고 나오기 때문에 null 값을 포함한 모든 데이터를 출력하고 싶을때 사용.
ex)
select e1.empno,e1.ename,e1.mgr,
e2.empno as mgr_empno, e2.ename as mgr_name
from emp e1,emp e2
where e1.mgr = e2.empno(+) //상사가 없는 사원들의 정보까지 출력
order by e1.empno; A∩B+(A-B)
ex)
select e1.empno,e1.ename,e1.mgr,
e2.empno as mgr_empno, e2.ename as mgr_name
from emp e1,emp e2
where e1.mgr(+) = e2.empno //부하직원이 없는 사원들의 정보까지 출력
order by e1.empno; A∩B+(B-A)