SQL

(SQL 문법) JOIN

choisanghyun 2022. 1. 5. 19:41
728x90

JOIN

연관된 여러 테이블을 연결하기 위함

where 조건으로 테이블을 서로 연결해줘야함

-------- 여러 테이블 JOIN(조인)
SELECT *
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
order by emp.deptno asc, dept.deptno asc;
    -- 14   * 4  = 56
     
-- 양쪽 테이블에 겹치는 이름의 컬럼을 사용할 경우 반드시!!!    테이블명.컬럼  명확히 기재
-- 00918. 00000 -  "column ambiguously defined"     
--SELECT DNAME, DEPTNO, ENAME   -- 에러가 난다
SELECT DNAME, DEPT.DEPTNO, ENAME   
FROM DEPT, EMP
WHERE DEPT.DEPTNO = EMP.DEPTNO AND
       DEPT.DEPTNO = 10
;

-- ANSI 
SELECT DNAME, DEPT.DEPTNO, ENAME   
FROM DEPT JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO
WHERE DEPT.DEPTNO = 10;



-- 사원기준 10번 부서 사람들의 사원번호 사원명  매니저번호,            매니저명 출력
SELECT e1.EMPNO, e1.ENAME, e1.MGR,  e2.ename, e1.deptno
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO 
     AND e1.deptno = 10
;
-- ANSI
SELECT E1.EMPNO, E1.ENAME, E1.MGR,  E2.ENAME, E1.DEPTNO
FROM EMP E1 JOIN EMP E2  ON  E1.MGR = E2.EMPNO 
WHERE e1.deptno = 10
;

OUTER JOIN

where 조건으로 연결되지 않은 값을 Null로 출력 

ex) emp테이블과 dept 테이블을 연결했는데 dept테이블에 deptno 40값을 가진 데이터가 emp에 없을 경우 

 -- outer join
SELECT *
FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO 
;
   --10 20 30 null   10 20 30 40

SELECT *    --distinct 했을때 더 많은 쪽이 기준
FROM EMP E RIGHT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
;

SELECT *    --distinct 했을때 더 많은 쪽이 기준
FROM DEPT D LEFT OUTER JOIN EMP E ON E.DEPTNO = D.DEPTNO
;


   --10 20 30 null   10 20 30 40
SELECT DISTINCT DEPTNO FROM EMP;
select distinct deptno from dept;

SELF JOIN

하나의 테이블을 서로 연결할때 사용

ex) emp 테이블에 empno와 mgr(empno로 표기)을 연결

select e1.empno, e1.ename, e1.mgr, e2.ename as mname
from emp e1, emp e2
where e1.mgr=e2.empno