[신유형] sqld 시험 TOP N QUERY / PIVOT & UNPIVOT / 정규 표현식 예상 문제
정답은 하단에 있습니다.
문제 1
PIVOT을 이용한 데이터 변환 SQL 구문 중 적절하지 않은 것은?
1. SELECT * FROM (SELECT EMPNO, JOB, DEPTNO FROM EMP) PIVOT (COUNT(EMPNO) FOR DEPTNO IN (10,20,30));
2. SELECT * FROM (SELECT EMPNO, JOB, DEPTNO FROM EMP) PIVOT (COUNT(JOB) FOR DEPTNO IN (10,20,30));
3. SELECT * FROM (SELECT JOB, DEPTNO FROM EMP) PIVOT (COUNT(DEPTNO) FOR DEPTNO IN (10,20,30));
4. SELECT * FROM (SELECT ENAME, JOB, DEPTNO FROM EMP) PIVOT (COUNT(ENAME) FOR DEPTNO IN (10,20,30));
문제 2
UNPIVOT으로 데이터를 변환할 때 올바른 SQL 구문은?
1. SELECT * FROM TEST1 UNPIVOT(CNT FOR DEPTNO IN (“10″,”20″,”30”));
2. SELECT * FROM TEST1 UNPIVOT(DEPTNO FOR CNT IN (“10″,”20″,”30”));
3. SELECT * FROM TEST1 UNPIVOT(CNT FOR DEPTNO IN (10,20,30));
4. SELECT * FROM TEST1 UNPIVOT(DEPTNO FOR CNT IN (10,20,30));
문제 3
상위 5명을 급여가 높은 순서로 추출하는 SQL문으로 적절하지 않은 것은?
1. SELECT * FROM EMP ORDER BY SAL DESC FETCH FIRST 5 ROWS ONLY;
2. SELECT * FROM EMP ORDER BY SAL DESC FETCH NEXT 5 ROW ONLY;
3. SELECT * FROM (SELECT EMPNO, ENAME, DEPTNO, SAL, RANK() OVER(ORDER BY SAL DESC) AS SAL_RANK FROM EMP) WHERE SAL_RANK <= 5;
4. SELECT * FROM (SELECT E.*, ROWNUM AS SAL_RANK FROM EMP E ORDER BY SAL DESC) WHERE SAL_RANK <= 5;
문제 4
다음 SQL 중 빈칸에 들어갈 함수식으로 알맞지 않은 것은?
1. REGEXP_SUBSTR(JOB_ID, ‘\D+’, 4)
2. REGEXP_SUBSTR(JOB_ID, ‘(\D+)_(\D+)’, 1, 1, NULL, 1)
3. REGEXP_REPLACE(JOB_ID, ‘[A-Z]+_’)
4. REGEXP_REPLACE(JOB_ID,’.+_’, ”)
문제 5
급여가 낮은 순서대로 6~8번째 값을 출력하는 SQL문으로 적절하지 않은 것은?
1. SELECT EMPNO, ENAME, DEPTNO, SAL FROM (SELECT E.*, RANK() OVER(ORDER BY SAL) AS SAL_RANK FROM EMP E) WHERE SAL_RANK BETWEEN 6 AND 8;
2. SELECT EMPNO, ENAME, DEPTNO, SAL FROM (SELECT E.*, DENSE_RANK() OVER(ORDER BY SAL) AS SAL_RANK FROM EMP E) WHERE SAL_RANK BETWEEN 5 AND 7;
3. SELECT EMPNO, ENAME, DEPTNO, SAL FROM (SELECT E.*, ROWNUM AS SAL_RANK FROM EMP E ORDER BY SAL) WHERE SAL_RANK BETWEEN 6 AND 8;
4. SELECT EMPNO, ENAME, DEPTNO, SAL FROM EMP ORDER BY SAL OFFSET 5 ROWS FETCH NEXT 3 ROWS ONLY;
문제 6
다음 SQL의 실행 결과로 알맞은 것을 고르시오.
1. PHONE_NUMBER의 모든 숫자가 ‘XXX’로 대체된다.
2. 두 번째 숫자 시퀀스만 ‘XXX’로 대체된다.
3. 첫 번째와 두 번째 숫자 시퀀스가 ‘XXX’로 대체된다.
4. 마지막 숫자 시퀀스만 ‘XXX’로 대체된다.
문제 7
다음 중 Top N Query에 대한 설명 중 틀린 것은?
1. 윈도우 함수를 사용하여 상위 N개에 대한 값을 추출할 수 있으나 단일 Query로 표현 불가하다.
2. ROWNUM을 사용한 방식은 ROWNUM 할당 전에 먼저 순서대로 데이터를 정렬한 뒤 ROWNUM을 부여 후 추출하는 것이 좋다.
3. FETCH 절을 사용하면 단일 Query로도 정렬 순서대로의 상위 N개에 대한 값을 추출할 수 있다.
4. OFFSET 절을 사용하면 FETCH절에서 반드시 NEXT 함수를 사용하여 그 다음 n개를 추출할 수 있다.
문제 8
다음 중 빈칸에 들어갈 함수식으로 알맞지 않은 것은?
1. REGEXP_SUBSTR(JOB_ID, ‘\D+’, 4)
2. REGEXP_SUBSTR(JOB_ID, ‘(\D+)_(\D+)’, 1, 1, NULL, 1)
3. REGEXP_REPLACE(JOB_ID, ‘[A-Z]+_’)
4. REGEXP_REPLACE(JOB_ID,’.+_’, ”)
문제 9
SQL에서 NULL에 대한 설명으로 가장 적절하지 않은 것은?
1. NULL은 값이 없음을 나타내는 특별한 상태이다.
2. NULL은 숫자 0이나 빈 문자열과 동일하게 취급된다.
3. NULL을 포함한 연산 결과는 NULL이 된다.
4. NULL 값을 확인하기 위해 IS NULL을 사용한다.
문제 10
다음 SQL 실행 결과로 알맞은 것을 고르시오.
1. 모든 모음이 ‘*’로 대체된다.
2. 첫 번째 모음만 ‘*’로 대체된다.
3. 모든 자음이 ‘*’로 대체된다.
4. 첫 번째 자음만 ‘*’로 대체된다.
정답 및 해설
문제 1: 정답 3번
PIVOT을 사용하여 특정 컬럼을 기준으로 데이터를 변환할 수 있습니다. SELECT 절에서 PIVOT 컬럼과 COUNT 대상 컬럼을 적절히 설정해야 합니다.
- 정답: 3. COUNT에 적절한 컬럼이 설정되지 않음
문제 2: 정답 1번
UNPIVOT은 지정한 컬럼들의 데이터를 행으로 변환합니다. 컬럼 이름은 문자열 없이 바로 지정해야 합니다.
- 정답: 1. 컬럼 이름에 문자열이 사용됨
문제 3: 정답 2번
상위 N개의 데이터를 구할 때 ROWNUM과 윈도우 함수를 사용하여 정렬 후 RANK를 부여하는 방식이 주로 사용됩니다.
- 정답: 2. ROWNUM 표현 오류
문제 4: 정답 3번
정규 표현식을 통해 문자열의 패턴을 치환하거나 추출할 때 각 함수의 매개변수는 적절히 설정해야 합니다.
- 정답: 3. COUNT에 적합하지 않은 패턴 설정
문제 5: 정답 2번
RANK와 DENSE_RANK를 활용해 특정 구간의 순위 데이터를 추출합니다. 6~8번째 값을 올바르게 선택하려면 BETWEEN을 사용해야 합니다.
- 정답: 2. RANK 범위 오류
문제 6: 정답 2번
REGEXP_REPLACE의 매개변수를 통해 두 번째 일치 부분만 변경하려면, 위치 인수에 2를 설정합니다.
- 정답: 2. 두 번째 시퀀스만 대체됨
문제 7: 정답 1번
Top N Query는 단일 쿼리로 상위 N개의 데이터를 추출할 수 있는 방법이 제공됩니다. 윈도우 함수로도 가능합니다.
- 정답: 1. 단일 쿼리로 불가능하다는 설명 오류
문제 8: 정답 3번
정규식 패턴을 사용하여 특정 패턴을 추출할 때, 매개변수가 적합하지 않은 경우 오류가 발생할 수 있습니다.
- 정답: 3. 패턴 매개변수 오류
문제 9: 정답 2번
NULL은 숫자 0이나 빈 문자열과 같은 값이 아닌, 값이 없음을 나타내는 상태입니다.
- 정답: 2. NULL이 숫자 0과 동일하다는 설명 오류
문제 10: 정답 1번
REGEXP_REPLACE는 매개변수의 패턴에 일치하는 모든 문자를 대체합니다. ‘[aeiou]’는 모든 모음을 의미합니다.
- 정답: 1. 모든 모음이 ‘*’로 대체됨