SQLD 모의고사 3회

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

  1. 1. 다음 사례에서 드러난 데이터 모델링의 문제(유의점)로 가장 적절한 것은?

    A사는 주문 처리 절차가 조금만 바뀌어도 매번 테이블 구조를 수정해야 했다. 분석해 보니 데이터 정의가 특정 업무 프로세스의 처리 방식에 강하게 묶여 설계되어 있었다.

    1. 중복(Duplication)
    2. 비일관성(Inconsistency)
    3. 추상화(Abstraction)
    4. 비유연성(Inflexibility)
  2. 2. 렌터카 업무를 분석하여 다음과 같이 엔터티를 도출하였다.

    • 고객: 회원 가입 시 등록되는 고객 정보
    • 차량: 회사가 보유한 차량 정보
    • 대여계약: 고객이 차량을 빌릴 때 체결하는 계약
    • 계약차량내역: 대여계약과 차량으로부터 발생하는 차량별 대여·반납 내역

    다음 중 발생 시점에 따른 엔터티 분류로 가장 적절한 것은?

    1. 고객 - 중심 엔터티
    2. 대여계약 - 중심 엔터티
    3. 차량 - 행위 엔터티
    4. 계약차량내역 - 기본 엔터티
  3. 3. 다음 중 속성에 대한 설명으로 가장 적절하지 않은 것은?

    1. 하나의 인스턴스에서 하나의 속성은 하나의 속성값만 가진다.
    2. 주소를 시·구·동으로 나누어 관리할 업무 요구가 있다면 각각을 별도 속성으로 정의한다.
    3. 여러 값을 가질 수 있는 다중값 속성은 하나의 속성에 구분자로 이어서 저장하는 것이 원칙이다.
    4. 사원의 부서번호처럼 다른 엔터티와의 관계를 통해 포함된 속성은 FK 속성으로 분류한다.
  4. 4. 두 엔터티 사이에 관계를 정의할지 판단하기 위한 체크사항으로 가장 적절하지 않은 것은?

    1. 두 엔터티가 이름이 같은 속성을 하나 이상 가지고 있는가?
    2. 두 엔터티 사이에 관심 있는 연관 규칙이 존재하는가?
    3. 두 엔터티 사이에 정보의 조합이 발생하는가?
    4. 업무 기술서나 장표에 관계 연결을 가능하게 하는 동사가 있는가?
  5. 5. 다음 중 부모 엔터티와 자식 엔터티를 비식별 관계로 설정하는 것이 더 적합한 경우로 가장 적절한 것은?

    1. 자식 엔터티가 부모 엔터티 없이는 업무적으로 아무 의미가 없을 때
    2. 부모 인스턴스가 삭제된 이후에도 자식 인스턴스는 이력으로 남아 있어야 할 때
    3. 부모의 주식별자를 자식의 주식별자에 포함해 상위 정보를 조인 없이 활용하려 할 때
    4. 주문과 주문목록처럼 자식이 부모에 강하게 종속되어 항상 함께 생성될 때
  6. 6. 다음 중 정규화와 반정규화에 대한 설명으로 가장 적절하지 않은 것은?

    1. 정규화는 함수 종속성을 근거로 릴레이션을 분해하여 데이터 중복과 이상현상을 줄인다.
    2. 정규화된 모델은 입력·수정·삭제 성능이 대체로 향상되며, 조회 성능이 향상되는 경우도 있다.
    3. 반정규화를 적용하기 전에 뷰, 인덱스 조정, 클러스터링, 파티셔닝 같은 대안을 먼저 검토한다.
    4. 정규화로 제거하려는 이상현상에는 삽입 이상, 갱신 이상, 삭제 이상, 조회 이상이 있다.
  7. 7. 주문 엔터티가 개인고객 또는 법인고객 중 하나와 관계를 맺도록 ERD에 호(Arc)를 그려 표현하였다. 이러한 상호배타적(아크) 관계에 대한 설명으로 가장 적절한 것은?

    1. 하나의 주문은 개인고객과 법인고객 모두와 동시에 관계를 맺어야 한다.
    2. 아크로 묶인 관계들은 필수/선택 여부를 관계마다 서로 다르게 설계하는 것이 일반적이다.
    3. 어느 한 시점에 하나의 주문은 여러 고객 엔터티 중 오직 하나와만 관계를 맺는다.
    4. FK 하나와 구분 컬럼으로 구현하면 참조 대상이 하나로 고정되어 물리적 FK 제약을 걸기 쉽다.
  8. 8. 업무상 주문은 반드시 1건 이상의 주문상세를 가져야 하고 주문상세도 반드시 하나의 주문에 속해야 한다. 그런데 ERD에는 주문상세 쪽이 선택(o)으로 잘못 표기되어 있었고, 개발자는 이를 근거로 주문을 INSERT한 뒤 바로 COMMIT하고 주문상세는 별도 트랜잭션으로 입력하도록 구현하였다.

    이 구현에서 가장 우려되는 문제는?

    1. 주문상세 입력이 실패하면 상세 품목이 없는 주문이 남아 데이터 정합성이 깨질 수 있다.
    2. 트랜잭션 범위가 불필요하게 커져 잠금 경합이 증가한다.
    3. 주문상세 없이는 주문을 저장할 수 없게 되어 신규 주문 입력이 불가능해진다.
    4. 주문 테이블의 PK에 NULL이 저장되어 엔터티 무결성이 깨진다.
  9. 9. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, 결과는 C1 / C2 / C3 / C4 순서)

    SELECT NVL2(NULL, 'A', 'B')   AS C1,
           NULLIF(5, 5)            AS C2,
           COALESCE(NULL, 0, 7)    AS C3,
           'X' || NULL             AS C4
      FROM DUAL;
    1. A / NULL / 7 / NULL
    2. B / NULL / 0 / X
    3. B / 5 / 0 / NULL
    4. A / 5 / 7 / X
  10. 10. 다음 중 본질식별자 대신 인조식별자 도입을 검토할 상황으로 가장 적절하지 않은 것은?

    1. 본질식별자를 구성하는 속성이 너무 많아 조인 조건과 SQL이 지나치게 복잡해질 때
    2. 식별 관계가 하위로 계속 이어져 자식 엔터티의 PK가 지나치게 길어질 때
    3. 본질식별자를 구성하는 속성의 값이 업무상 변경될 가능성이 있을 때
    4. 식별자 자체만으로 업무 데이터의 중복 입력을 확실히 차단해야 할 때
  11. 11. DEPT 테이블의 DEPTNO는 기본키이고, EMP 테이블의 EMPNO는 기본키, EMP.DEPTNO는 DEPT.DEPTNO를 참조하는 외래키다. EMP.DEPTNO에는 NOT NULL 제약이 없다. 현재 데이터가 다음과 같을 때 오류가 발생하는 INSERT 문은?

    [DEPT]

    DEPTNO DNAME
    10 인사
    20 개발
    30 영업

    [EMP]

    EMPNO DEPTNO
    1 10
    2 20
    1. INSERT INTO EMP (EMPNO, DEPTNO) VALUES (3, 30);
    2. INSERT INTO EMP (EMPNO, DEPTNO) VALUES (4, 40);
    3. INSERT INTO EMP (EMPNO, DEPTNO) VALUES (5, NULL);
    4. INSERT INTO EMP (EMPNO, DEPTNO) VALUES (6, 20);
  12. 12. 다음 SQL의 실행 결과로 옳은 것은? (Oracle)

    SELECT 'A' || NULL || 'B',
           '10' + '5',
           CONCAT('X', 'Y')
    FROM   DUAL;
    1. NULL, 105, XY
    2. AB, 105, XY
    3. NULL, 15, XY
    4. AB, 15, XY
  13. 13. Oracle에서 컬럼 별칭(ALIAS)에 대한 설명으로 적절하지 않은 것은?

    1. 컬럼명 뒤에 AS 키워드를 생략하고 바로 별칭을 지정할 수 있다.
    2. 별칭을 큰따옴표로 감싸면 대소문자가 구분되어 지정한 그대로 출력된다.
    3. AS 키워드를 사용하면 큰따옴표 없이도 공백이 포함된 별칭을 지정할 수 있다.
    4. ORDER BY 절에서는 SELECT 절에서 정의한 별칭을 사용할 수 있다.
  14. 14. 다음 [T] 테이블에 SQL을 실행했을 때 결과로 옳은 것은? (Oracle)

    [T]

    ID CODE
    1 A
    2 NULL
    3 B
    4 NULL
    SELECT COUNT(DECODE(CODE, NULL, 'Y'))           AS D_CNT,
           COUNT(CASE CODE WHEN NULL THEN 'Y' END) AS C_CNT
    FROM   T;
    1. D_CNT=2, C_CNT=2
    2. D_CNT=2, C_CNT=0
    3. D_CNT=0, C_CNT=0
    4. D_CNT=0, C_CNT=2
  15. 15. 다음 SQL의 실행 결과로 옳은 것은? (Oracle)

    SELECT MOD(-17, 5),
           MOD(17, -5),
           ROUND(4567.89, -2),
           TRUNC(4567.89, -1)
    FROM   DUAL;
    1. -2, 2, 4600, 4560
    2. 3, -3, 4600, 4560
    3. -2, -2, 4500, 4560
    4. -2, 2, 4600, 4570
  16. 16. 다음 SQL을 SQL Server에서 실행한 결과로 옳은 것은?

    SELECT LEN('SQLD  '),
           SUBSTRING('DATABASE', 3, 4),
           ISNULL(NULL, 'N'),
           7 % 3;
    1. 6, TABA, N, 1
    2. 4, ATAB, N, 1
    3. 4, TABA, N, 1
    4. 4, TABA, NULL, 1
  17. 17. 다음 [T] 테이블에서 C1은 CHAR(5), C2는 VARCHAR2(5) 타입이다. (가), (나) SQL의 결과로 옳은 것은? (Oracle, 표의 '·'는 저장된 공백 한 칸을 의미한다.)

    [T]

    ID C1 (CHAR(5)) C2 (VARCHAR2(5))
    1 AB··· AB
    2 AB··· AB·
    3 ABC·· ABC
    -- (가)
    SELECT COUNT(*) FROM T WHERE C1 = 'AB';
    
    -- (나)
    SELECT COUNT(*) FROM T WHERE C2 = 'AB';
    1. (가) 2, (나) 1
    2. (가) 1, (나) 1
    3. (가) 2, (나) 2
    4. (가) 1, (나) 2
  18. 18. 다음 [EMP] 테이블에 SQL을 실행했을 때 결과 값은?

    [EMP]

    ENAME DEPTNO SAL
    A 10 3000
    B 20 1500
    C NULL 2000
    D 30 NULL
    E 20 4000
    F 30 1000
    SELECT COUNT(*)
    FROM   EMP
    WHERE  NOT (DEPTNO = 10 OR SAL >= 2500);
    1. 1
    2. 2
    3. 3
    4. 4
  19. 19. 다음 [T] 테이블에 SQL을 실행한 결과로 옳은 것은?

    [T]

    ID A B
    1 10 5
    2 NULL 20
    3 30 NULL
    4 40 10
    SELECT SUM(A + B),
           SUM(A) + SUM(B),
           SUM(NVL(A, 0) + NVL(B, 0))
    FROM   T;
    1. 115, 115, 115
    2. 65, 65, 115
    3. 115, 65, 115
    4. 65, 115, 115
  20. 20. 다음 [EMP] 테이블에 대한 SQL과 그 실행 결과를 짝지은 것으로 옳은 것은? (Oracle)

    [EMP]

    ENAME DEPTNO JOB SAL
    A 10 CLERK 1000
    B 10 MANAGER 3000
    C 20 CLERK 1200
    D 20 CLERK 1300
    E 20 ANALYST 3000
    F 30 CLERK 900
    1. SELECT MAX(SUM(SAL)) FROM EMP GROUP BY DEPTNO; → 5500
    2. SELECT COUNT(DISTINCT JOB) FROM EMP; → 6
    3. SELECT DEPTNO, MAX(SUM(SAL)) FROM EMP GROUP BY DEPTNO; → 20, 5500
    4. SELECT COUNT(*) FROM EMP GROUP BY JOB HAVING COUNT(*) >= 2; → 2행
  21. 21. 다음 [T] 테이블에 대해 (가)~(다)를 실행했을 때 각각 첫 번째로 출력되는 ID로 옳은 것은?

    [T]

    ID SCORE
    1 70
    2 NULL
    3 90
    4 80
    -- (가) Oracle
    SELECT ID FROM T ORDER BY SCORE;
    
    -- (나) SQL Server
    SELECT ID FROM T ORDER BY SCORE;
    
    -- (다) Oracle
    SELECT ID FROM T ORDER BY SCORE DESC NULLS LAST;
    1. (가) 2, (나) 1, (다) 3
    2. (가) 1, (나) 2, (다) 2
    3. (가) 1, (나) 2, (다) 3
    4. (가) 2, (나) 2, (다) 3
  22. 22. EMP 테이블(ENAME, JOB, SAL)에 대해 실행할 때 오류가 발생하는 SQL은?

    1. SELECT JOB, COUNT(*) FROM EMP GROUP BY JOB ORDER BY 2 DESC;
    2. SELECT JOB, COUNT(*) CNT FROM EMP GROUP BY JOB ORDER BY CNT;
    3. SELECT JOB, COUNT(*) FROM EMP GROUP BY JOB ORDER BY MAX(SAL);
    4. SELECT JOB, COUNT(*) FROM EMP GROUP BY JOB ORDER BY SAL;
  23. 23. 다음 [COLORS], [SIZES] 테이블에 SQL을 실행했을 때 결과 값은?

    [COLORS]

    COLOR
    RED
    BLUE
    GREEN
    BLACK

    [SIZES]

    SZ
    S
    M
    L
    XL
    SELECT COUNT(*)
    FROM   COLORS C, SIZES S
    WHERE  C.COLOR LIKE '%E%'
    AND    S.SZ <> 'XL';
    1. 7
    2. 9
    3. 12
    4. 16
  24. 24. 다음 [DEPT], [EMP] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과 값으로 옳은 것은? (Oracle)

    [DEPT]

    DEPTNO DNAME
    10 인사
    20 개발
    30 영업

    [EMP]

    EMPNO DEPTNO JOB
    1 10 CLERK
    2 10 MANAGER
    3 20 CLERK
    4 20 ANALYST
    -- (가)
    SELECT COUNT(*)
    FROM   DEPT D, EMP E
    WHERE  D.DEPTNO = E.DEPTNO(+)
    AND    E.JOB(+) = 'CLERK';
    
    -- (나)
    SELECT COUNT(*)
    FROM   DEPT D, EMP E
    WHERE  D.DEPTNO = E.DEPTNO(+)
    AND    E.JOB = 'CLERK';
    1. (가) 3, (나) 2
    2. (가) 3, (나) 3
    3. (가) 2, (나) 2
    4. (가) 5, (나) 2
  25. 25. 다음 [MEMBER], [COUPON] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과 값으로 옳은 것은?

    [MEMBER]

    MID NAME
    M1 가
    M2 나
    M3 다

    [COUPON]

    CID MID STATUS
    1 M1 USED
    2 M1 NEW
    3 M2 USED
    -- (가)
    SELECT COUNT(*)
    FROM   MEMBER M LEFT OUTER JOIN COUPON C
           ON M.MID = C.MID AND M.NAME = '가';
    
    -- (나)
    SELECT COUNT(*)
    FROM   MEMBER M LEFT OUTER JOIN COUPON C
           ON M.MID = C.MID
    WHERE  M.NAME = '가';
    1. (가) 2, (나) 2
    2. (가) 4, (나) 4
    3. (가) 4, (나) 2
    4. (가) 3, (나) 2
  26. 26. 다음 [EMP], [DEPT] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과 값으로 옳은 것은?

    [EMP]

    EMPNO DEPTNO REG_DT
    1 10 2024-01-01
    2 20 2024-02-01
    3 20 2024-03-01
    4 30 2024-01-01

    [DEPT]

    DEPTNO DNAME REG_DT
    10 인사 2024-01-01
    20 개발 2024-01-01
    30 영업 2024-01-01
    -- (가)
    SELECT COUNT(*) FROM EMP NATURAL JOIN DEPT;
    
    -- (나)
    SELECT COUNT(*) FROM EMP JOIN DEPT USING (DEPTNO);
    1. (가) 4, (나) 4
    2. (가) 2, (나) 2
    3. (가) 4, (나) 2
    4. (가) 2, (나) 4
  27. 27. 다음 SQL의 실행 결과로 옳은 것은?

    [EMP]

    ENAME DEPTNO SAL
    A 10 300
    B 10 500
    C 20 400
    D 20 200
    E 30 500
    F 30 400
    SELECT ENAME
      FROM EMP
     WHERE (DEPTNO, SAL) IN (SELECT DEPTNO, MAX(SAL)
                               FROM EMP
                              GROUP BY DEPTNO)
     ORDER BY ENAME;
    1. B, E
    2. B, C, E, F
    3. C
    4. B, C, E
  28. 28. 서브쿼리에 대한 설명으로 가장 적절하지 않은 것은? (Oracle 기준)

    1. 스칼라 서브쿼리는 한 행 한 컬럼만 반환해야 하며, 결과가 없으면 NULL을 반환한다.
    2. WHERE 절 서브쿼리 안에서도 ORDER BY를 사용해 비교 대상의 순서를 정할 수 있다.
    3. 단일행 비교 연산자와 쓴 서브쿼리가 2행 이상을 반환하면 실행 시 오류가 발생한다.
    4. 인라인 뷰에서 정의한 컬럼이나 별칭은 메인 쿼리에서 참조할 수 있다.
  29. 29. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, 값의 순서는 고려하지 않는다)

    [A]

    X
    1
    2
    3

    [B]

    X
    2
    3
    4

    [C]

    X
    3
    5
    SELECT X FROM A
    UNION
    SELECT X FROM B
    MINUS
    SELECT X FROM C;
    1. 1, 2, 3, 4
    2. 1, 2
    3. 1, 2, 4
    4. 4
  30. 30. 다음 중 결과 집합이 다른 하나는? (Oracle 기준, 행의 순서는 고려하지 않는다)

    [A]

    X
    1
    2
    2
    3

    [B]

    X
    2
    3
    3
    4
    1. SELECT X FROM A INTERSECT SELECT X FROM B UNION SELECT X FROM B
    2. SELECT X FROM A UNION SELECT X FROM B
    3. SELECT DISTINCT X FROM (SELECT X FROM A UNION ALL SELECT X FROM B)
    4. SELECT X FROM A UNION SELECT X FROM B WHERE X > 3
  31. 31. 다음 SQL의 결과 건수는?

    [SALES]

    REGION CH AMT
    서울 온라인 10
    서울 매장 20
    부산 온라인 30
    부산 온라인 40
    대구 매장 50
    SELECT REGION, CH, SUM(AMT)
      FROM SALES
     GROUP BY GROUPING SETS (REGION, CH, ());
    1. 5건
    2. 6건
    3. 8건
    4. 10건
  32. 32. 다음 SQL의 결과 건수는?

    [EMP]

    DEPTNO JOB SAL
    10 CLERK 100
    10 MANAGER 200
    20 CLERK 150
    20 CLERK 250
    30 SALESMAN 300
    SELECT DEPTNO, JOB, SUM(SAL)
      FROM EMP
     GROUP BY DEPTNO, ROLLUP(JOB);
    1. 8건
    2. 5건
    3. 10건
    4. 7건
  33. 33. 다음 SQL에서 ENAME이 'B'인 행의 R, C, P 값으로 옳은 것은? (소수점 셋째 자리에서 반올림)

    [EMP]

    ENAME SAL
    A 500
    B 200
    C 200
    D 100
    SELECT ENAME,
           RATIO_TO_REPORT(SAL) OVER ()          AS R,
           CUME_DIST()          OVER (ORDER BY SAL) AS C,
           PERCENT_RANK()       OVER (ORDER BY SAL) AS P
      FROM EMP;
    1. R = 0.2, C = 0.75, P = 0.33
    2. R = 0.2, C = 0.5, P = 0.33
    3. R = 0.4, C = 0.75, P = 0.25
    4. R = 0.2, C = 0.75, P = 0.5
  34. 34. 다음 SQL의 실행 결과로 옳은 것은?

    [EMP]

    ENAME DEPTNO SAL
    A 10 100
    B 10 150
    C 20 300
    D 20 300
    E 20 600
    SELECT ENAME
      FROM (SELECT ENAME, SAL,
                   AVG(SAL) OVER (PARTITION BY DEPTNO) AS AVG_SAL
              FROM EMP)
     WHERE SAL > AVG_SAL
     ORDER BY ENAME;
    1. C, D, E
    2. E
    3. B, E
    4. B, C, D, E
  35. 35. 다음 SQL의 실행 결과에서 CNT 값을 SAL 오름차순으로 나열한 것으로 옳은 것은?

    [EMP]

    ENAME SAL
    A 100
    B 150
    C 200
    D 300
    E 350
    SELECT ENAME, SAL,
           COUNT(*) OVER (ORDER BY SAL
                          RANGE BETWEEN 100 PRECEDING AND CURRENT ROW) AS CNT
      FROM EMP
     ORDER BY SAL;
    1. 1, 2, 2, 2, 2
    2. 1, 2, 3, 3, 3
    3. 1, 2, 3, 2, 2
    4. 1, 2, 3, 4, 5
  36. 36. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 12c 이상 기준)

    [EMP]

    ENAME SAL
    A 500
    B 450
    C 400
    D 350
    E 300
    F 250
    G 200
    SELECT ENAME
      FROM EMP
     ORDER BY SAL DESC
    OFFSET 3 ROWS FETCH NEXT 3 ROWS ONLY;
    1. D, E, F
    2. C, D, E
    3. D, E, F, G
    4. E, F, G
  37. 37. 다음 SQL의 결과 건수는?

    [EMP]

    ENAME DEPTNO SAL
    A 10 300
    B 10 500
    C 10 400
    D 20 200
    E 20 600
    F 30 100
    SELECT DEPTNO, ENAME, SAL
      FROM (SELECT DEPTNO, ENAME, SAL,
                   ROW_NUMBER() OVER (PARTITION BY DEPTNO
                                      ORDER BY SAL DESC) AS RN
              FROM EMP)
     WHERE RN <= 2;
    1. 6건
    2. 5건
    3. 2건
    4. 4건
  38. 38. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, 출력 순서대로 표기)

    [ORG]

    ID NAME PID
    1 ROOT NULL
    2 SALES 1
    3 DEV 1
    4 WEB 3
    5 APP 3
    6 KR 2
    SELECT NAME
      FROM ORG
     START WITH PID IS NULL
    CONNECT BY PRIOR ID = PID
     ORDER SIBLINGS BY NAME;
    1. ROOT, DEV, SALES, APP, WEB, KR
    2. APP, DEV, KR, ROOT, SALES, WEB
    3. ROOT, SALES, KR, DEV, WEB, APP
    4. ROOT, DEV, APP, WEB, SALES, KR
  39. 39. 다음 SQL의 결과에 포함되는 행으로 옳은 것은? (Oracle 기준, ENAME | ROOT_NM | LEVEL 순서로 표기)

    [EMP]

    EMPNO ENAME MGR
    1 KING NULL
    2 JONES 1
    3 SCOTT 2
    4 BLAKE 1
    5 ALLEN 4
    6 WARD 4
    SELECT ENAME,
           CONNECT_BY_ROOT ENAME AS ROOT_NM,
           LEVEL
      FROM EMP
     START WITH MGR = 1
    CONNECT BY PRIOR EMPNO = MGR;
    1. WARD | BLAKE | 2
    2. SCOTT | KING | 3
    3. ALLEN | BLAKE | 3
    4. KING | KING | 1
  40. 40. 다음 SQL의 결과에 대한 설명으로 옳은 것은? (Oracle 기준)

    [ORDERS]

    CUST PROD QTY
    A 사과 2
    A 배 3
    B 사과 5
    A 사과 4
    C 배 1
    SELECT *
      FROM (SELECT CUST, PROD, QTY FROM ORDERS)
     PIVOT (SUM(QTY) FOR PROD IN ('사과' AS APPLE, '배' AS PEAR))
     ORDER BY CUST;
    1. 결과는 5행이며, CUST가 A인 행이 3개 존재한다.
    2. CUST가 B인 행의 PEAR 값은 0이다.
    3. CUST가 A인 행의 APPLE 값은 6이다.
    4. 결과 컬럼은 CUST, PROD, APPLE, PEAR 네 개다.
  41. 41. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, C1, C2 순서로 표기)

    SELECT REGEXP_COUNT('A1B22C333', '[[:digit:]]')  AS C1,
           REGEXP_COUNT('A1B22C333', '[[:digit:]]+') AS C2
      FROM DUAL;
    1. 3, 3
    2. 6, 6
    3. 6, 1
    4. 6, 3
  42. 42. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)

    SELECT REGEXP_INSTR('ab12cd345', '[0-9]+', 1, 2, 1) AS POS
      FROM DUAL;
    1. 7
    2. 10
    3. 9
    4. 5
  43. 43. 다음 두 테이블에 대해 아래 MERGE 문을 실행(Oracle)한 후 STOCK 테이블에 남아 있는 ITEM을 모두 고른 것은?

    STOCK

    ITEM QTY
    P1 10
    P2 5
    P3 8
    P4 0

    ADJUST

    ITEM DELTA
    P1 -4
    P2 -5
    P5 3
    MERGE INTO stock t
    USING adjust s
    ON (t.item = s.item)
    WHEN MATCHED THEN
      UPDATE SET t.qty = t.qty + s.delta
      DELETE WHERE t.qty = 0
    WHEN NOT MATCHED THEN
      INSERT (item, qty) VALUES (s.item, s.delta);
    1. P1, P3, P5
    2. P1, P2, P3, P4, P5
    3. P1, P3
    4. P1, P3, P4, P5
  44. 44. DML에 대한 설명으로 적절하지 않은 것은?

    1. INSERT ... SELECT 문은 입력 대상 테이블이 미리 존재해야 한다.
    2. Oracle에서는 INSERT ALL 구문으로 여러 행을 한 문장에 입력할 수 있다.
    3. 기본 설정의 SQL Server에서 BEGIN TRAN 없이 실행한 DELETE도 ROLLBACK으로 복구된다.
    4. UPDATE 문에서 WHERE 절을 생략하면 테이블의 모든 행이 수정 대상이 된다.
  45. 45. T 테이블에는 C 값이 10인 한 행이 커밋되어 있다. Oracle에서 아래 문장을 순서대로 실행한 후 SELECT c FROM t;의 결과는?

    UPDATE t SET c = 20;
    SAVEPOINT a;
    UPDATE t SET c = 30;
    SAVEPOINT a;
    UPDATE t SET c = 40;
    ROLLBACK TO a;
    COMMIT;
    1. 10
    2. 30
    3. 20
    4. 40
  46. 46. Oracle에서 트랜잭션의 COMMIT 전후 데이터 상태에 대한 설명으로 가장 적절한 것은?

    1. COMMIT 전에는 변경한 본인만 변경 값을 보고, 다른 사용자는 변경 전 값을 본다.
    2. COMMIT 전이라도 다른 사용자는 변경 중인 행을 자유롭게 수정할 수 있다.
    3. ROLLBACK을 실행해도 변경 중인 행에 걸린 잠금은 COMMIT 전까지 유지된다.
    4. 세션이 비정상 종료되면 진행 중이던 트랜잭션은 자동으로 COMMIT된다.
  47. 47. 제약조건에 대한 설명으로 적절하지 않은 것은? (Oracle)

    1. PRIMARY KEY는 테이블당 하나만 정의할 수 있으며 NULL을 허용하지 않는다.
    2. UNIQUE 제약조건이 정의된 컬럼에는 NULL을 입력할 수 없다.
    3. NOT NULL 제약조건은 컬럼 레벨에서 정의한다.
    4. FOREIGN KEY 컬럼에는 NULL을 입력할 수 있다.
  48. 48. EMP2 테이블에는 100건의 데이터가 있다. ENAME 컬럼은 VARCHAR2(20)이고 저장된 값 중 가장 긴 값은 15바이트이며, PHONE 컬럼에는 NULL인 행이 일부 존재한다. 또한 DEPT_CD 컬럼(VARCHAR2(3))에는 아직 DEFAULT가 정의되어 있지 않다. 다음 ALTER 문에 대한 설명으로 적절하지 않은 것은? (Oracle)

    1. ALTER TABLE emp2 MODIFY (ename VARCHAR2(30)); 은 정상 실행된다.
    2. ALTER TABLE emp2 MODIFY (ename VARCHAR2(10)); 은 오류가 발생한다.
    3. ALTER TABLE emp2 MODIFY (phone NOT NULL); 은 정상 실행되고 기존 NULL은 유지된다.
    4. ALTER TABLE emp2 MODIFY (dept_cd DEFAULT 'D01'); 은 이후 입력 행부터 적용된다.
  49. 49. 다음 DCL 문장 중 문법적으로 올바른 것은? (Oracle)

    1. GRANT SELECT, UPDATE ON scott.emp TO kim;
    2. GRANT SELECT ON scott.emp FROM kim;
    3. REVOKE SELECT ON scott.emp TO kim;
    4. GRANT CREATE TABLE ON scott TO kim WITH GRANT OPTION;
  50. 50. DBA가 아래 문장을 실행했지만 DEV1 사용자는 데이터베이스에 접속조차 할 수 없었다. DEV1이 접속할 수 있도록 하기 위해 실행해야 할 문장으로 가장 적절한 것은? (Oracle)

    CREATE USER dev1 IDENTIFIED BY pw1;
    GRANT CREATE TABLE TO dev1;
    1. GRANT RESOURCE TO dev1;
    2. GRANT SELECT ANY TABLE TO dev1;
    3. GRANT CREATE TABLE TO dev1 WITH ADMIN OPTION;
    4. GRANT CREATE SESSION TO dev1;

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