sql - join2

2020. 9. 23. 09:54학원공부/SQL

FULL OUTER 조인


 A테이블이가지고있는데이터,B테이블이가지고있는데이터모두

조회됨.
 두 테이블의 합집합이라 생각할 수 있다.

 

SELECT a.emp_id, b.emp_id FROM tab_a. a
FULL OUTER JOIN tab_b b

ON (a.emp_id = b.emp_id);

 

 

서브 쿼리의 개념

 

 서브 쿼리(Sub-Query)

  •   SQL 문장 안에서 보조로 사용되는 또 다른 SELECT문을 의미한다.

  •   최종 결과를 출력하는 쿼리를 메인 쿼리라고 한다.

  •   서브 쿼리는 SELECT, FROM, WHERE절 모두에서 사용 가능하며 INSERT, UPDATE, MERGE, DELETE 문에서도 사용할 수 있다.

     서브 쿼리의 구분

         메인 쿼리와의 연관성에 따라 

              연관성없는서브쿼리
              연관성있는서브쿼리

     형태에 따라
         일반 서브 쿼리(SELECT )

              인라인 뷰(FROM )
              중첩 쿼리(WHERE )

 

 

연관성없는서브쿼리

 메인 테이블과 조인조건이 걸리지 않는 서브쿼리를 의미함. 

 메인쿼리와 서브쿼리 모두 사원테이블을 조회하고 있으나

 서브쿼리에서평균급여를구한뒤메인 쿼리에서 평균값보다 큰 사원을 조회함.

 

 

 메인 테이블은 사원 테이블이며, 서브 쿼리는 부서 테이블로 메인 테이블과 관련성 없음

 

 

 IN앞에있는컬럼의갯수와유형이서브쿼리에서반환하는컬럼의개수, 유형이 모두 같아야 함.

 

 

 

 

 

연관성없는서브쿼리

 

 UPDATE, DELETE문에서도 사용 가능

 테스트 목적 이므로 데이터를 원 상태로 되돌림.

 

 

 

연관성있는서브쿼리

 메인 테이블과 조인 조건이 걸린 서브 쿼리를 의미한다.


 < 1> WHERE절의 서브 쿼리에서 메인 쿼리의 테이블명을 사용한 조인

 부서 테이블에 있는 부서id job_history(발령 내역)의 부서id가 같은 데이터를 발령 내역(job_history)을 모두 찾아 부서ID와 부서명을 조회한다.

 EXISTS 연산자 내의 서브쿼리에 조인조건이 포함됨.
 결국, job_history 테이블에 있는 부서ID에 대해서만 조회됨.

 

 

 <2>여러개의서브쿼리를사용하고,각서브쿼리에조인이존재

 job_history(발령 내역) 테이블에 있는 모든 사원의 발령 내역을 조회하면서 job_history 테이블에 갖고 있지 않은 사원명과 부서명을 각각 사원 테이블(employees)과 부서 테이블(departments)에서 가져온다.

<3>서브쿼리내에조인조건과또다른서브쿼리사용
 전 직원의 평균 급여보다 높은 급여를 받는 직원들의 부서ID와 부서명을 조회

 

 

 UPDATE, MERGE, DELETE 문에서 사용 

 <>

상위 부서가 기획부(부서id: 90)에 속하는 사원들의 급여를 부서 평균 급여로 갱신

 

 

 

 UPDATE, MERGE, DELETE 문에서 사용 

 <> 앞의 예제를 MERGE문으로 변경

 

 

인라인 뷰

 

 FROM 절에서 사용하는 서브 쿼리를 인라인 뷰(Inline View)라고 한다.

 FROM절에 사용하는 서브쿼리를 뷰로 가정한다는 의미임.

 

 <1>

 기획부(90) 아래에 속하는 부서에 있는 사원들의 평균 급여보다 많이 받는 사원의 사원ID, 사원명, 부서ID, 부서명을 조회

파란 글씨의 쿼리가 하나의 테이블이 된다.

 <2>
 2000년 이탈리아 평균 매출액(년평균) 보다 큰 월 평균 매출액을 조회

 

'학원공부 > SQL' 카테고리의 다른 글

SQL - PL/SQL 2  (0) 2020.09.25
SQL - PL /SQL  (0) 2020.09.24
SQL - join3  (0) 2020.09.23
SQL - join  (0) 2020.09.22
SQL - 함수  (0) 2020.09.17