**ANSI join 

 ANSI ( 미국 표준 협회 ) 에서 재정한 Join 문법 

 => 관계형 데이터 베이스 종류에 따라 지원하는 경우도 있고 그렇지 않은 경우도 있습니다.

 

1. cross join - cartesian product - 2개 테이블의 모든 조합이 전부 조회되는 것 


=> from 절에 

테이블 이름 cross join 테이블 이름 

--emp 테이블과 dept  테이블의 cross join 

-- 양쪽 테이블의 행의 개수를 곱한 결과인 56개의 행이 출력되고 

-- 양쪽 테이블의 컬럼의 개수를 더한 결과인 11개의 커럶이 출력됩니다. 

select * 

from emp cross join detp


2. inner join 

=> from 절에 

2개 테이블을 나열 할 때 , 대신에 inner join 이라는 예약어 추가하고 on절에 join조건을 추가합니다. 


select 

from 테이블 이름  inner join  테이블이름2

on 테이블이름1.컬럼이름 = 테이블이름2.컬럼이름 



-- ex)emp 테이블에 ename에 L이 2자 이상 포함 되어 있는 사원의 ename과 dept 테이블의 dname을 조회 

=> 2개 테이블의 공통 컬럼 :deptno


3.using 과 natural join 

=> join 하고자 하는 컬럼의 이름이 동일 할 때 사용할 수 있는 Join 

=> 컬럼의 이름이 동일할 때는 on 대신에 using이라고 적고 공통 컬럼이름을 기재하면 됩니다. 

=> 컬럼의 이름이 같을 때는 inner join이라는 예약어 대신에 natural join 이라고 적고 join조건을 생략해도 됩니다.



--

select ename, dname

from emp inner join dept 

using (deptno)

where ename like '%L%L%';


--

select ename, dname

from emp natural dept 

where ename like '%L%L%';




4. ANSI  Outer Join 

+ 기호 대신에 from 절에  [left |right | full] outer join 이라고 기재하면 outer join이 됩니다. 

=> 한쪽에 테이블에 있는 데이터도 join에 참여하는게 ANSI outer join입니다. 


ex) emp 테이블의 데이터와 dept 테이블의 데이터를 full outer join을 수행 

join 조건은 deptno 컬럼 


select * 

from emp full outer join dept 

on emp. deptno = dept.deptno



**set 연산 

=> 집합연산 

=> 2개의 select 구문결과를 가지고 만들어내는 연산으로 2개 테이블의 결과 컬럼의 개수가 동일하고 자료형이 같은 경우에만 연산이 가능 


1.UNION -> 합집합

2.UNION ALL -> 합집합

3.INTERSECT -> 교집합

4.MINUS ->차집합 


-- EMP 테이블에서 모든 사원에 대한 이름(ename), 

--부서번호(deptno) DEPT 테이블에서 부서명(dname)을 출력하는 SELECT 문장을 작성



select ename, emp.deptno, dname

from emp,dept 

where emp.deptno= dept.deptno;



-- DEPT 테이블의 LOC가 NEW YORK에서 근무하고 있는 사원에 대하여 EMP 

--테이블의 이름(ename), 업무(job), 급여(sal), DEPT 테이블의 부서명(dname)을 출력하는 SELECT 문장을 작성


select  ename, job, sal, dname

from emp,dept 

where emp.deptno = dept.deptno and loc= 'NEW YORK';



--EMP 테이블에서 보너스(comm)가 null 이 아닌 사원에 대하여 이름(ename),

--DEPT 테이블의 부서명(dname), 위치(loc)를 출력하는 SELECT 문장을 작성


select ename, dame,loc

from emp, dept 

where emp.deptno = dept.deptno and comm is not null ;



-- EMP 테이블에서 이름(ename) 중 L자가 있는 사원에 대하여 이름(ename), 업무(job),

-- DEPT 테이블의 부서명(dname), 위치(loc)를 출력하는 SELECT 문장을 작성


select ename, job,dname, loc

from emp, dept 

where emp.deptno = dept.deptno and ename like '%L%';




-- EMP 테이블에서 그들의 관리자(mgr) 보다 먼저 입사한 사원에 대하여 이름(ename), 

--입사일(hiredate), 관리자(mgr) 이름,  관리자(mgr) 입사일을 출력하는 SELECT 문장을 작성하여라.


select e1.ename 이름, e1.hiredate 입사일, e2.ename 관리자, e2.hiredate "관리자 입사일" 

from emp e1, emp e2 

where e1.mgr = e2.empno and e1.hiredate <e2.hiredate;

'데이터베이스 > 데이터베이스' 카테고리의 다른 글

오라클 정리  (0) 2018.01.23
조인  (0) 2018.01.23

+ Recent posts