서브쿼리 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
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(Extract, transform, load)이란, 다양한 소스 시스템(source system)으로부터 필요한 데이터를 추출(extract)하여 변환(transform) 작업을 거쳐 타겟 시스템(target system)으로 전송 및 로딩(loading)하는 모든 과정을 말한다. 방대한 규모의 운영 데이터를 얻기 위해서는 BI(business intelligence) 인프라가 OLTP(online transaction processing) 시스템에 부담을 주지 않으면서 분석을 위해 데이터를 수집, 이동, 변환 및 저장할 수 있어야 한다. 서로 다른 운영 시스템, 데이터베이스, 하드웨어 플랫폼 및 네트워크 환경을 고려하면 복잡하다. 그러므로 추출 루틴 개발, 비즈니스 로직 디버깅 및 데이터를 안전하게 로딩하여 사용자 요구사항을 만족시켜야 하는 IT부서에게는 상당한 부담이 된다. 또한 데이터 관리의 필요성도 증대되고 있다. 소스 시스템에서 획득되는 원본 데이터는 서버로 전송하도록 메타데이터를 생성하고, 서버로 전송된 소스 데이터와 타겟 테이블 간에 매핑을 생성한다. 그리고 세션을 생성한 후 실행하고, 모니터링한다.
* 서브쿼리가 단일 행 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용될 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 한다.
+
데이터 모델링, 매핑(mapping), bi(business intelligence) 제품 사이에 데이터 웨어하우스 및 데이터마트와 관련된 모든 메타데이터가 통합관리되어야 한다.
:만약 결과가 2건 이상인 경우 오류가 발생한다.
 
==== 예시 ====
 
만약 T2 테이블의 C2 = 3 인 조건을 만족하는 C1 의 값이 2건 이상인 경우 오류가 발생한다.<br>
 
  SELECT C1, C2, C3
 
  FROM T1
 
  WHERE C1 = (SELECT C1
 
              FROM T2
 
              WHERE C2 &#61; '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 &#61; '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 &#61; '3')
 
  ORDER BY C1, C2, C3;
 
 
=== 다중 컬럼 서브쿼리 ===
 
* 서브쿼리 결과로 여러 개의 컬럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것을 의미한다.
 
==== 예시 ====
 
  SELECT C1, C2, C3
 
  FROM T1
 
  WHERE (C1, C2) IN (SELECT C1, C2
 
                    FROM T2
 
                    WHERE C2 &#61; '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 &#61; T1.C2)    -- 메인 쿼리의 컬럼을 서브쿼리에 사용
 
  ORDER BY T1.C1, T1.C2, T1.C3;
 
  
 
{{각주}}
 
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
* 꽁담,〈[https://mozi.tistory.com/233 서브쿼리란? 서브쿼리 사용해보기]〉, 2018-11-13
+
*  
 
== 같이 보기 ==
 
== 같이 보기 ==
* [[쿼리]]
+
*  
* [[SQL]]
 
  
{{데이터|검토 필요}}
+
{{프로그래밍|검토 필요}}

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)