(SQL 문법) JOIN

    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

     

    'SQL' 카테고리의 다른 글

    (SQL 문법) 집합 연산  (0) 2022.01.05
    (SQL 문법) 서브 쿼리 (단일행, 다중행)  (0) 2022.01.05
    (SQL 문법) SQL 함수 (그룹 함수)  (0) 2022.01.05
    (SQL 문법) SQL 함수 (단일행 함수)  (0) 2022.01.05
    (SQL 문법) SELECT문 기본  (0) 2022.01.05

    댓글