본문 바로가기
✨ DBMS/Oracle

[Oracle / SQL] 조인(JOIN)

by 환풍 2023. 2. 27.
728x90
반응형
여러가지 쿼리를 동시에 조회하는 것이다.

 

 

 

1
SELECT * FROM EMP;
cs

 

 

1
SELECT * FROM DEPT;
cs

 


테이블에 별칭을 붙이는 방법

1
2
SELECT EMPNO, ENAME, SAL
FROM EMP;
cs


 

1
2
SELECT EMP.EMPNO, EMP.ENAME, EMP.SAL
FROM EMP;
cs


 

1
2
SELECT E.EMPNO, E.ENAME, E.SAL
FROM EMP E;
cs

위 세개는 모두 같은 값을 조회한다. 테이블에서는 별칭을 붙일때 AS를 붙이면 에러가 뜬다.

 


 

1
2
3
4
5
6
SELECT EMPNO
    , ENAME
    , DEPTNO
    , DNAME
    , LOC
FROM EMP, DEPT;
cs

DEPTNO는 EMP와 DEPT 둘다 들어가있는데, 확실히 정해주지 않아서 오류가 뜬 것이다.

어떤 테이블에 있는 데이터를 조회할지 무조건 명확하게 명칭해주어야 한다.

예를들어 EMP.DEPTNO 라던가 DEPT.DEPTNO라고 해야한다.

 

 

1
2
3
4
5
6
SELECT EMPNO
    , ENAME
    , DEPT.DEPTNO
    , DNAME
    , LOC
FROM EMP, DEPT;
cs

엄청 많이 나온다.. ORDER BY를 해보면 원래 사원은 14명인데, 4개씩 나온다.

이와 같이 EMPNOENAME이 중복된 값이 4개씩 나온다.

테이블을 두개 조회하면 EMP는 1개지만 DEPT는 4개라서 1*4해서 4개가 나오게 된 것이다.

그래서 정확한 데이터를 찾아내야하는 조건이 필요하다.

 

두 테이블이 공통적으로 지니고 있는 컬럼 값을

같은 것만 조회하는 것으로 조건을 주면 올바른 조인이 완성된다.

 

1
2
3
4
5
6
7
8
SELECT EMPNO
    , ENAME
    , DEPT.DEPTNO
    , DNAME
    , LOC
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY ENAME;
cs


DEPT에서 DEPTNO를 기준으로 기본키(PK)이다.

그렇다면 EMP에서는 DEPTNO는 외래키(FK)가 된다.

 

따라서 이렇게 WHERE절을 적절하게 사용하여 조회하면 정확한 값이 나온다.

 

1
2
3
4
5
6
7
8
SELECT EMPNO
    , ENAME
    , DEPT.DEPTNO
    , DNAME
    , LOC
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY EMPNO;
cs

 

예제1)

1
2
3
4
5
-- 이문세 사원이 속한 부서의 부서명을 조회
SELECT DNAME
FROM DEPT D, EMP E
WHERE ENAME = '이문세'
AND D.DEPTNO = E.DEPTNO;
cs

ENAME은 DEPT테이블에 없고 EMP테이블에 있다. 

 

예제2)

1
2
3
4
5
6
--20번 부서를 제외한 사원들의 사번, 부서번호, 
-- 부서명, 지역을 조회 (테이블에 별칭도 써보자)
SELECT EMPNO, E.DEPTNO, DNAME, LOC
FROM EMP E, DEPT D
WHERE D.DEPTNO = E.DEPTNO
AND D.DEPTNO != 20;
cs

DEPTNO는 두 테이블에 공통적으로 있기때문에 하나를 지정해준다.

728x90
반응형

댓글