**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;