💡 정답 : 3번
ㄱ,ㄴ 까지는 2014.10.01 이후에 발생한 이벤트에 대한 메일 전송이 이루어진 회원을 조회한다.
HAVING절은 ㄱ,ㄴ까지의 행의 수에 대한 조건절이다.
HAVING COUNT(*) : 2014.10.01 이후에 이벤트 메일 발송을 받은 수를 의미하며 그 이후의 서브쿼리는 2014.10.01이후에 발생한 이벤트의 수를 의미하기 때문에 전체 쿼리는 2014.10.01 이후에 이벤트 메일 발송이 누락된 회원을 찾는 문장이다.
ㄴ을 제거하게 되면 회원ID 확인이 불가능 해 원하는 결과를 추출할 수 없다.
💡 정답 : 3번
서브쿼리의 WHERE절을 살펴보면 부서임시 테이블에서 변경일자가 최신인 B와 부서임시 테이블을 기준으로 조건을 걸고 있다. 부서테이블의 부서코드와 부서임시 테이블의 부서코드를 비교하고 있지만 이렇게 되면 부서임시 테이블에 존재하는 부서코드만 해당되기 때문에 부서임시 테이블에 존재하지 않는 부서코드들의 담당자 컬럼값은 NULL로 변경된다.
만약 UPDATE문에 대한 WHERE절을 추가한다면 원하는 결과를 추출할 수 있다.
일반 그룹 함수 : ROLLUP, CUBE, GROUPING SETS
💡 정답 : 4번
ROLLUP, CUBE, GROUPING SETS는 일반 그룹 함수로 같은 결과를 추출할 수 있다.
순서가 중요한 함수는 ROLLUP이다.
ROLLUP, CUBE, GROUPING SETS 함수들의 대상 컬럼 중 집계된 컬럼 이외의 대상 컬럼 값은 NULL로 반환한다.
💡 정답 : 2, 3번
2번 : GROUP BY CUBE(A.설비ID, B.에너지코드)
는 다음과 같다.
A.설비ID + B.에너지코드의 집계 결과
+
A.설비ID의 집계 결과
+
B.에너지코드의 집계 결과
+
전체에 대한 집계 결과
3번 : GROUPING SETS은 지정한 컬럼에 대해서만 집계를 진행한다. 따라서 아래의 문장은 2번의 문장과 같은 결과를 추출한다.
GROUP BY GROUPING SETS((A.설비ID), (B.에너지코드), (A.설비ID, B.에너지코드), ())
💡 정답 : 4번
결과를 확인하면 전체에 대한 총합 행이 존재하지 않는 것을 알 수 있다
-> GROUPING SETS
발주처ID, 발주일자는 하나로 묶여 집계가 진행되었으므로 GROUPING SETS(자재번호, (발주처 ID, 발주일자))
가 정답이다.
💡 정답 : 4번
GRANT 줄 권한 ON 테이블 명 TO 권한을 줄 테이블명
이때 UPDATE를 하기 위해서는 SELECT도 가능해야 하므로 4번이 정답이다.
💡 정답 : 3번
Procedure, User Defined Function은 작성자의 기준으로 트랜잭션 분할이 가능하다.