SQLD 모의고사 9회

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

  1. 1. 다음 중 데이터 모델링의 3요소와 관련 용어에 대한 설명으로 가장 적절하지 않은 것은?

    1. 데이터 모델링의 3요소는 엔터티(Things), 속성(Attributes), 관계(Relationships)이다.
    2. 엔터티 타입에 대응하는 개별 단위는 엔터티 인스턴스(어커런스)이다.
    3. 속성에 대응하는 개별 단위는 속성값이다.
    4. 관계에 대응하는 개별 단위는 도메인(Domain)이라고 부른다.
  2. 2. 엔터티는 원칙적으로 다른 엔터티와 최소 1개 이상의 관계를 가져야 하지만, 예외적으로 관계를 생략하기도 한다. 관계 생략이 허용되는 예외로 가장 적절하지 않은 것은?

    1. 월별 매출 집계처럼 통계 목적으로 만든 통계성 엔터티
    2. 다른 엔터티의 부모 역할을 하며 독립적으로 생성되는 기본 엔터티
    3. 공통코드처럼 여러 곳에서 참조용으로 쓰이는 코드성 엔터티
    4. 트랜잭션 로그처럼 시스템 처리를 위해 두는 내부 엔터티
  3. 3. 두 회사가 모두 고객의 주소를 관리하려 한다.

    • F 택배사: 시·구·동 단위로 배송 구역을 배정하고 구별 물동량을 집계한다.
    • G 쇼핑몰: 주소는 송장 출력에만 쓰며, 시·구·동 단위로 검색하거나 집계할 일이 없다.

    속성 정의에 대한 판단으로 가장 적절한 것은?

    1. F사는 시·구·동을 각각 별도 속성으로, G사는 주소를 하나의 속성으로 정의할 수 있다.
    2. 주소는 복합 속성이므로 업무와 관계없이 두 회사 모두 시·구·동으로 분리해야 한다.
    3. 주소는 항상 하나의 속성으로 정의해야 하므로 F사도 시·구·동으로 나누면 안 된다.
    4. F사의 시·구·동은 주소로부터 계산된 값이므로 파생 속성으로 정의해야 한다.
  4. 4. IE 표기법 ERD에서 고객과 주문 사이 관계선의 고객 쪽 끝은 막대 두 개(||), 주문 쪽 끝은 원과 까마귀 발(o{)로 표시되어 있다.

    이 관계를 물리 모델과 SQL로 옮길 때의 판단으로 가장 적절한 것은?

    1. 고객은 반드시 주문을 가지므로 고객별 주문 건수는 내부 조인만으로 모든 고객을 조회할 수 있다.
    2. 주문은 반드시 한 고객에 속하므로 주문 테이블의 고객번호 FK 컬럼에 NOT NULL을 지정할 수 있다.
    3. 주문 쪽 끝의 원(O) 기호는 주문이 고객 없이도 생성될 수 있음을 의미한다.
    4. 선택사양은 논리 모델에서만 의미가 있으므로 조인 방식을 판단하는 것과는 무관하다.
  5. 5. 수강 엔터티의 주식별자는 (학번, 과목코드)이다. 학번은 학생의, 과목코드는 과목의 주식별자를 식별 관계로 상속받은 것이며, 두 속성 모두 업무에서 실제 사용하는 값이다.

    수강 엔터티의 식별자에 대한 설명으로 가장 적절한 것은?

    1. 학번+과목코드는 하나의 의미로 구성된 단일식별자에 해당한다.
    2. 학번은 수강 엔터티 내부에서 스스로 생성된 내부식별자에 해당한다.
    3. 두 속성은 업무와 무관하게 인위적으로 만든 값이므로 인조식별자에 해당한다.
    4. 두 속성으로 구성된 복합식별자이며, 각 속성은 부모에게서 받아온 외부식별자이다.
  6. 6. 재고 테이블에 다음 데이터가 저장되어 있다.

    상품코드 창고 재고량 창고지역
    P1 W1 10 서울
    P1 W2 5 인천
    P2 W1 7 서울
    P3 W3 7 서울

    현재 데이터만으로 판단할 때, 반례가 존재하여 성립할 수 없는 함수 종속은?

    1. 창고 → 창고지역
    2. (상품코드, 창고) → 재고량
    3. (상품코드, 창고) → 창고지역
    4. 상품코드 → 창고
  7. 7. ORDERS는 개인고객(PERSON) 또는 법인고객(CORP) 중 하나와만 관계를 맺는 상호배타적(아크) 관계로 설계되었다.

    ORDERS

    ORD_NO PER_NO CORP_NO
    O1 P01 NULL
    O2 NULL B01
    O3 P02 NULL
    O4 NULL B02

    PERSON: (P01, 김하준), (P02, 이서아) CORP: (B01, 한빛상사), (B02, 누리테크)

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

    SELECT O.ORD_NO, NVL(P.PER_NM, B.CORP_NM) AS CUST_NM
      FROM ORDERS O
      LEFT OUTER JOIN PERSON P ON O.PER_NO  = P.PER_NO
      JOIN CORP B             ON O.CORP_NO = B.CORP_NO;
    1. 2건
    2. 4건
    3. 6건
    4. 8건
  8. 8. 출고 트랜잭션은 '재고 수량 차감(UPDATE) → 출고 이력 기록(INSERT)'으로 구성된다. 재고 테이블에는 CHECK (재고수량 >= 0) 제약이 있다. 요청 수량이 현재 재고보다 많아 차감 UPDATE가 제약 위반으로 실패하자 애플리케이션은 트랜잭션을 ROLLBACK하였고, 그 결과 트랜잭션 수행 전과 후 모두 데이터베이스가 정의된 무결성 제약을 만족하는 상태로 유지되었다.

    굵게 표시한 내용과 가장 관련 깊은 트랜잭션 특성은?

    1. 원자성(Atomicity)
    2. 일관성(Consistency)
    3. 고립성(Isolation)
    4. 지속성(Durability)
  9. 9. 모델링 관점에서 NULL 허용 설계에 대한 설명으로 가장 적절하지 않은 것은?

    1. 업무상 반드시 값이 있어야 하는 속성은 NOT NULL 제약으로 선언한다.
    2. 특정 유형의 행에만 값이 있어 NULL이 많은 속성들은 서브타입 분리를 검토한다.
    3. Oracle B-Tree 인덱스는 NULL도 정렬하여 저장하므로 단일 컬럼 인덱스로 IS NULL 조건을 효율적으로 처리한다.
    4. FK 컬럼이 NULL인 행은 INNER JOIN 결과에서 빠지므로 관계의 선택성을 모델에서 분명히 정의한다.
  10. 10. 본질식별자와 인조식별자의 사용 원칙에 대한 설명으로 가장 적절한 것은?

    1. 인조식별자는 조인이 단순해지므로 모든 엔터티에 먼저 적용하고, 필요할 때만 본질식별자를 검토한다.
    2. 인조식별자는 업무 의미가 없으므로 일반적으로 화면이나 보고서에 노출하지 않는다.
    3. 인조식별자는 업무 규칙을 담아야 하므로 반드시 '지점코드+연도'처럼 업무 코드를 포함해 만든다.
    4. 본질식별자는 대부분 단일 속성으로, 인조식별자는 대부분 복합 속성으로 구성된다.
  11. 11. '한 학생은 여러 과목을 수강하고, 한 과목은 여러 학생이 수강한다'는 요구사항을 관계형 데이터베이스로 설계하려 한다. 가장 적절한 방법은?

    1. 학생 테이블에 과목코드 컬럼을 두고 한 칸에 여러 과목코드를 콤마로 나열해 저장한다.
    2. 과목 테이블에 학번 컬럼을 외래키로 추가하여 수강 학생을 기록한다.
    3. 학번과 과목코드를 외래키로 갖는 수강 테이블을 두어 두 개의 1:N 관계로 분해한다.
    4. 학생 테이블과 과목 테이블을 하나로 합쳐 가능한 모든 조합을 저장한다.
  12. 12. 다음 [T] 테이블에 SQL을 실행했을 때 결과 행 수는? (Oracle, CODE는 VARCHAR2 타입이며 표의 '·'는 저장된 공백 한 칸을 의미한다.)

    [T]

    ID CODE
    1 a
    2 A
    3 b
    4 NULL
    5 B·
    6 NULL
    SELECT DISTINCT UPPER(CODE)
    FROM   T;
    1. 1행
    2. 2행
    3. 3행
    4. 4행
  13. 13. 다음 중 Oracle(19c 기준)에서 실행 시 오류가 발생하지 않는 SQL은? (EMP 테이블에는 ENAME 컬럼이 있다.)

    1. SELECT 1 + 1;
    2. SELECT E.ENAME FROM EMP AS E;
    3. SELECT ENAME "Emp Name" FROM EMP;
    4. SELECT 'A' + 'B' FROM DUAL;
  14. 14. 다음 SQL의 실행 결과로 옳은 것은? (Oracle)

    SELECT SUBSTR('ORACLE', 3)    AS A,
           SUBSTR('ORACLE', 0, 2) AS B,
           SUBSTR('ORACLE', -3)   AS C,
           SUBSTR('ORACLE', 7)    AS D
    FROM   DUAL;
    1. ACLE, OR, CLE, NULL
    2. ACLE, NULL, CLE, E
    3. RACLE, OR, ACL, NULL
    4. ACLE, O, CLE, NULL
  15. 15. SYSDATE가 2025-12-31 23:00:00일 때 다음 SQL의 실행 결과로 옳은 것은? (Oracle)

    SELECT TO_CHAR(SYSDATE + 2/24, 'YYYY-MM-DD HH24') AS A,
           TO_CHAR(ADD_MONTHS(SYSDATE, 2), 'MM-DD')   AS B,
           TO_CHAR(SYSDATE - 1, 'DD')                 AS C
    FROM   DUAL;
    1. 2026-01-01 01, 03-03, 30
    2. 2026-01-01 01, 02-28, 30
    3. 2025-12-31 25, 02-28, 30
    4. 2026-01-01 01, 02-28, 31
  16. 16. Oracle 함수와 같은 역할을 하는 SQL Server 함수(연산자)를 짝지은 것으로 적절하지 않은 것은?

    1. DECODE – DECODE
    2. NVL – ISNULL
    3. SYSDATE – GETDATE()
    4. SUBSTR – SUBSTRING
  17. 17. 다음 [PRODUCT] 테이블에 SQL을 실행했을 때 결과 값은? (Oracle, CODE는 VARCHAR2 타입)

    [PRODUCT]

    ID CODE
    1 10
    2 9
    3 50
    4 5
    5 100
    6 NULL
    SELECT COUNT(*)
    FROM   PRODUCT
    WHERE  CODE > '5';
    1. 1
    2. 2
    3. 3
    4. 4
  18. 18. NULL이 포함된 비교와 논리 연산에 대한 설명으로 적절하지 않은 것은?

    1. NULL = NULL의 결과는 TRUE가 아니라 UNKNOWN이다.
    2. UNKNOWN AND FALSE의 결과는 FALSE다.
    3. UNKNOWN OR TRUE의 결과는 TRUE다.
    4. NOT UNKNOWN은 TRUE이므로 WHERE NOT (COMM = 100)은 COMM이 NULL인 행도 반환한다.
  19. 19. 다음 [ENROLL] 테이블에 SQL을 실행한 결과로 옳은 것은? (문자는 가나다순으로 정렬된다.)

    [ENROLL]

    SID DEPT GRD CREDIT
    1 컴공 1 3
    2 컴공 1 2
    3 컴공 2 3
    4 경영 1 3
    5 경영 2 1
    6 경영 2 3
    7 컴공 2 NULL
    SELECT DEPT, GRD, SUM(CREDIT)
    FROM   ENROLL
    GROUP  BY DEPT, GRD
    HAVING COUNT(CREDIT) >= 2
    ORDER  BY DEPT, GRD;
    1. 경영, 2, 4 / 컴공, 1, 5
    2. 경영, 2, 4 / 컴공, 1, 5 / 컴공, 2, 3
    3. 컴공, 1, 5 / 경영, 2, 4
    4. 경영, 2, 4
  20. 20. 다음 [EMP] 테이블에 SQL을 실행한 결과로 옳은 것은?

    [EMP]

    ENAME DEPTNO COMM
    A 10 100
    B 10 NULL
    C 20 0
    D 20 50
    E 30 NULL
    F 30 NULL
    G 40 200
    SELECT DEPTNO, COUNT(*) - COUNT(COMM) AS N
    FROM   EMP
    GROUP  BY DEPTNO
    HAVING COUNT(*) <> COUNT(COMM)
    ORDER  BY DEPTNO;
    1. 10, 1 / 20, 1 / 30, 2
    2. 30, 2
    3. 10, 1 / 30, 2
    4. 10, 1 / 30, 0
  21. 21. 다음 [EMP] 테이블에 SQL을 실행한 결과의 출력 순서로 옳은 것은? (Oracle, 이름은 가나다순으로 정렬된다.)

    [EMP]

    ENAME SAL BONUS
    가 300 NULL
    나 250 100
    다 400 0
    라 200 150
    마 350 NULL
    SELECT ENAME
    FROM   EMP
    ORDER  BY SAL + NVL(BONUS, 0) DESC, ENAME;
    1. 가, 마, 다, 나, 라
    2. 다, 마, 가, 나, 라
    3. 가, 나, 라, 마, 다
    4. 다, 나, 라, 마, 가
  22. 22. 다음 [TASK] 테이블에 SQL을 실행한 결과의 출력 순서로 옳은 것은? (Oracle, DUE_DT는 DATE 타입이다.)

    [TASK]

    TID PRIORITY DUE_DT
    1 2 2024-05-10
    2 NULL 2024-05-01
    3 1 NULL
    4 2 2024-04-30
    5 1 2024-05-03
    6 NULL NULL
    SELECT TID
    FROM   TASK
    ORDER  BY PRIORITY DESC NULLS LAST, DUE_DT;
    1. 2, 6, 4, 1, 5, 3
    2. 4, 1, 5, 3, 2, 6
    3. 4, 1, 3, 5, 2, 6
    4. 1, 4, 3, 5, 6, 2
  23. 23. 다음 [EMP], [DEPT] 테이블에 SQL을 실행한 결과로 옳은 것은?

    [EMP]

    ENAME DEPTNO
    김 10
    이 NULL
    박 30
    정 10
    최 50

    [DEPT]

    DEPTNO DNAME
    10 총무
    20 기술
    30 품질
    SELECT COUNT(*), COUNT(D.DNAME)
    FROM   EMP E, DEPT D
    WHERE  E.DEPTNO = D.DEPTNO(+);
    1. 3, 3
    2. 4, 3
    3. 5, 5
    4. 5, 3
  24. 24. 다음 [PLAYER] 테이블에 SQL을 실행한 결과로 옳은 것은? (이름은 가나다순으로 정렬된다.)

    [PLAYER]

    PNAME SCORE
    가 90
    나 75
    다 90
    라 60
    SELECT A.PNAME, COUNT(*) AS CNT
    FROM   PLAYER A, PLAYER B
    WHERE  A.SCORE < B.SCORE
    GROUP  BY A.PNAME
    ORDER  BY A.PNAME;
    1. 가, 0 / 나, 2 / 다, 0 / 라, 3
    2. 나, 2 / 라, 3
    3. 나, 1 / 라, 2
    4. 가, 0 / 나, 2 / 라, 3
  25. 25. 다음 [T1], [T2] 테이블에 SQL을 실행했을 때, 출력되는 ID 컬럼 값을 순서대로 나열한 것은? (Oracle)

    [T1]

    ID A
    1 p
    2 q
    3 r

    [T2]

    ID B
    2 s
    4 t
    5 u
    SELECT ID, A, B
    FROM   T1 FULL OUTER JOIN T2 USING (ID)
    ORDER  BY ID;
    1. 1, 2, 3, 4, 5
    2. 1, 2, 3, NULL, NULL
    3. 2, 4, 5, NULL, NULL
    4. 1, 2, 2, 3, 4, 5
  26. 26. 다음 [EMP] 테이블에 SQL을 실행했을 때 결과 건수와 CNT가 0인 행의 수로 옳은 것은? (MGR은 관리자의 EMPNO이다.)

    [EMP]

    EMPNO ENAME MGR
    1 한 NULL
    2 강 1
    3 조 1
    4 윤 3
    5 장 3
    6 임 3
    SELECT M.ENAME, COUNT(E.EMPNO) AS CNT
    FROM   EMP M LEFT OUTER JOIN EMP E
           ON E.MGR = M.EMPNO
    GROUP  BY M.ENAME;
    1. 2행 / 0행
    2. 6행 / 0행
    3. 6행 / 4행
    4. 6행 / 3행
  27. 27. 다음 SQL의 실행 결과로 옳은 것은?

    [STUDENT]

    SID SNAME
    1 가
    2 나
    3 다
    4 라

    [SCORE]

    SID SUBJ PT
    1 국어 80
    1 수학 55
    2 국어 70
    2 수학 90
    3 국어 40
    SELECT T.SNAME
      FROM STUDENT T
     WHERE NOT EXISTS (SELECT 1
                         FROM SCORE S
                        WHERE S.SID = T.SID
                          AND S.PT < 60)
     ORDER BY T.SID;
    1. 나
    2. 가, 다
    3. 나, 라
    4. 가, 나, 다, 라
  28. 28. 뷰(VIEW)에 대한 설명으로 가장 적절하지 않은 것은?

    1. 복잡한 조인·집계 쿼리를 단순한 이름으로 재사용할 수 있다.
    2. 이미 만든 뷰를 기반으로 또 다른 뷰를 생성할 수 있다.
    3. Oracle에서 뷰 정의를 바꾸려면 CREATE OR REPLACE VIEW를 사용한다.
    4. 일반 뷰는 생성 시점의 조회 결과를 별도 저장 공간에 실제로 저장한다.
  29. 29. 다음 SQL의 실행 결과로 옳은 것은? (행의 순서는 고려하지 않는다)

    [A]

    C1 C2
    1 NULL
    1 a
    2 NULL
    2 NULL

    [B]

    C1 C2
    1 NULL
    2 a
    SELECT C1, C2 FROM A
    MINUS
    SELECT C1, C2 FROM B;
    1. (1, a), (2, NULL)
    2. (1, a)
    3. (1, a), (2, NULL), (2, NULL)
    4. (1, NULL), (1, a), (2, NULL)
  30. 30. 다음 SQL의 결과 건수는?

    [DOMESTIC]

    CITY
    서울
    부산
    서울

    [OVERSEAS]

    CITY
    도쿄
    서울
    SELECT '국내' AS GB, CITY FROM DOMESTIC
    UNION
    SELECT '해외', CITY FROM OVERSEAS;
    1. 3행
    2. 4행
    3. 5행
    4. 2행
  31. 31. 다음 SQL의 결과 건수는?

    [SALES]

    REGION AMT
    서울 10
    서울 30
    부산 50
    대구 20
    대구 25
    SELECT REGION, SUM(AMT)
      FROM SALES
     GROUP BY ROLLUP(REGION)
    HAVING SUM(AMT) >= 50;
    1. 1행
    2. 3행
    3. 4행
    4. 2행
  32. 32. 그룹 함수(ROLLUP, CUBE, GROUPING SETS)에 대한 설명으로 가장 적절하지 않은 것은?

    1. SQL Server는 GROUP BY DEPTNO, JOB WITH ROLLUP 형식도 지원한다.
    2. ROLLUP은 인수의 순서가 바뀌면 결과가 달라질 수 있다.
    3. GROUPING SETS를 쓰면 나열한 그룹 외에 전체 합계 행이 자동으로 추가된다.
    4. 그룹 함수 결과의 출력 순서를 보장하려면 ORDER BY를 사용해야 한다.
  33. 33. 다음 SQL의 실행 결과에서 RK 값을 ENAME 순서(A~F)대로 나열한 것으로 옳은 것은?

    [EMP]

    ENAME DEPTNO
    A 10
    B 10
    C 20
    D 30
    E 30
    F 30
    SELECT ENAME,
           RANK() OVER (ORDER BY DEPTNO DESC) AS RK
      FROM EMP
     ORDER BY ENAME;
    1. 5, 5, 4, 1, 1, 1
    2. 3, 3, 2, 1, 1, 1
    3. 1, 1, 3, 4, 4, 4
    4. 5, 6, 4, 1, 2, 3
  34. 34. 다음 SQL의 실행 결과에서 BAL 값을 출력 순서대로 나열한 것으로 옳은 것은?

    [ACC_TXN]

    ACC SEQ AMT
    A 1 100
    A 2 -30
    A 3 50
    B 1 200
    B 2 -50
    SELECT ACC, SEQ,
           SUM(AMT) OVER (PARTITION BY ACC ORDER BY SEQ
                          ROWS UNBOUNDED PRECEDING) AS BAL
      FROM ACC_TXN
     ORDER BY ACC, SEQ;
    1. 100, 70, 120, 320, 270
    2. 100, 70, 120, 200, 150
    3. 120, 120, 120, 150, 150
    4. 100, -30, 50, 200, -50
  35. 35. 다음 SQL의 실행 결과에서 R 값을 표의 행 순서대로 나열한 것으로 옳은 것은? (Oracle 기준, 소수점 셋째 자리에서 반올림)

    [STOCK]

    CAT ITEM QTY
    과일 사과 30
    과일 배 10
    채소 무 20
    채소 파 20
    채소 양파 40
    SELECT CAT, ITEM,
           RATIO_TO_REPORT(QTY) OVER (PARTITION BY CAT) AS R
      FROM STOCK;
    1. 0.75, 0.25, 0.25, 0.25, 0.5
    2. 0.25, 0.08, 0.17, 0.17, 0.33
    3. 1, 0.33, 0.5, 0.5, 1
    4. 0.75, 1, 0.25, 0.5, 1
  36. 36. SQL Server에서 실행했을 때 오류가 발생하는 SQL은?

    1. SELECT TOP (3) ENAME FROM EMP ORDER BY SAL DESC;
    2. SELECT ENAME FROM EMP ORDER BY SAL DESC FETCH FIRST 3 ROWS ONLY;
    3. SELECT ENAME FROM EMP ORDER BY SAL DESC OFFSET 2 ROWS;
    4. SELECT TOP (50) PERCENT ENAME FROM EMP ORDER BY SAL DESC;
  37. 37. 게시판을 한 페이지에 3건씩, 최근 등록일 순으로 보여줄 때 2페이지를 조회하는 SQL이다. 실행 결과의 ID로 옳은 것은? (출력 순서대로 표기)

    [NOTICE]

    ID REG_DT
    1 2025-01-05
    2 2025-01-02
    3 2025-01-09
    4 2025-01-01
    5 2025-01-07
    6 2025-01-03
    7 2025-01-08
    SELECT ID
      FROM (SELECT ID,
                   ROW_NUMBER() OVER (ORDER BY REG_DT DESC) AS RN
              FROM NOTICE)
     WHERE RN BETWEEN 4 AND 6
     ORDER BY RN;
    1. 1, 6, 2
    2. 4, 5, 6
    3. 5, 1, 6
    4. 6, 2, 4
  38. 38. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, (RT, CNT)를 출력 순서대로 표기)

    [EMP]

    EMPNO ENAME MGR
    1 KIM NULL
    2 LEE 1
    3 PARK 2
    4 HAN NULL
    5 YOON 4
    6 SEO 4
    7 OH 1
    8 BAE 4
    SELECT RT, COUNT(*) AS CNT
      FROM (SELECT CONNECT_BY_ROOT ENAME AS RT
              FROM EMP
             WHERE CONNECT_BY_ISLEAF = 1
             START WITH MGR IS NULL
            CONNECT BY PRIOR EMPNO = MGR)
     GROUP BY RT
     ORDER BY RT;
    1. (KIM,2), (HAN,3)
    2. (HAN,4), (KIM,4)
    3. (HAN,3), (KIM,3)
    4. (HAN,3), (KIM,2)
  39. 39. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, (LV, CNT)를 출력 순서대로 표기)

    [EMP]

    EMPNO ENAME MGR
    1 A NULL
    2 B 1
    3 C 1
    4 D 2
    5 E 2
    6 F 3
    7 G 5
    SELECT LEVEL AS LV, COUNT(*) AS CNT
      FROM EMP
     START WITH MGR IS NULL
    CONNECT BY PRIOR EMPNO = MGR
     GROUP BY LEVEL
     ORDER BY LEVEL;
    1. (1,1), (2,2), (3,4)
    2. (1,1), (2,3), (3,2), (4,1)
    3. (1,1), (2,2), (3,3), (4,1)
    4. (1,1), (2,2), (3,2), (4,2)
  40. 40. Oracle의 PIVOT, UNPIVOT 절에 대한 설명으로 옳지 않은 것은?

    1. PIVOT의 IN 절에는 열로 만들 값을 상수로 직접 나열해야 하며, XML 형식이 아니면 서브쿼리를 쓸 수 없다.
    2. PIVOT은 집계 대상 컬럼과 FOR 컬럼을 제외한 나머지 컬럼을 기준으로 암시적인 GROUP BY를 수행한다.
    3. UNPIVOT은 별도 지정이 없으면 EXCLUDE NULLS로 동작하여 값이 NULL인 열은 행으로 만들지 않는다.
    4. UNPIVOT은 PIVOT의 역연산이므로, PIVOT으로 집계한 결과를 UNPIVOT하면 항상 원래 테이블의 행이 그대로 복원된다.
  41. 41. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, C1, C2 순서로 표기)

    SELECT REGEXP_COUNT('abababa', 'aba')  AS C1,
           REGEXP_COUNT('abababa', '(ab)+') AS C2
      FROM DUAL;
    1. 3, 1
    2. 3, 3
    3. 2, 1
    4. 2, 3
  42. 42. 다음 SQL의 결과 건수는? (Oracle 기준)

    [MEMBER]

    EMAIL
    kim@a.com
    lee.b@c.kr
    park@d
    choi@@e.com
    jung@f.co.kr
    SELECT EMAIL
      FROM MEMBER
     WHERE REGEXP_LIKE(EMAIL, '^[a-z.]+@[a-z]+(\.[a-z]+)+$');
    1. 3
    2. 4
    3. 2
    4. 5
  43. 43. PRODUCT 테이블에 대해 아래 UPDATE 문을 실행(Oracle)한 후 SELECT SUM(price) FROM product;의 결과는?

    PRODUCT

    PID CAT PRICE
    1 A 100
    2 A 300
    3 B 200
    4 B NULL
    5 C 50
    UPDATE product p
       SET price = (SELECT AVG(x.price)
                      FROM product x
                     WHERE x.cat = p.cat)
     WHERE p.price IS NULL
        OR p.price < 150;
    1. 650
    2. 850
    3. 950
    4. 1050
  44. 44. VISIT 테이블에는 ('kim', 3) 한 행만 있다. 아래 MERGE 문(Oracle)을 바인드 변수 :p_id에 'lee', 'lee', 'kim'을 차례로 넣어 세 번 실행한 후 VISIT 테이블의 데이터로 옳은 것은? (USER_ID, CNT 순)

    MERGE INTO visit t
    USING (SELECT :p_id AS user_id FROM dual) s
    ON (t.user_id = s.user_id)
    WHEN MATCHED THEN
      UPDATE SET t.cnt = t.cnt + 1
    WHEN NOT MATCHED THEN
      INSERT (user_id, cnt) VALUES (s.user_id, 1);
    1. ('kim', 3), ('lee', 1)
    2. ('kim', 4), ('lee', 1)
    3. ('kim', 4), ('lee', 1), ('lee', 1)
    4. ('kim', 4), ('lee', 2)
  45. 45. T 테이블에는 (ID, VAL) = (1, 100)인 한 행이 커밋되어 있다. Oracle에서 아래 문장을 순서대로 실행한 후 SELECT val FROM t;의 결과는?

    UPDATE t SET val = val + 10;
    SAVEPOINT a;
    UPDATE t SET val = val * 2;
    SAVEPOINT b;
    UPDATE t SET val = val - 20;
    ROLLBACK TO a;
    UPDATE t SET val = val + 5;
    SAVEPOINT b;
    UPDATE t SET val = 0;
    ROLLBACK TO b;
    COMMIT;
    1. 115
    2. 225
    3. 110
    4. 205
  46. 46. Oracle과 SQL Server의 트랜잭션 제어 방식을 짝지은 것으로 올바르지 않은 것은?

    1. 저장점 생성 – Oracle: SAVEPOINT sp1; / SQL Server: SAVE TRAN sp1;
    2. 저장점까지 롤백 – Oracle: ROLLBACK TRAN sp1; / SQL Server: ROLLBACK TO sp1;
    3. 트랜잭션 시작 – Oracle: 첫 DML 실행 시 자동 시작 / SQL Server: BEGIN TRAN으로 명시
    4. 트랜잭션 확정 – Oracle: COMMIT; / SQL Server: COMMIT TRAN;
  47. 47. MEMBER 테이블(ID, NAME)에는 3건의 데이터가 커밋되어 있다. Oracle에서 아래 문장을 순서대로 실행한 후 SELECT COUNT(grade), SUM(point) FROM member;의 결과는?

    ALTER TABLE member ADD (grade CHAR(1) DEFAULT 'B');
    ALTER TABLE member ADD (point NUMBER);
    ALTER TABLE member MODIFY (point DEFAULT 100);
    INSERT INTO member (id, name) VALUES (4, 'D');
    1. 1, 100
    2. 4, 400
    3. 4, 100
    4. 1, 400
  48. 48. SQL Server에서 EMP 테이블에 대해 실행할 때 오류 없이 수행되는 문장은?

    1. ALTER TABLE emp ADD phone VARCHAR(20);
    2. ALTER TABLE emp ADD COLUMN phone VARCHAR(20);
    3. ALTER TABLE emp MODIFY (phone VARCHAR(30));
    4. ALTER TABLE emp DROP (phone);
  49. 49. SCOTT가 아래 DCL을 실행했다. 이후 KIM이 실행한 문장 중 오류가 발생하는 것은? (Oracle)

    -- SCOTT 실행
    GRANT ALL ON scott.dept TO kim;
    REVOKE DELETE, UPDATE ON scott.dept FROM kim;
    1. SELECT * FROM scott.dept;
    2. INSERT INTO scott.dept VALUES (50, 'HR', 'SEOUL');
    3. SELECT dname FROM scott.dept WHERE deptno = 10;
    4. UPDATE scott.dept SET loc = 'BUSAN' WHERE deptno = 10;
  50. 50. 사용자와 계정 생성에 대한 설명으로 가장 적절한 것은?

    1. SQL Server는 CREATE USER만 실행하면 서버 접속과 데이터베이스 사용이 모두 가능하다.
    2. SQL Server는 서버 접속용 로그인(LOGIN)과 데이터베이스 사용용 사용자(USER)를 구분한다.
    3. Oracle에서 CREATE USER로 사용자를 만들면 CREATE SESSION 권한이 자동으로 부여된다.
    4. Oracle에서는 테이블을 소유한 사용자라면 누구나 새 사용자를 생성할 수 있다.

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