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 문에서도 사용할 수 있다.
서브 쿼리의 구분
메인 쿼리와의 연관성에 따라
연관성없는서브쿼리
연관성있는서브쿼리 형태에 따라
인라인 뷰(FROM 절)
일반 서브 쿼리(SELECT 절)
중첩 쿼리(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 |