본문 바로가기
코딩연습/오라클

[SQL] Oracle조인,ANSI조인(cross,equi,non-equi,outer,self)

by 호아니 2020. 9. 10.
-- 오라클 조인
--크로스조인,카티션 프로덕트
select last_name,department_name 
from employees,departments
order by last_name;

-- equi join
select e.last_name, e.department_id,d.department_id,d.department_name
from employees e,departments d
where e.department_id=d.department_id
order by last_name;

--non equi join
select e.last_name, e.salary,j.grade_level
from employees e, job_grades j
where j.lowest_sal<= e.salary and e.salary <= j.highest_sal;
--where e.salary between j.lowest_sal and j.highest_sal;

--outer join
--left outer join
select e.last_name, e.department_id,d.department_id,d.department_name
from employees e,departments d
where e.department_id=d.department_id(+)
order by last_name;

--right outer join
select e.last_name, e.department_id,d.department_id,d.department_name
from employees e,departments d
where e.department_id(+)=d.department_id(+)
order by last_name;

--self join
select e.last_name, m.last_name
from employees e, employees m
where e.manager_id = m.employee_id(+);

--ANSI Join
--,대신 join where대신 on
--크로스조인,카티션 프로덕트
select last_name,department_name 
from employees cross join departments
order by last_name;

--equi join
select e.last_name, e.department_id,d.department_id,d.department_name
from employees e inner join departments d
on e.department_id=d.department_id
order by last_name;

--non equi join
select e.last_name, e.salary,j.grade_level
from employees e inner join job_grades j
on j.lowest_sal<= e.salary and e.salary <= j.highest_sal;
--where e.salary between j.lowest_sal and j.highest_sal;

--outer join
--left outer join (outer 생략가능)
select e.last_name, e.department_id,d.department_id,d.department_name
from employees e left join departments d
on e.department_id=d.department_id
order by last_name;

--right outer join (outer 생략가능)
select e.last_name, e.department_id,d.department_id,d.department_name
from employees e right outer join departments d
on e.department_id=d.department_id
order by last_name;

--full outer join (outer 생략가능)
select e.last_name, e.department_id,d.department_id,d.department_name
from employees e full join departments d
on e.department_id=d.department_id
order by last_name;

--self join
select e.last_name, m.last_name
from employees e left join employees m
on e.manager_id = m.employee_id;
 
--natural join
--scott계정--
-------------
conn scott/TIGER;

select ename,dname
from emp natural join dept;