|
|
1번째 줄: |
1번째 줄: |
− | '''서브쿼리'''(sub query)는 하나의 [[SQL]] 문에 포함되어 있는 또 다른 SQL 문이다.<ref name='sub_query_main'>꽁담,〈[https://mozi.tistory.com/233 서브쿼리란? 서브쿼리 사용해보기]〉, 2018-11-13</ref> | + | '''ETL'''(Extract, Transform, Load, ETL)은 컴퓨팅에서 데이터베이스 이용의 한 과정으로, 추출, 변환, 적재의 약어이다. |
| | | |
− | == 분류 ==
| |
− | === 단일 행 서브쿼리 ===
| |
− | * 서브쿼리가 단일 행 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용될 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 한다.
| |
− | :만약 결과가 2건 이상인 경우 오류가 발생한다.
| |
− | ==== 예시 ====
| |
− | 만약 T2 테이블의 C2 = 3 인 조건을 만족하는 C1 의 값이 2건 이상인 경우 오류가 발생한다.<br>
| |
− | SELECT C1, C2, C3
| |
− | FROM T1
| |
− | WHERE C1 = (SELECT C1
| |
− | FROM T2
| |
− | WHERE C2 = '3')
| |
− | ORDER BY C1, C2, C3;
| |
− |
| |
− | 그룹 함수를 사용하는 경우 결과값이 1건이기 때문에 단일 행 서브쿼리로써 사용 가능하다.<ref name='sub_query_main'></ref>
| |
− |
| |
− | SELECT C1, C2, C3
| |
− | FROM T1
| |
− | WHERE C1 <= (SELECT AVG(C1)
| |
− | FROM T2
| |
− | WHERE C2 = '3')
| |
− | ORDER BY C1, C2, C3;
| |
− |
| |
− | === 다중 행 서브쿼리 ===
| |
− | * 서브쿼리의 결과가 2건 이상 반환될 수 있다면 반드시 다중 행 비교 연산자(IN, ALL, ANY, SOME)와 함께 사용해야 한다.<ref name='sub_query_main'></ref>
| |
− | :{|class=wikitable width=700 style="background-color:white"
| |
− | |+
| |
− | !align=center style="background-color:ashgray"|다중 행 연산자
| |
− | !align=center style="background-color:ashgray"|설명
| |
− | |-
| |
− | |align=center|IN
| |
− | |align=center|서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미한다.
| |
− | |-
| |
− | |align=center|ALL
| |
− | |align=center|서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건을 의미한다.
| |
− | |-
| |
− | |align=center|ANY
| |
− | |align=center|서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미한다.
| |
− | |-
| |
− | |align=center|EXISTS
| |
− | |align=center|서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건을 의미한다.
| |
− | |-
| |
− | |}
| |
− | ==== 예시 ====
| |
− | * 만약 T2 테이블의 C2 = 3 인 조건을 만족하는 C1 의 값이 2건 이상인 경우 = 이 아닌 IN 을 사용해야 한다.
| |
− | SELECT C1, C2, C3
| |
− | FROM T1
| |
− | WHERE C1 IN (SELECT C1
| |
− | FROM T2
| |
− | WHERE C2 = '3')
| |
− | ORDER BY C1, C2, C3;
| |
− |
| |
− | === 다중 컬럼 서브쿼리 ===
| |
− | * 서브쿼리 결과로 여러 개의 컬럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것을 의미한다.
| |
− | ==== 예시 ====
| |
− | SELECT C1, C2, C3
| |
− | FROM T1
| |
− | WHERE (C1, C2) IN (SELECT C1, C2
| |
− | FROM T2
| |
− | WHERE C2 = '3')
| |
− | ORDER BY C1, C2, C3;
| |
− | === 연관 서브쿼리 ===
| |
− | * 서브쿼리 내에 메인쿼리 컬럼이 사용된 서브쿼리이다.<ref name='sub_query_main'></ref>
| |
− | ==== 예시 ====
| |
− | SELECT T1.C1, T1.C2, T1.C3
| |
− | FROM T1 T1
| |
− | WHERE (T1.C1, T1.C2) IN (SELECT T2.C1, T2.C2
| |
− | FROM T2 T2
| |
− | WHERE T2.C2 = T1.C2) -- 메인 쿼리의 컬럼을 서브쿼리에 사용
| |
− | ORDER BY T1.C1, T1.C2, T1.C3;
| |
| | | |
| {{각주}} | | {{각주}} |
| | | |
| == 참고자료 == | | == 참고자료 == |
− | * 꽁담,〈[https://mozi.tistory.com/233 서브쿼리란? 서브쿼리 사용해보기]〉, 2018-11-13 | + | * |
| == 같이 보기 == | | == 같이 보기 == |
− | * [[쿼리]] | + | * |
− | * [[SQL]]
| |
| | | |
| {{프로그래밍|검토 필요}} | | {{프로그래밍|검토 필요}} |