by 구루비 다중 열 서브쿼리 PAIRWISE NONPAIRWISE Multiple-Column Subquery 서브쿼리 Subquery [2002.08.30]
결과 값이 두 개 이상의 컬럼을 반환하는 Subquery이다
Subquery가 한 번 실행되면서 두 개 이상의 컬럼을 검색해서 주 쿼리로 넘겨 준다.
SELECT empno, sal, deptno FROM emp WHERE (sal, deptno) IN (SELECT sal, deptno FROM emp WHERE deptno = 30 AND comm is NOT NULL); EMPNO SAL DEPTNO ---------- ---------- ---------- 7521 1250 30 7654 1250 30 7844 1500 30 7499 1600 30
WHERE 절에서 두 개 이상의 서로 다른 Subquery가 사용되어서 결과 값을 주 쿼리로 넘겨 준다.
SELECT empno, sal, deptno FROM emp WHERE sal IN (SELECT sal FROM emp WHERE deptno = 30 AND comm is NOT NULL); AND deptno IN (SELECT deptno FROM emp WHERE deptno = 30 AND comm is NOT NULL); EMPNO SAL DEPTNO ---------- ---------- ---------- 7521 1250 30 7654 1250 30 7844 1500 30 7499 1600 30
서브쿼리에서 NULL 값이 반환 되면 주 쿼리 에서는 어떠한 행도 반환되지 않는다.
- 강좌 URL : http://www.gurubee.net/lecture/1504
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.
1번과 2번쿼리는 같은 쿼리가 아닙니다. 다른 쿼리입니다.
예를 들어 서브쿼리의 결과가 (1, a) (2, b) 이렇게 2건이 나올 경우
1번 쿼리의 결과는 (1, a) (2, b) 가 나오구요.
2번 쿼리의 결과는 (1, a) (1, b) (2, a) (2, b) 가 나옵니다.
즉 원치 않는 결과 (1, b) (2, a) 가 포함되어 나오게 되는거구요.
1번의 의도를 가지고 2번처럼 작성하는 실수를 하시면 안되겠지요.
즉, 1번과 2번의 차이를 성능 관점에서 바라보는 것은 전혀 의미 없는 짓입니다.
성능 비교는 같은 결과를 내는 쿼리끼리 비교하는 거죠.
1, 2 번 쿼리는 그 논리적인 의미를 비교해야 합니다.
같은조건 검색시 1번이 2번보다 쿼리를 덜 사용.
다른조건 검색시2번을 사용
틀린부분이 있다면 리플달아주시면 감사하겠습니다.