SQLD 모의고사 7회

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

  1. 1. 다음 중 ERD 표기법에 대한 설명으로 가장 적절하지 않은 것은?

    1. ERD는 1976년 Peter Chen이 처음 제안한 것으로 알려져 있다.
    2. Chen 표기법에서는 엔터티를 마름모, 관계를 사각형으로 표현한다.
    3. IE 표기법은 '다(多)' 쪽을 까마귀 발 모양으로 표시하며 실무에서 많이 쓰인다.
    4. Barker 표기법에서는 선택 관계를 점선, 필수 관계를 실선으로 표현한다.
  2. 2. 다음 중 엔터티를 유무형 기준과 발생 시점 기준으로 각각 분류한 결과로 가장 적절한 것은?

    1. 강사 - 개념 엔터티 / 중심 엔터티
    2. 계좌유형 - 유형 엔터티 / 기본 엔터티
    3. 수강신청 - 사건 엔터티 / 기본 엔터티
    4. 주문 - 사건 엔터티 / 중심 엔터티
  3. 3. 도서관 시스템의 대출 엔터티에 다음 속성들이 정의되어 있다.

    속성 설명
    대출일자 회원이 도서를 빌린 날짜
    대출상태코드 대출중·반납·연체 상태를 설계 과정에서 코드화한 값
    반납예정일자 대출일자에 14일을 더해 계산한 날짜
    연체료 연체일수에 일일 연체료를 곱해 계산한 금액

    특성에 따른 속성 분류로 가장 적절하지 않은 것은?

    1. 대출일자 - 기본 속성
    2. 대출상태코드 - 기본 속성
    3. 반납예정일자 - 파생 속성
    4. 연체료 - 파생 속성
  4. 4. 다음 중 관계의 분류와 표현에 대한 설명으로 가장 적절한 것은?

    1. UML 클래스 다이어그램에서는 연관 관계를 실선, 의존 관계를 점선으로 구분해 표현한다.
    2. 부서와 사원처럼 한 엔터티의 존재가 다른 엔터티에 영향을 주는 관계를 행위적 관계라 한다.
    3. 고객과 주문처럼 행위가 있어야 성립하는 관계는 ERD에서 점선으로 구분하여 표현한다.
    4. 관계는 인스턴스 사이에서만 정의되며, 엔터티 수준에서는 관계를 정의하지 않는다.
  5. 5. 다음 중 논리 모델의 식별자와 물리 모델의 키에 대한 설명으로 가장 적절하지 않은 것은?

    1. 논리 모델의 주식별자는 물리 모델의 기본키(Primary Key)에 대응된다.
    2. 보조식별자는 물리 모델에서 대체키나 유니크 인덱스로 구현할 수 있다.
    3. 외부식별자는 물리 모델에서 대체키(유니크 인덱스)로 구현된다.
    4. PRIMARY KEY 제약은 UNIQUE와 NOT NULL을 함께 보장해 유일성과 존재성을 구현한다.
  6. 6. 다음 강사역량 테이블은 세 속성 전체가 PK이다. 업무 규칙상 강사의 보유 자격증과 강의 가능 언어는 서로 아무 관련이 없다.

    강사번호 자격증 강의언어
    T1 SQLD 한국어
    T1 SQLD 영어
    T1 ADsP 한국어
    T1 ADsP 영어

    위 테이블에 대한 설명으로 가장 적절한 것은?

    1. 강의언어가 자격증에 함수 종속되므로 제3정규형을 위반한다.
    2. 모든 속성이 PK에 포함되므로 더 이상 분해할 필요가 없다.
    3. 강사번호에 서로 독립적인 다치 종속이 둘 있으므로 (강사번호, 자격증)과 (강사번호, 강의언어)로 분해하는 제4정규형 대상이다.
    4. 결정자인 자격증이 후보키가 아니므로 BCNF를 위반하며, 조인 종속 제거를 위해 제5정규형으로 분해해야 한다.
  7. 7. DEPT와 EMP의 데이터가 다음과 같다.

    DEPT

    DEPT_NO DEPT_NM
    D10 영업
    D20 개발
    D30 기획

    EMP

    EMP_NO DEPT_NO SAL
    E1 D10 200
    E2 D10 300
    E3 D20 450
    E4 D20 150
    E5 D30 500

    다음 SQL의 결과 행 수로 옳은 것은?

    SELECT D.DEPT_NM, E.EMP_NO
      FROM DEPT D, EMP E
     WHERE E.SAL >= 300;
    1. 3건
    2. 9건
    3. 10건
    4. 15건
  8. 8. 주문(ORDERS)과 주문상세(ORDER_ITEM)는 반드시 함께 존재해야 하는 관계이다. ORDER_ITEM의 PK는 (ORD_NO, SEQ)이며, 두 테이블 모두 처음에는 비어 있다. 다음 문장을 차례로 실행한 후의 상태와 그 평가로 가장 적절한 것은? (Oracle 기준)

    INSERT INTO ORDERS VALUES ('O1', 'C1', SYSDATE);
    COMMIT;
    INSERT INTO ORDER_ITEM VALUES ('O1', 1, 'P1', 2);
    INSERT INTO ORDER_ITEM VALUES ('O1', 1, 'P2', 1);  -- PK 중복 오류 발생
    ROLLBACK;
    1. 주문 1건, 주문상세 0건이 남아 상세 없는 주문이 생기므로 업무 정합성이 깨진다.
    2. 주문 0건, 주문상세 0건이 남는다. 마지막 ROLLBACK이 주문 INSERT까지 취소하기 때문이다.
    3. 주문 1건, 주문상세 1건이 남는다. 오류가 난 문장만 취소되기 때문이다.
    4. 주문 0건, 주문상세 1건이 남아 부모 없는 상세가 생긴다.
  9. 9. EMP 테이블에는 EMP_ID가 'Z9'인 행이 존재하지 않는다. 다음 중 실행 결과가 값이 0인 1개 행인 SQL은? (Oracle 기준)

    1. SELECT NVL(SAL, 0) FROM EMP WHERE EMP_ID = 'Z9';
    2. SELECT SUM(SAL) FROM EMP WHERE EMP_ID = 'Z9';
    3. SELECT MAX(NVL(SAL, 0)) FROM EMP WHERE EMP_ID = 'Z9';
    4. SELECT NVL(SUM(SAL), 0) FROM EMP WHERE EMP_ID = 'Z9';
  10. 10. 주문상세를 두 가지 방식으로 만든 테이블이 있다. 두 테이블 모두 처음에는 비어 있다.

    • A: ITEM_A(ITEM_ID PK, ORD_NO, PROD_CD, QTY) — ITEM_ID는 시퀀스로 자동 부여, 그 외 제약 없음
    • B: ITEM_B(ORD_NO, PROD_CD, QTY) — PK(ORD_NO, PROD_CD)

    다음 (ORD_NO, PROD_CD, QTY) 값 5건을 두 테이블에 각각 한 건씩 INSERT하였다. 각 문장은 개별적으로 실행·확정되며, 오류가 난 문장만 실패한다.

    순서 ORD_NO PROD_CD QTY
    1 O1 P1 2
    2 O1 P2 1
    3 O1 P1 2
    4 O2 P1 3
    5 O2 P1 1

    최종적으로 A와 B에 저장된 행 수로 옳은 것은?

    1. A 5건, B 3건
    2. A 3건, B 3건
    3. A 5건, B 4건
    4. A 4건, B 3건
  11. 11. 두 테이블 A, B가 각각 컬럼 X 하나만 가지고 있고 데이터가 다음과 같다. 관계 연산의 결과 행 수로 적절하지 않은 것은? (중복 행은 제거한다고 가정한다.)

    [A]

    X
    1
    2
    3
    4

    [B]

    X
    3
    4
    5
    1. 합집합(A ∪ B): 5행
    2. 교집합(A ∩ B): 2행
    3. 차집합(A − B): 1행
    4. 곱집합(A × B): 12행
  12. 12. 다음 [T] 테이블에 대해 (가)~(다) SQL을 실행했을 때 결과 행 수로 옳은 것은?

    [T]

    ID C1
    1 10
    2 10
    3 NULL
    4 NULL
    5 20
    -- (가)
    SELECT 'K' FROM T;
    
    -- (나)
    SELECT DISTINCT C1 FROM T;
    
    -- (다)
    SELECT DISTINCT 'K' FROM T;
    1. (가) 1행, (나) 2행, (다) 1행
    2. (가) 5행, (나) 2행, (다) 5행
    3. (가) 5행, (나) 3행, (다) 5행
    4. (가) 5행, (나) 3행, (다) 1행
  13. 13. 문자열 연결(합성)에 대한 설명으로 적절하지 않은 것은?

    1. Oracle의 CONCAT 함수는 인수 개수에 제한이 없어 CONCAT('A', 'B', 'C')처럼 쓸 수 있다.
    2. SQL Server는 기본 설정에서 'A' + NULL의 결과가 NULL이다.
    3. Oracle에서 'A' || NULL의 결과는 NULL이 아니라 'A'다.
    4. Oracle에서 '1' + '2'는 문자열 연결이 아니라 숫자 변환 후 덧셈이 된다.
  14. 14. 다음 SQL의 실행 결과로 옳은 것은? (Oracle)

    SELECT RPAD('AB', 5, '*')  AS A,
           LPAD('SQLD', 2)     AS B,
           LPAD('7', 3, '0')   AS C,
           RPAD('X', 6, 'ab')  AS D
    FROM   DUAL;
    1. AB***, QD, 007, Xababa
    2. AB***, SQ, 007, Xababa
    3. AB***, SQ, 700, Xabab
    4. ***AB, SQ, 007, Xababab
  15. 15. 다음 SQL의 실행 결과로 옳은 것은? (Oracle)

    SELECT ROUND(-2.5)          AS A,
           SIGN(-0.001)         AS B,
           ABS(-7) + CEIL(0.1)  AS C,
           TRUNC(15.79, 1)      AS D
    FROM   DUAL;
    1. -2, -1, 8, 15.8
    2. -3, 0, 7, 15.7
    3. -2, -1, 7, 15.7
    4. -3, -1, 8, 15.7
  16. 16. 다음 [CUSTOMER] 테이블에 SQL을 실행한 결과에 대한 설명으로 옳은 것은? (Oracle, HOME과 MOBILE은 VARCHAR2 타입)

    [CUSTOMER]

    ID HOME MOBILE
    1 111 NULL
    2 NULL 222
    3 NULL NULL
    4 444 444
    SELECT ID,
           COALESCE(HOME, MOBILE, '없음') AS C1,
           NULLIF(HOME, MOBILE)           AS C2,
           NVL2(HOME, 'Y', 'N')           AS C3
    FROM   CUSTOMER;
    1. ID 1 행의 C2는 NULL이다.
    2. ID 2 행의 C3는 'Y'다.
    3. ID 4 행의 C2는 NULL이다.
    4. ID 3 행의 C1은 NULL이다.
  17. 17. 다음 [COUPON] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과로 옳은 것은?

    [COUPON]

    ID NAME
    1 10%
    2 100
    3 5% OFF
    4 %
    5 A%B
    6 NULL
    -- (가)
    SELECT COUNT(*) FROM COUPON WHERE NAME LIKE '%#%' ESCAPE '#';
    
    -- (나)
    SELECT COUNT(*) FROM COUPON WHERE NAME LIKE '%#%%' ESCAPE '#';
    1. (가) 2, (나) 4
    2. (가) 4, (나) 2
    3. (가) 0, (나) 0
    4. (가) 2, (나) 5
  18. 18. 다음 [ORDERS] 테이블의 ORD_DT는 DATE 타입(시분 포함)이다. SQL을 실행했을 때 결과 값은? (Oracle)

    [ORDERS]

    ORD_NO ORD_DT
    1 2024-12-31 23:59
    2 2025-01-01 00:00
    3 2025-01-15 10:30
    4 2025-01-31 00:00
    5 2025-01-31 15:00
    6 2025-02-01 00:00
    SELECT COUNT(*)
    FROM   ORDERS
    WHERE  ORD_DT BETWEEN TO_DATE('2025-01-01', 'YYYY-MM-DD')
                      AND TO_DATE('2025-01-31', 'YYYY-MM-DD');
    1. 2
    2. 3
    3. 4
    4. 5
  19. 19. 다음 [ORDERS] 테이블에 SQL을 실행한 결과로 옳은 것은?

    [ORDERS]

    OID CUST STATUS AMT
    1 가 완료 300
    2 가 취소 500
    3 나 완료 200
    4 나 완료 250
    5 다 취소 900
    6 다 완료 100
    7 가 완료 150
    SELECT CUST, SUM(AMT) AS TOT
    FROM   ORDERS
    WHERE  STATUS = '완료'
    GROUP  BY CUST
    HAVING SUM(AMT) >= 400
    ORDER  BY CUST;
    1. 가, 950 / 나, 450 / 다, 1000
    2. 가, 450 / 나, 450 / 다, 100
    3. 가, 450
    4. 가, 450 / 나, 450
  20. 20. 다음 [LOGIN] 테이블에 SQL을 실행한 결과로 옳은 것은? (LOGIN_DT는 DATE 타입이다.)

    [LOGIN]

    USER_ID DEVICE LOGIN_DT
    u1 PC 2024-03-05
    u1 MOBILE 2024-01-20
    u2 TABLET 2024-02-11
    u1 NULL 2024-04-01
    u2 MOBILE NULL
    SELECT USER_ID, MIN(DEVICE), MAX(LOGIN_DT)
    FROM   LOGIN
    GROUP  BY USER_ID
    ORDER  BY USER_ID;
    1. u1, MOBILE, 2024-03-05 / u2, MOBILE, 2024-02-11
    2. u1, MOBILE, 2024-04-01 / u2, MOBILE, 2024-02-11
    3. u1, NULL, 2024-04-01 / u2, MOBILE, NULL
    4. u1, PC, 2024-04-01 / u2, TABLET, 2024-02-11
  21. 21. 다음 [ROOM] 테이블에 SQL을 실행한 결과의 출력 순서로 옳은 것은? (ROOM_NO는 VARCHAR2 타입이다.)

    [ROOM]

    ROOM_NO
    9
    101
    25
    1000
    3
    SELECT ROOM_NO
    FROM   ROOM
    ORDER  BY ROOM_NO;
    1. 3, 9, 25, 101, 1000
    2. 1000, 101, 25, 9, 3
    3. 1000, 101, 25, 3, 9
    4. 101, 1000, 25, 3, 9
  22. 22. ORDER BY 절에 대한 설명으로 적절하지 않은 것은?

    1. 첫 번째 정렬 기준에 DESC를 지정하면 뒤에 오는 정렬 기준에도 내림차순이 적용된다.
    2. DISTINCT를 쓰지 않은 SELECT 문에서는 SELECT 목록에 없는 컬럼으로도 정렬할 수 있다.
    3. Oracle에서는 NULLS FIRST, NULLS LAST로 NULL의 정렬 위치를 직접 지정할 수 있다.
    4. 첫 번째 정렬 기준의 값이 같은 행끼리만 두 번째 정렬 기준이 적용된다.
  23. 23. 다음 [EMP] 테이블에 SQL을 실행했을 때 결과 값은?

    [EMP]

    EMPNO ENAME DEPTNO
    1 가 10
    2 나 10
    3 다 10
    4 라 20
    5 마 20
    6 바 NULL
    7 사 NULL
    SELECT COUNT(*)
    FROM   EMP A, EMP B
    WHERE  A.DEPTNO = B.DEPTNO
    AND    A.EMPNO < B.EMPNO;
    1. 4
    2. 5
    3. 8
    4. 13
  24. 24. 다음 [EMP], [DEPT], [SALGRADE] 테이블에 SQL을 실행한 결과로 옳은 것은?

    [EMP]

    ENAME SAL DEPTNO
    강 1800 10
    남 3200 20
    도 2500 20
    류 4100 30
    문 2900 NULL

    [DEPT]

    DEPTNO DNAME
    10 회계
    20 연구
    30 영업

    [SALGRADE]

    GRADE LOSAL HISAL
    1 1000 1999
    2 2000 2999
    3 3000 3999
    4 4000 4999
    SELECT E.ENAME, D.DNAME, S.GRADE
    FROM   EMP E, DEPT D, SALGRADE S
    WHERE  E.DEPTNO = D.DEPTNO
    AND    E.SAL BETWEEN S.LOSAL AND S.HISAL
    AND    S.GRADE >= 2
    ORDER  BY S.GRADE DESC, E.ENAME;
    1. 류, 영업, 4 / 남, 연구, 3 / 문, NULL, 2 / 도, 연구, 2
    2. 도, 연구, 2 / 남, 연구, 3 / 류, 영업, 4
    3. 류, 영업, 4 / 남, 연구, 3 / 도, 연구, 2
    4. 류, 영업, 4 / 남, 연구, 3 / 도, 연구, 2 / 강, 회계, 1
  25. 25. 다음 [STUDENT], [CLUB], [ROOM] 테이블에 SQL을 실행했을 때, FLOOR가 NULL로 출력되는 학생의 NAME을 모두 고른 것은?

    [STUDENT]

    SID NAME CLUB_ID
    1 가 100
    2 나 200
    3 다 NULL
    4 라 100

    [CLUB]

    CLUB_ID CNAME ROOM_ID
    100 밴드 R1
    200 바둑 NULL
    300 축구 R2

    [ROOM]

    ROOM_ID FLOOR
    R1 3
    R2 1
    SELECT S.NAME, C.CNAME, R.FLOOR
    FROM   STUDENT S
           LEFT OUTER JOIN CLUB C ON S.CLUB_ID = C.CLUB_ID
           LEFT OUTER JOIN ROOM R ON C.ROOM_ID = R.ROOM_ID;
    1. 다
    2. 나, 다
    3. 나
    4. 다, 라
  26. 26. 다음 SQL과 결과가 다를 수 있는 SQL은? (EMP에는 부서가 없는 사원이, DEPT에는 사원이 없는 부서가 있다. 행의 출력 순서는 고려하지 않는다.)

    SELECT E.ENAME, D.DNAME
    FROM   EMP E LEFT OUTER JOIN DEPT D
           ON E.DEPTNO = D.DEPTNO;
    1. SELECT E.ENAME, D.DNAME FROM DEPT D RIGHT OUTER JOIN EMP E ON E.DEPTNO = D.DEPTNO;
    2. SELECT E.ENAME, D.DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO(+);
    3. SELECT E.ENAME, D.DNAME FROM EMP E LEFT JOIN DEPT D ON D.DEPTNO = E.DEPTNO;
    4. SELECT E.ENAME, D.DNAME FROM EMP E, DEPT D WHERE E.DEPTNO(+) = D.DEPTNO;
  27. 27. 다음 SQL의 실행 결과로 옳은 것은?

    [EMP]

    EMPNO ENAME MGR
    1 KING NULL
    2 JONES 1
    3 BLAKE 1
    4 SMITH 2
    5 ALLEN 3
    6 WARD 3
    SELECT ENAME
      FROM EMP
     WHERE EMPNO IN (SELECT MGR FROM EMP)
     ORDER BY EMPNO;
    1. 결과 없음 (0건)
    2. KING
    3. SMITH, ALLEN, WARD
    4. KING, JONES, BLAKE
  28. 28. 서브쿼리에 대한 설명으로 가장 적절하지 않은 것은?

    1. 비연관 서브쿼리는 메인쿼리 컬럼을 참조하지 않으며 주로 메인쿼리에 상수 값을 제공한다.
    2. 연관 서브쿼리는 메인쿼리보다 먼저 한 번만 실행되고 그 결과를 모든 행에 재사용한다.
    3. EXISTS는 조건을 만족하는 행을 하나 찾으면 더 이상 탐색하지 않는다.
    4. 다중컬럼 서브쿼리는 (A, B) IN (...)처럼 컬럼 쌍으로 비교할 수 있다.
  29. 29. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, 값의 순서는 고려하지 않는다)

    [A]

    X
    1
    2

    [B]

    X
    3
    4

    [C]

    X
    2
    3
    5
    SELECT X FROM A
    UNION
    SELECT X FROM B
    INTERSECT
    SELECT X FROM C;
    1. 1, 2, 3
    2. 2
    3. 2, 3
    4. 1, 2, 3, 4, 5
  30. 30. 다음 중 실행 시 오류가 발생하는 SQL은? (Oracle 기준, EMP의 ENAME과 DEPT의 DNAME은 문자형, DEPTNO는 숫자형)

    1. SELECT ENAME, SAL FROM EMP UNION SELECT DNAME FROM DEPT;
    2. SELECT ENAME FROM EMP UNION SELECT TO_CHAR(DEPTNO) FROM DEPT;
    3. SELECT DEPTNO, ENAME FROM EMP UNION ALL SELECT DEPTNO, NULL FROM DEPT;
    4. SELECT ENAME AS NM FROM EMP MINUS SELECT DNAME FROM DEPT ORDER BY NM;
  31. 31. 다음 SQL의 결과 건수는?

    [SALES]

    YR QTR REGION AMT
    2024 Q1 서울 10
    2024 Q1 부산 20
    2024 Q2 서울 30
    2025 Q1 서울 40
    SELECT YR, QTR, REGION, SUM(AMT)
      FROM SALES
     GROUP BY ROLLUP(YR, QTR, REGION);
    1. 7행
    2. 9행
    3. 12행
    4. 10행
  32. 32. 다음 SQL의 결과에 나타날 수 없는 (GD, GJ) 조합은? (EMP에는 여러 부서·직무의 행이 있다)

    SELECT DEPTNO, JOB,
           GROUPING(DEPTNO) AS GD,
           GROUPING(JOB)    AS GJ,
           SUM(SAL)
      FROM EMP
     GROUP BY ROLLUP(DEPTNO, JOB);
    1. (0, 0)
    2. (1, 0)
    3. (0, 1)
    4. (1, 1)
  33. 33. 다음 SQL의 실행 결과에서 FV 값을 SEQ 순서대로 나열한 것으로 옳은 것은?

    [T]

    SEQ V
    1 7
    2 3
    3 9
    4 4
    5 6
    SELECT SEQ,
           FIRST_VALUE(V) OVER (ORDER BY SEQ
                                ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS FV
      FROM T
     ORDER BY SEQ;
    1. 7, 7, 3, 9, 4
    2. 7, 7, 7, 7, 7
    3. NULL, 7, 3, 9, 4
    4. 7, 3, 9, 4, 6
  34. 34. 다음 SQL의 실행 결과에서 PR 값을 ENAME 순서(A~E)대로 나열한 것으로 옳은 것은?

    [EMP]

    ENAME SAL
    A 100
    B 200
    C 200
    D 300
    E 500
    SELECT ENAME,
           PERCENT_RANK() OVER (ORDER BY SAL) AS PR
      FROM EMP
     ORDER BY ENAME;
    1. 0, 0.25, 0.5, 0.75, 1
    2. 0.2, 0.6, 0.6, 0.8, 1
    3. 0, 0.25, 0.25, 0.75, 1
    4. 0, 0.2, 0.2, 0.6, 0.8
  35. 35. 인사팀은 부서별로 급여가 높은 순으로 순위를 매기려 한다. 같은 급여는 같은 순위를 주고, 동순위가 있어도 다음 순위 번호는 건너뛰지 않아야 한다(예: 1, 2, 2, 3). 이 요구 사항에 가장 적절한 표현은?

    1. RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC)
    2. ROW_NUMBER() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC)
    3. DENSE_RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC)
    4. DENSE_RANK() OVER (ORDER BY DEPTNO, SAL DESC)
  36. 36. 다음 SQL의 실행 결과로 옳은 것은? (SQL Server 기준, 출력 순서대로 표기)

    [EMP]

    ENAME DEPTNO SAL
    A 20 300
    B 10 200
    C 20 500
    D 10 400
    E 30 100
    SELECT TOP (3) ENAME
      FROM EMP
     ORDER BY DEPTNO, SAL DESC;
    1. D, B, C
    2. C, D, A
    3. B, D, A
    4. D, B, C, A
  37. 37. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, 테이블의 행은 표에 나온 순서대로 읽힌다고 가정하며 (ROWNUM, ENAME)을 출력 순서대로 표기)

    [EMP]

    ENAME
    C
    A
    E
    B
    SELECT ROWNUM, ENAME
      FROM EMP
     WHERE ROWNUM <= 3
     ORDER BY ENAME DESC;
    1. (1,E), (2,C), (3,A)
    2. (1,E), (2,C), (3,B)
    3. (3,E), (1,C), (2,A)
    4. (3,E), (4,B), (1,C)
  38. 38. 다음 SQL의 결과 건수는? (Oracle 기준)

    [EMP]

    EMPNO ENAME MGR
    1 KING NULL
    2 JONES 1
    3 BLAKE 1
    4 SCOTT 2
    5 ALLEN 3
    SELECT ENAME, LEVEL
      FROM EMP
     START WITH MGR IS NULL
    CONNECT BY PRIOR MGR = EMPNO;
    1. 0
    2. 1
    3. 5
    4. 4
  39. 39. 다음 SQL을 실행했을 때 4번째로 출력되는 PATH는? (Oracle 기준)

    [ORG]

    ID NAME PID
    1 HQ NULL
    2 HR 1
    3 IT 1
    4 OPS 1
    5 NET 3
    6 DBA 3
    SELECT SYS_CONNECT_BY_PATH(NAME, '/') AS PATH
      FROM ORG
     START WITH PID IS NULL
    CONNECT BY PRIOR ID = PID
     ORDER SIBLINGS BY NAME DESC;
    1. /HQ/IT/DBA
    2. /HQ/HR
    3. /HQ/OPS
    4. /HQ/IT/NET
  40. 40. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, (EMP, Q1, Q2)를 출력 순서대로 표기)

    [SALES]

    EMP YR QTR AMT
    A 2024 Q1 100
    A 2025 Q1 200
    A 2025 Q2 50
    B 2024 Q2 70
    B 2025 Q2 30
    C 2024 Q1 40
    SELECT *
      FROM (SELECT EMP, QTR, AMT FROM SALES)
     PIVOT (SUM(AMT) FOR QTR IN ('Q1' AS Q1, 'Q2' AS Q2))
     ORDER BY EMP;
    1. (A,300,50), (B,0,100), (C,40,0)
    2. (A,100,NULL), (A,200,50), (B,NULL,70), (B,NULL,30), (C,40,NULL)
    3. (A,300,50), (B,NULL,100), (C,40,NULL)
    4. (A,300,50), (B,100,NULL), (C,40,NULL)
  41. 41. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)

    SELECT REGEXP_SUBSTR('file.tar.gz', '\.[^.]+$') AS EXT
      FROM DUAL;
    1. .tar.gz
    2. .gz
    3. gz
    4. .tar
  42. 42. 다음 SQL의 결과 건수는? (Oracle 기준)

    [CONTACT]

    TEL
    02-123-4567
    031-1234-5678
    02-12-3456
    070-1234-5678
    051-1234-56789
    064-999-0000
    SELECT TEL
      FROM CONTACT
     WHERE REGEXP_LIKE(TEL, '^(02|0[3-6][1-5])-[0-9]{3,4}-[0-9]{4}$');
    1. 2
    2. 4
    3. 5
    4. 3
  43. 43. 다음 두 테이블에 대해 아래 UPDATE 문 2개를 순서대로 실행한 후 SELECT SUM(sal) FROM emp;의 결과는?

    EMP

    EMPNO DEPTNO SAL
    1 10 100
    2 20 200
    3 30 300
    4 20 400

    DEPT

    DEPTNO LOC
    10 SEOUL
    20 BUSAN
    30 SEOUL
    UPDATE emp
       SET sal = sal * 2
     WHERE deptno IN (SELECT deptno FROM dept WHERE loc = 'SEOUL');
    
    UPDATE emp
       SET sal = sal + 50
     WHERE sal < 250;
    1. 1100
    2. 1300
    3. 1350
    4. 1500
  44. 44. Oracle에서 MERGE 문을 작성할 때 오류가 발생하는 경우는?

    1. WHEN MATCHED 절만 작성하고 WHEN NOT MATCHED 절은 생략한 경우
    2. UPDATE SET 절에서 ON 조건에 사용한 대상 컬럼을 변경하는 경우
    3. USING 절에 테이블 대신 GROUP BY가 포함된 서브쿼리를 사용한 경우
    4. USING 절에 DUAL을 이용한 서브쿼리를 써서 단일 행을 처리한 경우
  45. 45. 트랜잭션 격리 수준과 동시성 현상에 대한 설명으로 가장 적절한 것은? (ANSI 표준 기준)

    1. READ COMMITTED는 Dirty Read와 Non-Repeatable Read를 모두 방지한다.
    2. REPEATABLE READ에서도 Dirty Read는 발생할 수 있다.
    3. REPEATABLE READ는 Non-Repeatable Read를 방지하지만 Phantom Read는 발생할 수 있다.
    4. Oracle과 SQL Server의 기본 격리 수준은 모두 SERIALIZABLE이다.
  46. 46. T 테이블(C 컬럼)에는 C 값이 10인 한 행이 커밋되어 있다. Oracle에서 아래 문장을 순서대로 실행한 후 SELECT c FROM t;의 결과는?

    UPDATE t SET c = 20;
    SAVEPOINT s1;
    UPDATE t SET c = 30;
    GRANT SELECT ON t TO kim;
    UPDATE t SET c = 40;
    ROLLBACK;
    1. 30
    2. 10
    3. 20
    4. 40
  47. 47. DEPT 테이블에는 DEPTNO 10, 20 두 행이 있고, EMP 테이블은 아래와 같이 생성되어 비어 있다. Oracle에서 ㄱ~ㄹ을 순서대로 실행할 때 오류가 발생하는 문장을 모두 고른 것은?

    CREATE TABLE emp (
      empno   NUMBER  PRIMARY KEY,
      deptno  NUMBER  REFERENCES dept(deptno)
    );
    
    ㄱ. INSERT INTO emp VALUES (1, 10);
    ㄴ. INSERT INTO emp VALUES (2, NULL);
    ㄷ. INSERT INTO emp VALUES (3, 30);
    ㄹ. DELETE FROM dept WHERE deptno = 10;
    1. ㄷ
    2. ㄴ, ㄷ
    3. ㄴ, ㄷ, ㄹ
    4. ㄷ, ㄹ
  48. 48. Oracle에서 다음 CREATE TABLE 문 중 오류가 발생하는 것은?

    1. CREATE TABLE emp_2024 (id NUMBER);
    2. CREATE TABLE 2024_emp (id NUMBER);
    3. CREATE TABLE emp$hist (id NUMBER);
    4. CREATE TABLE "Emp Hist" (id NUMBER);
  49. 49. SCOTT와 U1이 아래 순서로 DCL을 실행했다. 마지막 문장의 실행 결과에 대한 설명으로 가장 적절한 것은? (Oracle)

    -- SCOTT 실행
    GRANT SELECT ON scott.emp TO u1 WITH GRANT OPTION;
    -- U1 실행
    GRANT SELECT ON scott.emp TO u2;
    -- SCOTT 실행
    REVOKE SELECT ON scott.emp FROM u2;
    1. SCOTT는 객체 소유자이므로 REVOKE가 성공하고 U2만 권한을 잃는다.
    2. REVOKE가 성공하며 연쇄 회수에 의해 U1과 U2 모두 권한을 잃는다.
    3. U2의 권한은 U1이 부여했으므로 REVOKE는 오류가 나고 U2는 권한을 유지한다.
    4. REVOKE는 성공하지만 U1이 가진 GRANT OPTION 때문에 U2의 권한은 즉시 복구된다.
  50. 50. DBA가 아래 문장을 순서대로 실행했다. 실행 후 KIM과 LEE의 상태로 가장 적절한 것은? (Oracle, 두 사용자는 이 문장들 외에 다른 권한이 없다.)

    CREATE ROLE r_base;
    CREATE ROLE r_dev;
    GRANT CREATE SESSION TO r_base;
    GRANT r_base TO r_dev;
    GRANT CREATE TABLE TO r_dev;
    GRANT r_dev TO kim;
    GRANT r_base TO lee;
    REVOKE r_base FROM r_dev;
    1. KIM은 접속할 수 없고, LEE는 접속할 수 있지만 테이블은 만들 수 없다.
    2. KIM은 접속하여 테이블을 만들 수 있고, LEE는 접속만 할 수 있다.
    3. KIM과 LEE 모두 접속할 수 없다.
    4. KIM은 접속만 할 수 있고, LEE는 접속하여 테이블을 만들 수 있다.

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