SQLD 모의고사 8회

50문항 · 제한 시간 90분. 다 풀면 과목별 점수와 합격 여부, 문제마다 해설을 보여 줘요.

  1. 1. 다음 사례에서 재설계가 가장 직접적으로 추구한 좋은 데이터 모델의 요소는?

    D사는 '고객' 데이터를 영업·마케팅·고객센터 시스템마다 각자 정의해 사용해 왔다. 재설계에서는 고객 데이터를 조직 전체에서 한 번만 정의하고, 각 업무 영역이 이를 공유·참조하도록 바꾸었다.

    1. 완전성
    2. 의사소통
    3. 통합성
    4. 업무 규칙
  2. 2. E사는 엔터티 후보를 검증하기 위해 CRUD 매트릭스를 작성하였다. 그 결과 판촉안내문 엔터티의 열에는 어떤 업무 프로세스에도 C·R·U·D가 하나도 표시되지 않았다.

    이 결과로 판단할 수 있는 것으로 가장 적절한 것은?

    1. 업무 프로세스에 의해 이용되어야 한다는 특징을 만족하지 못해 잘못 도출된 엔터티일 가능성이 크다.
    2. 엔터티는 관계만 있으면 되므로 프로세스 이용 여부와 관계없이 정상적인 엔터티로 본다.
    3. 인스턴스가 2개 이상이라면 프로세스에서 이용되지 않아도 엔터티로 인정된다.
    4. CRUD 표시가 없는 엔터티는 행위 엔터티로 재분류하면 엔터티의 조건을 만족한다.
  3. 3. 다음 중 속성에 대한 설명으로 가장 적절하지 않은 것은?

    1. 속성은 업무에 필요하고 의미상 더 이상 분리되지 않는 최소의 데이터 단위이다.
    2. 한 인스턴스는 엔터티에 정의된 모든 속성을 가진다.
    3. 하나의 엔터티는 일반적으로 2개 이상의 속성을 가진다.
    4. 속성은 물리 모델에서 테이블의 행(Row)으로 구현된다.
  4. 4. ERD의 관계를 한쪽 엔터티를 기준으로 읽을 때의 순서로 가장 적절한 것은?

    1. 관계명 → 관계차수 → 관계선택사양 → 기준 엔터티
    2. 기준 엔터티 → 관계선택사양 → 관계명 → 관계차수
    3. 기준 엔터티 → 관계차수 → 관계선택사양 → 관계명
    4. 기준 엔터티 → 관계명 → 관계차수 → 관계선택사양
  5. 5. 모든 관계를 식별 관계로 설계한 결과 각 엔터티의 주식별자가 다음과 같이 되었다.

    엔터티 주식별자
    주문 주문번호
    주문상품 주문번호, 상품순번
    배송 주문번호, 상품순번, 배송순번
    배송추적 주문번호, 상품순번, 배송순번, 추적순번

    이 설계에 대한 평가로 가장 적절한 것은?

    1. 식별 관계만 사용했으므로 상위 정보를 조회할 때 조인이 많아지는 것이 주된 문제이다.
    2. 하위로 갈수록 주식별자 속성이 누적되어 조인 조건이 복잡해지므로 비식별 관계 전환을 검토한다.
    3. IE 표기법에서 이 관계들은 부모와 자식을 잇는 점선으로 표현된다.
    4. 배송추적의 주식별자에 포함된 주문번호는 스스로 생성된 내부식별자에 해당한다.
  6. 6. 다음 중 반정규화 사례와 그 기법 분류의 연결로 가장 적절하지 않은 것은?

    1. 자주 함께 조회되는 1:1 관계의 두 테이블을 하나로 합친다. - 테이블 반정규화(병합)
    2. 이미 다른 경로로 연결된 두 테이블 사이에 조인 경로를 줄이는 관계를 추가한다. - 컬럼 반정규화
    3. 주문상세 금액의 합계를 주문 테이블에 총주문금액으로 미리 저장한다. - 컬럼 반정규화(파생 컬럼)
    4. 접근 빈도가 낮은 대용량 컬럼들을 별도 테이블로 떼어낸다. - 테이블 반정규화(수직 분할)
  7. 7. 관계를 조인으로 구현할 때의 설명으로 가장 적절하지 않은 것은?

    1. 조인 컬럼의 데이터 타입과 길이를 부모·자식 테이블에서 같게 맞추어 암시적 형변환을 피한다.
    2. 비식별 관계의 FK 컬럼에는 조회 패턴에 따라 별도 인덱스 생성을 검토한다.
    3. 물리적 FK 제약을 생성하지 않은 테이블끼리는 조인 조건을 작성할 수 없다.
    4. 관계가 없는 테이블끼리 조인 조건 없이 결합하면 카티션 곱이 발생하기 쉽다.
  8. 8. Barker 표기법으로 작성된 ERD에서 다음과 같이 표현되어 있다.

    • 계약과 계약조건을 잇는 관계선은 양쪽 모두 실선이다.
    • 거래처와 계약을 잇는 관계선은 거래처 쪽 절반이 점선이다. (거래처는 계약이 없을 수도 있다.)

    이 모델을 근거로 트랜잭션을 설계할 때 가장 적절한 것은?

    1. Barker 표기법의 실선은 선택 관계를 뜻하므로 계약과 계약조건은 각각 따로 COMMIT해도 된다.
    2. 거래처와 계약 관계에 점선이 있으므로 거래처 등록 시 계약도 반드시 함께 입력해야 한다.
    3. 관계선의 실선·점선은 문서상의 표현일 뿐이므로 트랜잭션 범위와는 관련이 없다.
    4. 계약과 계약조건은 한 트랜잭션에서 함께 입력하고, 거래처 등록은 별도 트랜잭션으로 처리할 수 있다.
  9. 9. NULL에 대한 설명으로 가장 적절한 것은?

    1. Oracle은 길이 0인 문자열 ''을 NULL로 취급하므로 WHERE COL = '' 조건으로는 어떤 행도 조회되지 않는다.
    2. SQL Server에서도 ''은 NULL과 같게 저장되므로 COL IS NULL 조건으로 조회된다.
    3. 공백 문자 ' '와 숫자 0은 값이 없음을 뜻하므로 NULL과 같은 것으로 취급된다.
    4. NULL / 0은 0으로 나누는 연산이므로 Oracle에서 오류가 발생한다.
  10. 10. 회원 테이블의 PK를 휴대전화번호로 설계하였고, 이 값이 주문, 포인트이력, 문의 테이블에 FK로 상속되어 있다. 운영을 시작하자 번호 변경 요청이 매달 수천 건씩 발생하고 있다.

    이 상황에 대한 판단으로 가장 적절한 것은?

    1. 휴대전화번호는 업무에서 생겨난 본질식별자이므로 변경 요청이 많아도 PK로 유지하는 것이 원칙이다.
    2. PK인 휴대전화번호만 변경하고 하위 테이블의 FK 값은 그대로 두어도 데이터 정합성에는 문제가 없다.
    3. 변하지 않는 회원번호(인조식별자)를 PK로 두고, 휴대전화번호는 일반 속성으로 관리하는 것을 검토한다.
    4. 휴대전화번호와 회원명을 묶은 복합 PK로 바꾸면 번호 변경 시 하위 테이블에 미치는 영향이 사라진다.
  11. 11. 데이터 저장 방식의 발전 과정에 대한 설명으로 적절하지 않은 것은?

    1. 파일 시스템은 프로그램마다 데이터를 따로 저장하여 같은 데이터가 중복되기 쉽다.
    2. 계층형 데이터베이스는 데이터를 부모–자식의 트리 구조로 표현한다.
    3. 망(네트워크)형 데이터베이스는 데이터를 그래프 구조로 표현한다.
    4. 관계형 데이터베이스는 데이터를 포인터로 연결된 트리로 저장하며 키 없이 관계를 표현한다.
  12. 12. 다음 [PERSON] 테이블에 SQL을 실행했을 때 INFO 값을 ID 순서대로 나열한 것으로 옳은 것은? (Oracle, AGE는 NUMBER 타입)

    [PERSON]

    ID NAME AGE
    1 KIM 30
    2 LEE NULL
    3 NULL 25
    SELECT NAME || AGE || '세' AS INFO
    FROM   PERSON
    ORDER  BY ID;
    1. KIM30세, NULL, NULL
    2. KIM30세, LEE세, 25세
    3. KIM30세, LEE세, NULL
    4. 오류 발생 (숫자와 문자는 연결 불가)
  13. 13. Oracle에서 SQL 작성 시 대소문자 처리에 대한 설명으로 적절하지 않은 것은?

    1. WHERE ENAME = 'smith'와 WHERE ENAME = 'SMITH'는 항상 같은 결과를 반환한다.
    2. select ename from emp와 SELECT ENAME FROM EMP는 같은 결과를 반환한다.
    3. 문자열 데이터는 대소문자를 구분하므로 'smith'와 'SMITH'는 서로 다른 값이다.
    4. SQL 키워드와 테이블명, 컬럼명은 대소문자를 구분하지 않는다.
  14. 14. 다음 [MEMBER] 테이블에 SQL을 실행했을 때 결과 값은? (Oracle)

    [MEMBER]

    ID EMAIL
    1 kim@a.com
    2 lee@b.com
    3 park@a.com
    4 NULL
    5 choi@ab.com
    SELECT COUNT(*)
    FROM   MEMBER
    WHERE  SUBSTR(EMAIL, INSTR(EMAIL, '@') + 1) = 'a.com';
    1. 1
    2. 2
    3. 3
    4. 4
  15. 15. CASE 표현식과 DECODE 함수에 대한 설명으로 적절하지 않은 것은?

    1. DECODE는 Oracle 전용 함수로 SQL Server에서는 사용할 수 없다.
    2. 검색 CASE 표현식은 >=, BETWEEN, IS NULL 등 다양한 조건을 쓸 수 있다.
    3. CASE 표현식에서 ELSE를 생략하고 만족하는 조건이 없으면 NULL을 반환한다.
    4. DECODE는 DECODE(SAL, >= 3000, 'HIGH', 'LOW')처럼 부등호 비교를 직접 쓸 수 있다.
  16. 16. 다음 중 Oracle에서 실행 시 오류가 발생하는 SQL은?

    1. SELECT TO_NUMBER('12A') FROM DUAL;
    2. SELECT TO_CHAR(1234) FROM DUAL;
    3. SELECT TO_DATE('20250101', 'YYYYMMDD') FROM DUAL;
    4. SELECT '5' * 3 FROM DUAL;
  17. 17. A가 NUMBER 타입 컬럼일 때, 다음 조건과 항상 같은 결과를 반환하는 조건은? (A에 NULL이 있을 수 있다.)

    WHERE NOT (A BETWEEN 10 AND 20)
    1. WHERE A < 10 AND A > 20
    2. WHERE A <= 10 OR A >= 20
    3. WHERE A NOT IN (10, 20)
    4. WHERE A < 10 OR A > 20
  18. 18. 다음 [EMP] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과로 옳은 것은? (Oracle)

    [EMP]

    EMPNO SAL
    1 800
    2 1200
    3 3000
    4 NULL
    5 1500
    6 2000
    -- (가)
    SELECT COUNT(*) FROM EMP WHERE SAL > 1000 AND ROWNUM <= 3;
    
    -- (나)
    SELECT COUNT(*) FROM EMP WHERE ROWNUM <= 10;
    1. (가) 3, (나) 6
    2. (가) 3, (나) 10
    3. (가) 2, (나) 6
    4. (가) 4, (나) 6
  19. 19. 다음 [POINT] 테이블에 SQL을 실행한 결과로 옳은 것은?

    [POINT]

    PNO VAL
    1 10
    2 20
    3 10
    4 NULL
    5 30
    6 20
    SELECT SUM(DISTINCT VAL), AVG(DISTINCT VAL), AVG(VAL)
    FROM   POINT;
    1. 90, 18, 18
    2. 60, 20, 15
    3. 60, 20, 18
    4. 60, 15, 18
  20. 20. EMP(EMPNO, DEPTNO, SAL) 테이블에서 다음 요구사항을 만족하는 SQL로 가장 적절한 것은?

    급여가 1000 이상인 사원만을 대상으로 부서별 사원 수를 셌을 때, 그 수가 2명 이상인 부서의 부서번호와 (대상 사원들의) 평균 급여를 조회한다.

    1. SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING SAL >= 1000 AND COUNT(*) >= 2;
    2. SELECT DEPTNO, AVG(SAL) FROM EMP WHERE SAL >= 1000 AND COUNT(*) >= 2 GROUP BY DEPTNO;
    3. SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING MIN(SAL) >= 1000 AND COUNT(*) >= 2;
    4. SELECT DEPTNO, AVG(SAL) FROM EMP WHERE SAL >= 1000 GROUP BY DEPTNO HAVING COUNT(*) >= 2;
  21. 21. 다음 [SALES] 테이블에 SQL을 실행한 결과로 옳은 것은?

    [SALES]

    REGION AMT
    서울 100
    부산 300
    서울 200
    대구 250
    부산 100
    대구 150
    서울 100
    SELECT REGION, COUNT(*) AS CNT
    FROM   SALES
    GROUP  BY REGION
    ORDER  BY CNT DESC, MAX(AMT) DESC;
    1. 서울, 3 / 부산, 2 / 대구, 2
    2. 서울, 3 / 대구, 2 / 부산, 2
    3. 부산, 2 / 대구, 2 / 서울, 3
    4. SELECT 절에 없는 MAX(AMT)로 정렬하여 오류가 발생한다.
  22. 22. NULL 값의 정렬에 대한 설명으로 옳은 것은?

    1. Oracle에서 ORDER BY COMM DESC를 실행하면 COMM이 NULL인 행이 맨 뒤에 출력된다.
    2. SQL Server에서 ORDER BY COMM ASC를 실행하면 COMM이 NULL인 행이 맨 앞에 출력된다.
    3. Oracle의 NULLS LAST는 DESC와만 함께 쓸 수 있고 ASC와는 함께 쓸 수 없다.
    4. COMM 값이 0인 행은 정렬 시 NULL인 행과 같은 위치에 놓인다.
  23. 23. 다음 [EMP], [DEPT], [PROJ] 테이블에 SQL을 실행했을 때 결과 값은?

    [EMP]

    EMPNO DEPTNO
    1 10
    2 20
    3 20
    4 30

    [DEPT]

    DEPTNO DNAME
    10 A
    20 B
    40 D

    [PROJ]

    PNO PNAME
    P1 알파
    P2 베타
    P3 감마
    SELECT COUNT(*)
    FROM   EMP E, DEPT D, PROJ P
    WHERE  E.DEPTNO = D.DEPTNO;
    1. 3
    2. 9
    3. 12
    4. 36
  24. 24. 조인에 대한 설명으로 적절하지 않은 것은?

    1. Oracle의 (+) 기호는 데이터가 없어도 모든 행을 보존하려는 기준 테이블 쪽 컬럼에 붙인다.
    2. EQUI JOIN에서 조인 컬럼 값이 NULL인 행은 결과에 포함되지 않는다.
    3. 하나의 테이블에 서로 다른 별칭을 붙여 자기 자신과 조인할 수 있다.
    4. 여러 테이블에 같은 이름의 컬럼이 있을 때 접두사 없이 쓰면 모호성 오류가 발생한다.
  25. 25. 다음 [CUSTOMER], [ORDERS] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과 값으로 옳은 것은?

    [CUSTOMER]

    CID NAME
    1 가
    2 나
    3 다

    [ORDERS]

    OID CID STATUS
    1 1 PAID
    2 1 WAIT
    3 2 WAIT
    4 3 PAID
    5 3 PAID
    -- (가)
    SELECT COUNT(*)
    FROM   CUSTOMER C LEFT OUTER JOIN ORDERS O
           ON C.CID = O.CID AND O.STATUS = 'PAID';
    
    -- (나)
    SELECT COUNT(*)
    FROM   CUSTOMER C LEFT OUTER JOIN ORDERS O
           ON C.CID = O.CID
    WHERE  O.STATUS = 'PAID';
    1. (가) 5, (나) 3
    2. (가) 3, (나) 3
    3. (가) 4, (나) 5
    4. (가) 4, (나) 3
  26. 26. EMP(EMPNO, ENAME, DEPTNO), DEPT(DEPTNO, DNAME, LOC) 테이블이 있다. 두 테이블에서 이름이 같은 컬럼은 DEPTNO뿐일 때, Oracle에서 오류가 발생하는 SQL은?

    1. SELECT ENAME, DNAME FROM EMP NATURAL JOIN DEPT WHERE DEPTNO = 10;
    2. SELECT E.ENAME, D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO AND D.LOC = 'SEOUL';
    3. SELECT E.ENAME, D.DNAME FROM EMP E CROSS JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
    4. SELECT E.ENAME, D.DNAME FROM EMP E LEFT OUTER JOIN DEPT D USING (DEPTNO);
  27. 27. 다음 SQL의 실행 결과에서 RNK 값을 ENAME 순서(A~E)대로 나열한 것으로 옳은 것은?

    [EMP]

    ENAME SAL
    A 300
    B 500
    C 300
    D 200
    E 400
    SELECT ENAME,
           (SELECT COUNT(*)
              FROM EMP X
             WHERE X.SAL > E.SAL) + 1 AS RNK
      FROM EMP E
     ORDER BY ENAME;
    1. 3, 1, 4, 5, 2
    2. 3, 1, 3, 5, 2
    3. 3, 1, 3, 4, 2
    4. 2, 0, 2, 4, 1
  28. 28. 다음 (가), (나) SQL의 결과로 옳은 것은?

    [EMP]

    ENAME DEPTNO SAL
    A 10 200
    B 10 NULL
    C 20 300
    D 20 150
    E 30 250
    -- (가)
    SELECT COUNT(*) FROM EMP
     WHERE SAL >= ANY (SELECT SAL FROM EMP WHERE DEPTNO = 10);
    
    -- (나)
    SELECT COUNT(*) FROM EMP
     WHERE SAL >= ALL (SELECT SAL FROM EMP WHERE DEPTNO = 10);
    1. (가) 3, (나) 0
    2. (가) 3, (나) 3
    3. (가) 4, (나) 0
    4. (가) 0, (나) 0
  29. 29. 다음 (가), (나) SQL의 결과 건수로 옳은 것은?

    [A]

    X
    1
    1
    2

    [B]

    X
    NULL
    NULL
    -- (가)
    SELECT X FROM A UNION SELECT X FROM B;
    
    -- (나)
    SELECT X FROM A UNION ALL SELECT X FROM B;
    1. (가) 4행, (나) 5행
    2. (가) 2행, (나) 5행
    3. (가) 5행, (나) 5행
    4. (가) 3행, (나) 5행
  30. 30. 테이블 A와 B의 X 컬럼은 NOT NULL이며, A에는 같은 X 값이 여러 번 있을 수 있다. 다음 중 SELECT X FROM A MINUS SELECT X FROM B와 항상 같은 결과를 반환하는 SQL은?

    1. SELECT X FROM A WHERE X NOT IN (SELECT X FROM B)
    2. SELECT DISTINCT X FROM A WHERE X IN (SELECT X FROM B)
    3. SELECT DISTINCT X FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE B.X = A.X)
    4. SELECT X FROM A UNION SELECT X FROM B
  31. 31. 다음 SQL의 결과에 대한 설명으로 옳은 것은?

    [SALES]

    REGION PROD AMT
    서울 A 10
    서울 B 20
    부산 B 30
    부산 C 40
    SELECT REGION, PROD, SUM(AMT)
      FROM SALES
     GROUP BY GROUPING SETS ((REGION, PROD), (PROD));
    1. 결과는 7행이며 REGION이 NULL이고 PROD가 B인 행의 합계는 50이다.
    2. 결과는 8행이며 합계가 100인 전체 합계 행이 포함된다.
    3. 결과는 6행이며 REGION별 소계 행이 포함된다.
    4. 결과는 7행이며 REGION이 서울이고 PROD가 NULL인 행의 합계는 30이다.
  32. 32. 다음 중 실행 시 오류가 발생하는 SQL은? (Oracle 기준, EMP에는 DEPTNO, JOB, SAL 컬럼이 있다)

    1. SELECT DEPTNO, SUM(SAL), GROUPING(DEPTNO) FROM EMP GROUP BY ROLLUP(DEPTNO);
    2. SELECT DECODE(GROUPING(JOB), 1, '합계', JOB) AS J, SUM(SAL) FROM EMP GROUP BY ROLLUP(JOB);
    3. SELECT DEPTNO, JOB, SUM(SAL) FROM EMP GROUP BY CUBE(DEPTNO, JOB) ORDER BY DEPTNO, JOB;
    4. SELECT DEPTNO, SUM(SAL), GROUPING(JOB) FROM EMP GROUP BY ROLLUP(DEPTNO);
  33. 33. 다음 SQL의 실행 결과에서 PCT 값을 ENAME 순서(A~E)대로 나열한 것으로 옳은 것은?

    [EMP]

    ENAME DEPTNO SAL
    A 10 200
    B 10 300
    C 10 500
    D 20 400
    E 20 100
    SELECT ENAME,
           ROUND(SAL * 100 / SUM(SAL) OVER (PARTITION BY DEPTNO)) AS PCT
      FROM EMP
     ORDER BY ENAME;
    1. 13, 20, 33, 27, 7
    2. 20, 30, 50, 80, 20
    3. 100, 60, 50, 80, 100
    4. 100, 100, 100, 100, 100
  34. 34. 다음 SQL의 실행 결과에서 S 값을 DAY 순서대로 나열한 것으로 옳은 것은? (DAY는 숫자형)

    [T]

    DAY AMT
    1 10
    2 20
    4 30
    5 40
    8 50
    SELECT DAY,
           SUM(AMT) OVER (ORDER BY DAY
                          RANGE BETWEEN CURRENT ROW AND 2 FOLLOWING) AS S
      FROM T
     ORDER BY DAY;
    1. 60, 90, 120, 90, 50
    2. 30, 50, 70, 90, 50
    3. 30, 50, 70, 40, 50
    4. 10, 30, 50, 70, 50
  35. 35. 다음 SQL의 실행 결과로 옳은 것은? (ST 값을 출력 순서대로 표기)

    [LOG]

    CID SEQ ST
    C1 1 A
    C1 3 B
    C2 2 C
    C2 5 D
    C3 4 E
    SELECT CID, ST
      FROM (SELECT CID, SEQ, ST,
                   MAX(SEQ) OVER (PARTITION BY CID) AS MX
              FROM LOG)
     WHERE SEQ = MX
     ORDER BY CID;
    1. A, C, E
    2. B, D, E
    3. D
    4. B, D
  36. 36. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 12c 이상 기준, 출력 순서대로 표기)

    [EMP]

    ENAME SAL
    A 300
    B 100
    C 700
    D 500
    E 200
    F 600
    G 400
    SELECT ENAME
      FROM EMP
     ORDER BY SAL
    OFFSET 4 ROWS;
    1. B, E, A, G
    2. G, D, F
    3. D, F, C
    4. FETCH 절이 없어 오류 발생
  37. 37. 다음 SQL의 실행 결과로 옳은 것은?

    [EMP]

    ENAME DEPTNO SAL HIREDATE
    A 10 500 2020-03-02
    B 10 500 2019-07-15
    C 10 300 2018-01-10
    D 20 400 2021-01-04
    E 20 450 2022-05-20
    SELECT ENAME
      FROM (SELECT ENAME,
                   ROW_NUMBER() OVER (PARTITION BY DEPTNO
                                      ORDER BY SAL DESC, HIREDATE) AS RN
              FROM EMP)
     WHERE RN = 1;
    1. A, E
    2. A, B, E
    3. B, D
    4. B, E
  38. 38. 다음 SQL의 결과 건수는? (Oracle 기준)

    [EMP]

    EMPNO ENAME MGR SAL
    1 KING NULL 5000
    2 JONES 1 3000
    3 FORD 2 3500
    4 SMITH 3 800
    5 BLAKE 1 2800
    6 ALLEN 5 1600
    SELECT ENAME
      FROM EMP
     START WITH MGR IS NULL
    CONNECT BY PRIOR EMPNO = MGR
           AND PRIOR SAL > SAL;
    1. 4
    2. 6
    3. 5
    4. 3
  39. 39. Oracle 계층형 질의에 대한 설명으로 옳지 않은 것은?

    1. CONNECT BY PRIOR EMPNO = MGR은 부모에서 자식 방향(순방향)으로 전개한다.
    2. WHERE 절 조건은 START WITH보다 먼저 적용되어 루트 행 선택에도 영향을 준다.
    3. ORDER SIBLINGS BY는 계층 구조를 유지한 채 같은 부모를 가진 형제끼리 정렬한다.
    4. NOCYCLE을 지정하면 순환이 생겨도 오류 없이 그 지점에서 전개를 멈춘다.
  40. 40. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, (ID, MON, V)를 출력 순서대로 표기)

    [WIDE]

    ID M1 M2 M3
    1 10 20 NULL
    2 NULL 5 15
    SELECT ID, MON, V
      FROM WIDE
    UNPIVOT (V FOR MON IN (M1 AS 1, M2 AS 2, M3 AS 3))
     WHERE V >= 10
     ORDER BY ID, MON;
    1. (1,M1,10), (1,M2,20), (2,M3,15)
    2. (1,1,10), (1,2,20), (2,3,15)
    3. (1,1,10), (1,2,20), (2,2,5), (2,3,15)
    4. (1,1,10), (1,2,20), (1,3,NULL), (2,3,15)
  41. 41. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)

    SELECT REGEXP_SUBSTR('committee', '(.)\1', 1, 2) AS R
      FROM DUAL;
    1. tt
    2. mm
    3. ee
    4. itt
  42. 42. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)

    SELECT REGEXP_REPLACE('1,22,333,4444', '[0-9]+', 'X', 3, 2) AS R
      FROM DUAL;
    1. 1,X,333,4444
    2. 1,22,333,X
    3. 1,22,X,4444
    4. X,22,333,4444
  43. 43. SQL Server에서 다음 두 테이블에 대해 아래 MERGE 문을 실행한 후 TGT 테이블의 데이터로 옳은 것은? (ID, QTY 순)

    TGT

    ID QTY
    1 10
    2 20
    3 30

    SRC

    ID QTY
    2 25
    4 40
    MERGE tgt AS t
    USING src AS s
    ON t.id = s.id
    WHEN MATCHED THEN
      UPDATE SET t.qty = s.qty
    WHEN NOT MATCHED BY TARGET THEN
      INSERT (id, qty) VALUES (s.id, s.qty)
    WHEN NOT MATCHED BY SOURCE THEN
      DELETE;
    1. (1, 10), (2, 25), (3, 30), (4, 40)
    2. (2, 25), (4, 40)
    3. (1, 10), (2, 25), (3, 30)
    4. (2, 25)
  44. 44. Oracle에서 아래 문장을 순서대로 실행했다. 오류가 발생한 문장은 무시하고 진행했을 때 마지막 SELECT의 결과는?

    CREATE TABLE acct (
      id     NUMBER,
      grade  CHAR(1)       DEFAULT 'S',
      point  NUMBER        DEFAULT 0,
      memo   VARCHAR2(10)
    );
    
    INSERT INTO acct VALUES (1, DEFAULT, NULL, 'a');
    INSERT INTO acct (id, memo) VALUES (2, 'b');
    INSERT INTO acct (id, grade, point) VALUES (3, 'G', DEFAULT);
    INSERT INTO acct VALUES (4, 'G', 10);
    
    SELECT COUNT(*), COUNT(point), COUNT(memo) FROM acct;
    1. 3, 2, 2
    2. 4, 3, 2
    3. 3, 3, 2
    4. 3, 2, 3
  45. 45. SQL Server에서 비어 있는 T 테이블(C 컬럼)에 대해 아래 문장을 순서대로 실행했다. 최종적으로 T에 남아 있는 C 값은?

    SET IMPLICIT_TRANSACTIONS ON;
    INSERT INTO t VALUES (1);
    INSERT INTO t VALUES (2);
    COMMIT;
    DELETE FROM t WHERE c = 1;
    INSERT INTO t VALUES (3);
    ROLLBACK;
    1. 2, 3
    2. 1, 2, 3
    3. 2
    4. 1, 2
  46. 46. 두 트랜잭션이 아래 순서로 실행되었다. 이 상황에 대한 설명으로 가장 적절한 것은?

    -- ① TX1
    UPDATE acct SET bal = bal - 100 WHERE id = 1;
    -- ② TX2
    UPDATE acct SET bal = bal - 200 WHERE id = 2;
    -- ③ TX1
    UPDATE acct SET bal = bal + 100 WHERE id = 2;
    -- ④ TX2
    UPDATE acct SET bal = bal + 200 WHERE id = 1;
    1. ③과 ④는 서로 상대가 COMMIT할 때까지 무한히 대기하며 DBMS는 개입하지 않는다.
    2. UPDATE는 공유 잠금만 사용하므로 ③과 ④가 대기 없이 동시에 수행된다.
    3. 교착 상태(Deadlock)이며, DBMS가 이를 감지해 한쪽 세션에 오류를 발생시켜(문장 또는 트랜잭션 취소) 대기를 해소한다.
    4. 격리 수준을 READ UNCOMMITTED로 낮추면 ③과 ④의 잠금 대기가 사라진다.
  47. 47. Oracle에서 아래 문장을 실행한 후 마지막 SELECT의 결과는?

    CREATE TABLE c_t (
      c1  CHAR(6),
      v1  VARCHAR2(6)
    );
    INSERT INTO c_t VALUES ('AB', 'AB');
    INSERT INTO c_t VALUES ('ABC ', 'ABC ');
    
    SELECT SUM(LENGTH(c1)), SUM(LENGTH(v1)) FROM c_t;
    1. 12, 6
    2. 5, 5
    3. 12, 12
    4. 6, 6
  48. 48. Oracle에서 아래와 같이 ENROLL 테이블을 생성하고 ㄱ~ㅁ을 순서대로 실행했다. 실패하는 INSERT 문을 모두 고른 것은?

    CREATE TABLE enroll (
      stu_id     NUMBER,
      course_id  VARCHAR2(5),
      score      NUMBER,
      CONSTRAINT enroll_pk PRIMARY KEY (stu_id, course_id)
    );
    
    ㄱ. INSERT INTO enroll VALUES (1, 'DB', 90);
    ㄴ. INSERT INTO enroll VALUES (1, 'OS', 80);
    ㄷ. INSERT INTO enroll VALUES (2, 'DB', 70);
    ㄹ. INSERT INTO enroll VALUES (1, 'DB', 60);
    ㅁ. INSERT INTO enroll VALUES (3, NULL, 50);
    1. ㄹ
    2. ㄷ, ㄹ
    3. ㄴ, ㄹ, ㅁ
    4. ㄹ, ㅁ
  49. 49. DBA와 U1이 아래 순서로 DCL을 실행했다. 실행 결과에 대한 설명으로 가장 적절한 것은? (Oracle)

    -- DBA 실행
    CREATE ROLE r_rpt;
    GRANT CREATE VIEW TO r_rpt;
    GRANT r_rpt TO u1 WITH ADMIN OPTION;
    -- U1 실행
    GRANT r_rpt TO u2;
    -- DBA 실행
    REVOKE r_rpt FROM u1;
    1. 연쇄 회수가 일어나 U1과 U2 모두 R_RPT 롤을 잃는다.
    2. U1만 R_RPT를 잃고, U2는 R_RPT를 통해 CREATE VIEW 권한을 유지한다.
    3. U1은 ADMIN OPTION만 잃고 R_RPT 롤 자체는 계속 보유한다.
    4. 롤은 WITH ADMIN OPTION으로 부여할 수 없으므로 세 번째 GRANT에서 오류가 난다.
  50. 50. SCOTT가 아래 순서로 DCL을 실행했다. 실행 후 KIM과 LEE가 SCOTT.DEPT에 대해 가진 권한으로 옳은 것은? (Oracle, KIM과 LEE는 이 문장들 외에 다른 권한이 없다.)

    GRANT SELECT ON scott.dept TO PUBLIC;
    GRANT SELECT ON scott.dept TO kim;
    GRANT INSERT ON scott.dept TO PUBLIC;
    REVOKE SELECT ON scott.dept FROM PUBLIC;
    1. KIM: SELECT / LEE: 없음
    2. KIM: SELECT, INSERT / LEE: SELECT, INSERT
    3. KIM: SELECT, INSERT / LEE: INSERT
    4. KIM: INSERT / LEE: INSERT

AI가 SQLD 출제 범위를 바탕으로 새로 만든 예상 문제이며, 실제 기출문제가 아닙니다.