Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- sql업데이트
- 한글입력체크
- VarType
- instr
- xmldom
- XML
- FileSystemObject
- 인젝션
- wap
- 자바기초
- tempDB
- update
- join
- JavaScript
- sql순위
- 이미지세로길이
- 정규식
- ERD
- asp함수
- jdbc driver
- sql랭킹
- SPLIT
- inner join
- 이미지가로길이
- injection
- VARIABLE
- WML
- javascript 한글입력체크
- array
- MSSQL보안
Archives
- Today
- Total
3초기억력
오라클 - 스칼라 서브쿼리란? 본문
1. 스칼라 서브쿼리란?
- 스칼라 서브쿼리란 Select-List에서 서브쿼리가 사용될 때 이를 스칼라 서브쿼리라 칭함.
- 스칼라 서브쿼리의 특징은 다음과 같음.
- 하나의 레코드만 리턴이 가능하며, 두개 이상의 레코드는 리턴할 수 없다.
- 일치하는 데이터가 없더라도 NULL값을 리턴할 수 있다.
이는 원래 그룹함수의 특징중에 하나인데 스칼라 서브쿼리 또한 이 특징을 가지고 있다.
-- 1. 그룹함수 사용 안할 때는 리턴하는 값이 없음
SELECT 1
FROM DEPT
WHERE 1 = 2
;
no rows selected
-- 2. 그룹함수를 사용하면 값을 리턴함
SELECT MIN(DEPTNO)
FROM DEPT
WHERE 1 = 2
;
MIN(DEPTNO)
-----------
1 row selected.
-- 3. 스칼라 서브쿼리 테스트(일치하는 값이 없을 경우 NULL 리턴함)
-- EMP:DEPT = M:1 관계에서 M 대상을 올리다보니 GROUP BY 을 추가함
SELECT D.DEPTNO,
(SELECT MIN(EMPNO)
FROM EMP
WHERE DEPTNO = D.DEPTNO) EMPNO
FROM DEPT D
ORDER BY D.DEPTNO
;
DEPTNO EMPNO
---------- ----------
10 1
20 10
30 100
40 1000
50 10000
60 100000
70
80
90
9 rows selected.
2. 스칼라 서브쿼리와 Outer 조인 관계
- 위와 같이 스칼라 서브쿼리는 일치하지 않더라도 NULL를 리턴하므로 Outer 조인과 같은 형태이며,
이는 스칼라 서브쿼리와 Outer 조인은 서로 변형이 가능하다는 것을 알 수 있다.
SELECT D.DEPTNO,
E.EMPNO
FROM DEPT D,
(SELECT DEPTNO,
MIN(EMPNO) EMPNO
FROM EMP
GROUP BY DEPTNO) E
WHERE D.DEPTNO = E.DEPTNO(+)
ORDER BY D.DEPTNO
;
DEPTNO EMPNO
---------- ----------
10 1
20 10
30 100
40 1000
50 10000
60 100000
70
80
90
9 rows selected.
- 하나의 레코드만 리턴이 가능하며, 두개 이상의 레코드는 리턴할 수 없다.
- 일치하는 데이터가 없더라도 NULL값을 리턴할 수 있다.
이는 원래 그룹함수의 특징중에 하나인데 스칼라 서브쿼리 또한 이 특징을 가지고 있다.-- 1. 그룹함수 사용 안할 때는 리턴하는 값이 없음 SELECT 1 FROM DEPT WHERE 1 = 2 ; no rows selected -- 2. 그룹함수를 사용하면 값을 리턴함 SELECT MIN(DEPTNO) FROM DEPT WHERE 1 = 2 ; MIN(DEPTNO) ----------- 1 row selected. -- 3. 스칼라 서브쿼리 테스트(일치하는 값이 없을 경우 NULL 리턴함) -- EMP:DEPT = M:1 관계에서 M 대상을 올리다보니 GROUP BY 을 추가함 SELECT D.DEPTNO, (SELECT MIN(EMPNO) FROM EMP WHERE DEPTNO = D.DEPTNO) EMPNO FROM DEPT D ORDER BY D.DEPTNO ; DEPTNO EMPNO ---------- ---------- 10 1 20 10 30 100 40 1000 50 10000 60 100000 70 80 90 9 rows selected.
이는 스칼라 서브쿼리와 Outer 조인은 서로 변형이 가능하다는 것을 알 수 있다.
SELECT D.DEPTNO, E.EMPNO FROM DEPT D, (SELECT DEPTNO, MIN(EMPNO) EMPNO FROM EMP GROUP BY DEPTNO) E WHERE D.DEPTNO = E.DEPTNO(+) ORDER BY D.DEPTNO ; DEPTNO EMPNO ---------- ---------- 10 1 20 10 30 100 40 1000 50 10000 60 100000 70 80 90 9 rows selected.
출처 : http://www.gurubee.net/pages/viewpage.action?pageId=4948083
상세한 설명은 위 링크로~
'쿼리_MSSQL' 카테고리의 다른 글
Oracle - insert, update 한번에 처리하는 쿼리문 (0) | 2011.04.28 |
---|---|
오라클 - case 문 (0) | 2011.04.08 |
오라클 - 게시판 이전글 다음글 seq 가져오기 (0) | 2011.04.04 |
MS-SQL- insert row 스크립트 생성 SP (0) | 2010.11.11 |
MS-SQL- 복수 인자값, 파싱, 루프돌려 처리 (0) | 2010.06.22 |
Comments