DATABASE/SQL, PL-SQL
SQL 조인(JOIN)
devstep88
2020. 11. 14. 21:36
--Join(조인)
-- 테이블을 2개 이상 합쳐서 작업
-- 각 테이블 마다 레코드(행) 수가 다르다.
select * from emp;
select * from dept;
-- 사원명, 부서명
select ename, dname
from emp, dept
where emp.deptno = dept.deptno -- join 조건(Equi Join)
order by emp.deptno;
--테이블이 조인 되면 조인조건이 필요함 -> 조인한 테이블 갯수 = 1개
--컬럼 모호성
--사원명, 부서명, 부서번호
select ename, dname, deptno -- deptno 컬럼이 emp에도 존재하고, dept에도 존재함(모호)
from emp, dept
where emp.deptno = dept.deptno;
select ename, dname, emp.deptno -- 어느 테이블의 deptno인지 명확히 지정
from emp, dept
where emp.deptno = dept.deptno;
select emp.ename, dept.dname, emp.deptno
from emp, dept
where emp.deptno = dept.deptno;
-- 테이블에 별칭 부여
select e.ename, d.dname, e.deptno
from emp e, dept d
where e.deptno = d.deptno;
-- Non-Equi Join (=을 쓰지 않음) : 범위
-- 급여등급(salgrade)
select * from salgrade;
-- 사원명, 급여, 급여등급
select e.ename, e.sal, s.grade, s.losal, s.hisal
from emp e, salgrade s
where e.sal >= s.losal and e.sal <= s.hisal;
select e.ename, e.sal, s.grade, s.losal, s.hisal
from emp e, salgrade s
where e.sal between s.losal and s.hisal;
-- 테이블 3개 조인 (조인 조건 2개)
-- 사원명(emp), 부서명(dept), 급여(emp) 급여등급(salgrade)
select e.ename, d.dname, e.sal, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal;
select *
from tbl_board b, tbl_user u
where b.user_id = u.user_id;
-- Self Join (자가 조인)
-- 같은 테이블끼리 조인
-- 별칭이 반드시 필요
select *
from emp e, emp e2;
-- 해당 부서(부서 번호)의 부서명 -> emp(deptno) -> dept(deptno) - > dept(dname)
-- 상사의 이름 -> emp(mgr)
select * from emp;
select e1.empno 본인사번, e1.ename 본인이름, e2.empno 상사사번, e2.ename 상사이름
from emp e1, emp e2
where e1.mgr = e2.empno;