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개씩 나온다.
이와 같이 EMPNO와 ENAME이 중복된 값이 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
반응형
'✨ DBMS > Oracle' 카테고리의 다른 글
[Oracle / SQL] 조인(JOIN) - 서브쿼리 (0) | 2023.03.03 |
---|---|
[SQL] 제약조건 (CONSTRAINT)가 뭘까? 어떻게 사용할까? (0) | 2023.03.02 |
[Oracle / SQL] 단일행 함수(Single)와 다중행 함수(Mutible) (1) | 2023.02.26 |
[Oracle / SQL] 많이 쓰는 함수 NVL , NVL2 , DECODE , CASE (0) | 2023.02.26 |
[Oracle / SQL] SQL INSERT, UPDATE, DELETE (0) | 2023.02.23 |
댓글