[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);
1) 4
2) 3
3) 5
4) 8
[TEST10]
EMPNO NAME MANAGER
--------------------
1 LIM NULL
2 PARK 1
3 KIM 2
[SQL]
SELECT LPAD('**', (LEVEL-1) * 2, ' ')
|| EMPNO AS EMP, NAME
FROM TEST10
WHERE EMPNO <> 3
START WITH EMPNO = 3
CONNECT BY EMPNO = PRIOR MANAGER;
1) 0
2) 1
3) 2
4) 3
이 SQL 문은 Oracle의 계층적 쿼리를 사용하여 TEST10
테이블에서 계층적 데이터를 조회하는 예입니다. 계층적 쿼리를 사용하면, 부모-자식 관계에 있는 행들을 계층적으로 검색할 수 있습니다. 여기서 사용된 키워드의 의미는 다음과 같습니다:
START WITH EMPNO = 3
: EMPNO가 3인 행부터 검색을 시작합니다.CONNECT BY EMPNO = PRIOR MANAGER
: 현재 행의 EMPNO가 이전 행의 MANAGER와 동일할 때, 이러한 관계를 사용하여 연결합니다.WHERE EMPNO <> 3
: EMPNO가 3이 아닌 행만 결과에 포함합니다.그러나, WHERE
절이 START WITH
절보다 먼저 적용되지 않습니다. START WITH
에서 검색을 시작하여 CONNECT BY
를 통해 계층적으로 연결된 후, 최종 결과에 대해 WHERE
절이 적용됩니다. 따라서, WHERE
절은 START WITH
에 의해 이미 선택된 행들에 대해서만 필터링하는 역할을 합니다.
이 쿼리의 경우, EMPNO = 3
인 행에서 시작하여 그의 관리자로 거슬러 올라가려고 합니다. 그러나 EMPNO <> 3
이라는 조건 때문에 실제로는 EMPNO가 3인 행이 결과에 포함되지 않습니다. 하지만, 이 조건은 START WITH
절이 적용된 후의 결과에 대해 필터링을 적용하기 때문에, EMPNO가 3인 행을 시작점으로 사용할 수 있습니다.
계층 구조는 다음과 같습니다:
따라서, WHERE
조건 (EMPNO <> 3
)에 의해 EMPNO가 3인 KIM은 결과에서 제외되고, PARK와 LIM만 결과에 포함됩니다. 결과적으로 결과 건수는 2가 됩니다.
정답은 3) 2입니다.
1)
SELECT * FROM 계좌마스터
WHERE 회원번호 = (SELECT DISTINCT 회원번호 FROM 고객);
2)
SELECT * FROM 계좌마스터
WHERE 회원번호 IN (SELECT DISTINCT 회원번호 FROM 고객);
3)
SELECT 회원번호, 종목코드 FROM 일자별주문내역
WHERE 주문일자 EXISTS (SELECT DISTINCT 주문일자 FROM 계좌마스터);
4)
SELECT 회원번호, 종목코드 FROM 일자별주문내역
WHERE 주문일자 ALL (SELECT DISTINCT 주문일자 FROM 계좌마스터);
SELECT 회원번호, 종목코드
FROM 일자별주문내역
WHERE EXISTS (
SELECT 1 FROM 계좌마스터
WHERE 계좌마스터.주문일자 = 일자별주문내역.주문일자
);
SELECT 회원번호, 종목코드
FROM 일자별주문내역
WHERE 주문일자 >= ALL (
SELECT DISTINCT 주문일자 FROM 계좌마스터
);
1) 원자성(Atomicity) : 트랜잭션 내의 모든 문장이 모두(ALL) 반영되거나, 혹은 일부가 반영 되어야 한다.
2) 영속성 : 트랜잭션의 수행으로 데이터베이스의 무결성은 보장 될 수 없다.
3) 일관성 : 여러 개의 트랜잭션들이 동시에 수행될 때, 한 개의 트랜잭션의 복사본을 유지한다.
4) 지속성 : Commit이 완료되면 영구적으로 저장을 보장해야 한다.
[TEST45]
C1 C2
----------
10 100
10 200
10 NULL
20 100
20 NULL
20 200
[RESULT]
C1 C2
----------
10 200
10 100
10 NULL
20 200
20 100
20 NULL
[SQL]
SELECT C1, C2
FROM SQLD_02
ORDER BY C1, C2 DESC ( );
제 생각에도 14번 결과는 4개가 맞는 것 같아요
정오표에도 안 나와있네요~
글 잘 보고 갑니다 : )