(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

댓글