"서브쿼리"의 두 판 사이의 차이
(→예제) |
잔글 (→같이 보기) |
||
(다른 사용자 한 명의 중간 판 14개는 보이지 않습니다) | |||
5번째 줄: | 5번째 줄: | ||
* 서브쿼리가 단일 행 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용될 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 한다. | * 서브쿼리가 단일 행 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용될 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 한다. | ||
:만약 결과가 2건 이상인 경우 오류가 발생한다. | :만약 결과가 2건 이상인 경우 오류가 발생한다. | ||
− | ==== | + | ==== 예시 ==== |
만약 T2 테이블의 C2 = 3 인 조건을 만족하는 C1 의 값이 2건 이상인 경우 오류가 발생한다.<br> | 만약 T2 테이블의 C2 = 3 인 조건을 만족하는 C1 의 값이 2건 이상인 경우 오류가 발생한다.<br> | ||
SELECT C1, C2, C3 | SELECT C1, C2, C3 | ||
FROM T1 | FROM T1 | ||
WHERE C1 = (SELECT C1 | 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 | FROM T2 | ||
WHERE C2 = '3') | WHERE C2 = '3') | ||
15번째 줄: | 24번째 줄: | ||
=== 다중 행 서브쿼리 === | === 다중 행 서브쿼리 === | ||
+ | * 서브쿼리의 결과가 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]] | ||
− | {{ | + | {{데이터|검토 필요}} |
2021년 8월 7일 (토) 03:13 기준 최신판
서브쿼리(sub query)는 하나의 SQL 문에 포함되어 있는 또 다른 SQL 문이다.[1]
목차
분류[편집]
단일 행 서브쿼리[편집]
- 서브쿼리가 단일 행 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용될 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 한다.
- 만약 결과가 2건 이상인 경우 오류가 발생한다.
예시[편집]
만약 T2 테이블의 C2 = 3 인 조건을 만족하는 C1 의 값이 2건 이상인 경우 오류가 발생한다.
SELECT C1, C2, C3 FROM T1 WHERE C1 = (SELECT C1 FROM T2 WHERE C2 = '3') ORDER BY C1, C2, C3;
그룹 함수를 사용하는 경우 결과값이 1건이기 때문에 단일 행 서브쿼리로써 사용 가능하다.[1]
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)와 함께 사용해야 한다.[1]
다중 행 연산자 설명 IN 서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미한다. ALL 서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건을 의미한다. ANY 서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미한다. EXISTS 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건을 의미한다.
예시[편집]
- 만약 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;
연관 서브쿼리[편집]
- 서브쿼리 내에 메인쿼리 컬럼이 사용된 서브쿼리이다.[1]
예시[편집]
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;
각주[편집]
- ↑ 1.0 1.1 1.2 1.3 꽁담,〈서브쿼리란? 서브쿼리 사용해보기〉, 2018-11-13
참고자료[편집]
- 꽁담,〈서브쿼리란? 서브쿼리 사용해보기〉, 2018-11-13
같이 보기[편집]