<상사가 king인 사원들의 이름과 직급 출력>
Self Join : 자기 자신과 조인하는 경우에 사용 (같은 컬럼명이 아니어도 사용가능)
<사원들의 부서명 출력>
Outer Join : 2개 이상의 테이블을 조인 할 때 어느 한쪽 테이블에는 해당하는 데이터가 존재하지 않는데
다른쪽의 테이블에는 존재하는 경우 그 데이터는 출력되지 않는 문제를 해결하기 위해 사용
모든 데이터를 다 가지고 올때 full scan을 하기 때문에 DB에 부담이 될 수 있음
사용법 : 없는 쪽에 (+)표시
SUB Query
- 서브쿼리는 하나의 select문장의 절 안에 포함된 또 하나의 select 문
- 서브쿼리는 비교 연산자의 오른쪽에 기술하며 괄호안에 삽입
- 메인 쿼리가 실행되기 전에 1번만 실행
<'JONES'의 부서명 출력>
방법1)
방법2_Join)
방법3_SUB Query)
1. 단일행 SUB Query
- 서브쿼리를 수행한 결과가 1건만 나오고 이 결과를 메인쿼리로 전달해 메인쿼리 수행
- 수행결과가 오직 하나의 row로만 반환하는 SUB Query를 갖는것 / Where절에 비교연산자 사용가능
<자산의 직속 상사가 'KING'인 사원의 이름과, 급여 출력>
방법1_SELF JOIN)
방법2_SUB Query)
2. 다중행 SUB Query
- 반환되는 결과가 1개 이상의 행일때 사용
- Multiple Row Operator(다중행 연산자)와 함께 필수 사용
종류 | 의미 |
IN | 메인 쿼리의 비교 조건이 서브쿼리의 결과 중에서 1개이상 일치하면 참 |
ANY, SOME | 메인 쿼리의 비교 조건이 서브쿼리의 검색 결과와 1개 이상 일치하면 참 |
ALL | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참 |
EXISTS | 메인 쿼리의 비교조건이 서브쿼리의 결과 중에서 1개라도 일치하면 참 검색결과가 1개이상 존재하면 참 |
<IN연산자를 사용해 부서 별로 가장 급여를 많이 받는 사원의 이름, 급여, 부서 번호 출력>
<30번 소속 사원들 중에서 급여를 가장 많이 받는 사원보다
더 많이 받는 사원의 이름, 급여 출력>
방법1_단일행 sub query)
방법2_다중행 sub query)
> ALL : 최댓값 보다 큰것 출력
< ALL : 최솟값보다 작은것 출력
<30번 소속 사워들 중에 급여를 가장 적게 받는 사원보다
더 많은 급여를 받는 사원의 이름, 급여 출력>
방법1_단일행 sub query)
방법2_다중행 sub query)
> ANY : 최솟값보다 큰것 출력
< ANY : 최대값보다 작은것 출력
<예제>
<self join/JONES와 동일한 근무지에서 근무하는 사원의 이름, 월급, 근무지를 출력/단, JONES는 제외할것>
<self join/'SMITH' 사원의 매니저 이름 출력>
<self join/emp테이블에서 사원의 이름과 그 매니저 이름 출력>
mgr컬럼이 null값인 컬럼은 제외하고 출력됨
outer join을 사용해서 null값도 출력가능
<사원이름에 'T'가 들어가는 사원들의 이름과 부서명 출력>
방법1_ORACLE JOIN)
방법2_ANSI JOIN)
<사원이름과 직급, 급여, 급여등급 출력>
방법1_ Non Equi Join)
방법2_비교연산자)
방법3_ANSI JOIN)
<'DALLAS'에서 근무하는 사원들의 이름, 직급, 부서번호, 부서이름 출력>
방법1_Equi Join)
방법2_ANSI JOIN)
<self join/'SMITH'의 이름, 부서번호와 같은 부서에 있는 사원 이름 출력
/ 해당사원과 같은 부서에 있는 사원을 '동료'라고 표시할것>
- SUB Query -
<'CLARK'과 같은 부서에서 근무하는 사원의 이름, 부서번호 출력
/단, 'CLARK'은 제외>
<'WARD'와 동일한 JOB을 가진 사원의 이름과 월급을 출력>
<평균 급여보다 많이 받는 사원의 이름, 급여, 부서번호를 출력하되, 급여가 많은 순서로 출력>
<부서번호가 10번인 사원중 최대급여를 받는 사원의 이름, 월급, 직급,부서번호 출력>
<'DALLAS'에서 근무하는 사원의 이름, 부서번호, 근무지 출력>
<'CLARK'보다 먼저 입사한 사원의 이름, 월급, 입사일 출력>
방법1_JOIN)
방법2_SUB Query)
<job이 'MANAGER'인 사원이 속한 부서의 부서번호, 부서명, 지역 출력>
<급여를 3000이상 받는 사원이 속한 부서의 모든 사원을 출력>
distinct를 사용하지 않아도 동일한 결과가 출력되지만 사용하면 효율이 높아짐
'DB > ORACLE' 카테고리의 다른 글
220831_ORACLE_국비_RENAME/DML/INSERT/UPDATE (0) | 2022.08.31 |
---|---|
220830_ORACLE_국비_ROWNUM/DDL/CREATE/ALTER/DROP (0) | 2022.08.30 |
220826_ORACLE_국비_그룹함수/GROUP BY/HAVING/JOIN (0) | 2022.08.26 |
220825_ORACLE_국비_날짜함수/형 변환 함수/NVL/DECODE/CASE (0) | 2022.08.25 |
220824_ORACLE_국비_DAUL TABLE/ 숫자 함수/ 문자 함수/ 날짜 함수 (0) | 2022.08.24 |