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 |
댓글