728x90
37회
[TEST1]
COL1 COL2 COL3
------------------
A X 1
B Y 2
C Z 3
[TEST2]
COL1 COL2 COL3
------------------
A X 1
B Y 2
C Z 3
D 가 4
E 나 5
[SQL]
MERGE INTO TEST1
USING TEST2
ON (TEST1.COL1 = TEST2.COL1)
WHEN MATCHED THEN
UPDATE SET TEST1.COL3 = 4
WHERE TEST1.COL3 = 2
DELETE WHERE TEST1.COL3 <= 2
WHEN NOT MATCHED THEN
INSERT(TEST1.COL1, TEST1.COL2, TEST1.COL3)
VALUES(TEST2.COL1, TEST2.COL2, TEST2.COL3);
MERGE INTO
문은 특정 키에 대해 레코드가 있을 때, UPDATE
하고 레코드가 없으면 INSERT
하는 구문이다. 여기서 DELETE
절은 MERGE UPDATE 절로 갱신된 행을 대상으로 수행되며, 갱신된 값을 기준으로 행을 삭제한다. (위 구문의 DELETE는 실행되지 않는다)
1) RANK() OVER (PARTITION BY JOB ORDER BY 급여 DESC) JOB_RANK
-- 직업별 급여가 높은 순서대로 부여되고 동일한 순위는 동일한 값이 부여 된다.
2) SUM(급여) OVER (PARTITION BY MGR ORDER BY 급여 RANGE UNBOUNDED PRECEDING)
-- RANGE는 논리적 주소에 의한 행 집합을 의미하고 MGR별 현재 행부터 파티션내 첫번째 행까지 급여의 합계를 계산한다.
3) AVG(급여) OVER (PARTITION BY MGR ORDER BY 날짜 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING))
-- 각 MGR 별로 앞의 한건, 현재 행, 뒤의 한건 사이에서 급여의 평균을 계산한다.
4) COUNT(*) OVER (ORDER BY 급여) RANGE BETWEEN 10 PRECEDING AND 300 FOLLOWING)
-- 급여를 기준으로 현재 행에서의 급여의 10에서 300사이의 급여를 가지는 행의 수를 COUNT
답은 3번
. 각 MGR 파티션 내에서 날짜 기준으로 정렬 수행 후, 파티션 내에서 앞의 한 건, 현재 행 뒤의 한 건 사이 급여의 평균 계산
키워드 | 설명 |
---|---|
ROWS | 물리적인 행 단위 |
RANGE | 논리적인 행 단위 |
CURRENT ROW | 현재 행 |
UNBOUNDED PRECEDING | 첫번째 행 |
UNBOUNDED FOLLOWING | 마지막 행 |
[위치] PRECEDING | [위치] 이전 행 |
[위치] FOLLOWING | [위치] 다음 행 |
[TEST29_1]
COL
----
1
2
3
4
[TEST29_2]
COL
----
2
NULL
[SQL]
SELECT COUNT(*)
FROM TEST29_1 A
WHERE A.COL NOT IN (SELECT COL FROM TEST29_2);
NOT IN문
서브쿼리의 결과 중 NULL
이 포함되는 경우 데이터가 출력되지 않는다. NULL
은 논리적으로 비교할 수 없는 연산. 또한 IN문
은 OR조건, NOT IN문
은 AND 조건
EXISTS 함수와 IN 차이
EXISTS
- 괄호 안에 서브쿼리만 들어갈 수 있음
- 처리순서:
메인쿼리
➜서브쿼리
- 서브쿼리 결과가 존재하는지만 확인
NULL
에 대해TRUE
값 리턴
IN
- 괄호 안에 특정 값/ 서브쿼리 들어갈 수 있음
- 처리순서:
서브쿼리
➜메인쿼리
NULL
에 대해FALSE
리턴. 따라서NOT IN
사용 시NVL
로NULL
체크 필요
SELECT C1, C2
FROM SQLD_02
ORDER BY C1, C2 DESC ( );
NULLS FIRST
: 정렬하고자 하는 NULL
을 데이터 앞에NULLS LAST
: 정렬하고자 하는 NULL
을 데이터 뒤에
33회
- 속성의 분류 중 속성의 특성에 따른 분류 :
기본
-설계
-파생
- 속성의 분류 중 엔터티를 구성하는 방식에 따른 분류 :
일반
-PK
-FK
- 속성의 세부 의미를 더 쪼갤 수 있는지의 여부 :
단순
-복합
- 하나의 속성 안에 동일한 성질의 여러 개의 값이 존재하는가의 여부 :
단일값
-다중값
파티셔닝
- 범위 분할 : 분할 키 값이 범위 내에 있는지 여부로 구분
- 목록 분할 : 값 목록에 파티션을 할당 분할 키 값을 그 목록에 비추어 파티션 선택
- 해시 분할 : 해시 함수의 값에 따라 파티션에 포함
- 라운드 로빈 : 회전하면서 새로운 행이 파티션에 할당
명시적 커서에서 FETCH 단계 이후 수행되는 것 : CLOSE CURSOR
WHERE절에 비교연산자 <>
는 CROSS JOIN
으로 수행
[RESULT]
COL1 COL2 SUM(COL3)
-------------------------
A 가 6
A 다 7
A 13
B 가 20
B 나 130
B 150
C 나 100
C 다 1050
C 1150
>>
GROUPING SETS(COL1, (COL1, COL2))
728x90