SQLD 모의고사 5회

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

  1. 1. C사 모델링팀은 업무 프로세스(회원가입, 주문접수, 배송처리 등)를 행으로, 엔터티(회원, 주문, 상품 등)를 열로 놓고 각 칸에 C·R·U·D를 표기하였다. 이를 통해 업무 처리 방법에 따라 데이터가 어떤 영향을 받는지 분석하였다.

    이 분석이 해당하는 데이터 모델링의 관점과 분석 방법으로 가장 적절한 것은?

    1. 데이터 관점 - 정적 분석, 구조 분석
    2. 프로세스 관점 - 시나리오 분석, 동적 분석
    3. 물리적 관점 - 저장 구조 분석
    4. 상관 관점 - CRUD 매트릭스 분석
  2. 2. 다음 중 엔터티와 인스턴스에 대한 설명으로 가장 적절하지 않은 것은?

    1. 인스턴스는 엔터티에 속한 개별 대상으로, 어커런스(Occurrence)라고도 부른다.
    2. 엔터티는 물리 모델에서 보통 테이블로, 인스턴스는 행(Row)으로 구현된다.
    3. 엔터티는 인스턴스의 집합이므로 '사원들'처럼 복수형 명사로 이름을 짓는다.
    4. 엔터티 이름은 '고객제품'보다 '계약'처럼 생성되는 업무 의미가 드러나게 짓는다.
  3. 3. 회원 엔터티에 다음 정보를 관리하려 한다.

    • 회원번호: 가입 시 부여하는 번호
    • 주소: 시·구·동·상세주소로 나누어 볼 수 있음
    • 연락처: 한 회원이 집·휴대폰·회사 번호를 여러 개 등록할 수 있음

    속성의 분류와 처리에 대한 설명으로 가장 적절한 것은?

    1. 연락처는 다중값 속성이므로 별도 엔터티로 분리하여 1:M 관계로 표현하는 것이 원칙이다.
    2. 주소는 여러 하위 속성으로 분해될 수 있으므로 다중값 속성에 해당한다.
    3. 회원번호는 여러 의미 있는 하위 속성으로 분해되므로 복합 속성에 해당한다.
    4. 다중값 속성은 하나의 인스턴스에서 하나의 값만 가지는 속성을 의미한다.
  4. 4. 도서관 시스템에서 회원과 대출 엔터티 사이의 관계에 관계명을 붙이려 한다.

    (회원 기준 관계명 / 대출 기준 관계명)의 쌍으로 가장 적절한 것은?

    1. 관련이 있다 / 관련된다
    2. 대출을 신청했다 / 신청되었다
    3. 신청한다 / 신청된다
    4. 이다 / 한다
  5. 5. 주문상품 엔터티의 본래 식별자는 (주문번호, 상품코드)였다. 설계자는 SQL을 단순하게 하려고 '주문상품일련번호'를 새로 만들어 단독 주식별자로 지정하고, (주문번호, 상품코드)에는 별도 제약을 두지 않았다. 운영 중 같은 주문번호·상품코드 조합의 행이 2건 저장된 사례가 발견되었다.

    이 상황에 대한 설명으로 가장 적절한 것은?

    1. 주문상품일련번호는 업무에 의해 자연스럽게 만들어진 본질식별자에 해당한다.
    2. 주문상품일련번호가 주식별자이므로 이런 조합의 중복은 원천적으로 발생할 수 없다.
    3. 인조식별자는 주식별자가 될 수 없으므로 보조식별자로 지정했어야 한다.
    4. 본질식별자의 유일성 보장이 사라져 생긴 문제로, 막으려면 별도 유니크 인덱스가 필요하다.
  6. 6. 다음 사원 테이블의 PK는 사번이며, 부서위치는 부서코드에 의해 결정된다.

    사번 이름 부서코드 부서위치
    E01 강도윤 D10 서울
    E02 문채원 D20 부산
    E03 백시우 D10 서울

    E02 사원이 퇴사하여 해당 행을 삭제하자, D20 부서가 부산에 있다는 정보까지 함께 사라졌다. 이 현상의 이름과 이를 해결하기 위한 정규화 단계의 연결로 가장 적절한 것은?

    1. 갱신 이상 - 제2정규형
    2. 삽입 이상 - 제3정규형
    3. 삭제 이상 - 제2정규형
    4. 삭제 이상 - 제3정규형
  7. 7. EMP 테이블의 MGR_NO는 같은 테이블의 EMP_NO를 참조한다.

    EMP_NO EMP_NM MGR_NO
    E1 한대표 NULL
    E2 오부장 E1
    E3 진부장 E1
    E4 류과장 E2
    E5 남대리 E4
    E6 표대리 E2

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

    SELECT M.EMP_NM AS MGR_NM, COUNT(*) AS CNT
      FROM EMP E
      JOIN EMP M
        ON E.MGR_NO = M.EMP_NO
     GROUP BY M.EMP_NM;
    1. 3건
    2. 4건
    3. 5건
    4. 6건
  8. 8. 주문과 주문상세는 IE 표기법으로 주문 ||--|{ 주문상세와 같이 양쪽 모두 필수 관계로 모델링되어 있다. 주문 O7에는 주문상세가 1건만 있는데, 고객이 그 품목을 취소하여 주문 전체가 무효가 되었다.

    이를 처리하는 방법으로 가장 적절한 것은?

    1. 주문상세만 삭제하고 COMMIT한다. 주문은 상세가 없어도 존재할 수 있으므로 그대로 둔다.
    2. 마지막 주문상세를 삭제할 때 주문도 함께 삭제하여 하나의 트랜잭션으로 COMMIT한다.
    3. 주문을 먼저 삭제하여 COMMIT한 뒤, 다음 트랜잭션에서 남은 주문상세를 삭제한다.
    4. 주문상세는 그대로 두고 주문의 고객번호만 NULL로 바꾸어 관계를 끊은 뒤 COMMIT한다.
  9. 9. 테이블 T의 데이터가 다음과 같을 때, SQL의 결과로 옳은 것은? (결과는 C1 / C2 / C3 순서)

    ID A B
    1 10 5
    2 20 NULL
    3 NULL 7
    4 30 3
    SELECT SUM(A + B)          AS C1,
           SUM(A) + SUM(B)     AS C2,
           COUNT(A + B)        AS C3
      FROM T;
    1. 75 / 75 / 4
    2. 48 / 48 / 2
    3. 48 / 75 / 2
    4. 75 / 48 / 4
  10. 10. 식별자를 분류하는 기준과 그 기준에 따른 식별자 유형의 연결로 가장 적절한 것은?

    1. 대표성 여부 - 본질식별자 / 인조식별자
    2. 업무에 의해 만들어지는지 여부 - 본질식별자 / 인조식별자
    3. 스스로 생성되는지 여부 - 단일식별자 / 복합식별자
    4. 구성하는 속성의 수 - 주식별자 / 보조식별자
  11. 11. 테이블 간 관계(ERD)에 대한 설명으로 적절하지 않은 것은?

    1. 1:1 관계는 한 행이 상대 테이블의 최대 한 행과 대응하는 관계다.
    2. M:N 관계는 물리 모델에서 교차 테이블을 두어 두 개의 1:N 관계로 분해한다.
    3. 외래키 컬럼은 NOT NULL 제약이 없다면 NULL 값을 가질 수 있다.
    4. 부서(1)–사원(N) 관계에서 외래키는 1쪽인 부서 테이블에 둔다.
  12. 12. EMP 테이블에 테이블 별칭 E를 지정하여 조회하려 한다. Oracle에서 실행 시 오류가 발생하는 SQL은?

    1. SELECT E.ENAME, E.SAL FROM EMP E;
    2. SELECT ENAME, SAL FROM EMP E;
    3. SELECT EMP.ENAME, SAL FROM EMP E;
    4. SELECT E.* FROM EMP E;
  13. 13. Oracle의 DUAL 테이블에 대한 설명으로 적절하지 않은 것은?

    1. 사용자가 DUAL 테이블을 직접 생성해야 함수 결과 확인 용도로 사용할 수 있다.
    2. DUMMY라는 컬럼 하나에 'X' 값을 가진 1행 1열 테이블이다.
    3. SYS 소유의 테이블이지만 모든 사용자가 접근할 수 있다.
    4. Oracle은 FROM 절이 필수이므로 테이블과 무관한 계산을 할 때 사용한다.
  14. 14. 다음 SQL의 실행 결과로 옳은 것은? (Oracle)

    SELECT TRIM(LEADING '0' FROM '000120') AS A,
           TRIM('x' FROM 'xxAxBxx')        AS B,
           LENGTH(RTRIM('  AB  '))         AS C
    FROM   DUAL;
    1. 12, AB, 2
    2. 120, AxB, 4
    3. 120, AB, 4
    4. 120, AxB, 2
  15. 15. 다음 [SCORE] 테이블에 SQL을 실행했을 때 GRADE 값을 ID 순서대로 나열한 것으로 옳은 것은?

    [SCORE]

    ID PT
    1 95
    2 85
    3 NULL
    4 70
    5 60
    SELECT ID,
           CASE WHEN PT >= 70 THEN 'B'
                WHEN PT >= 90 THEN 'A'
                ELSE 'C'
           END AS GRADE
    FROM   SCORE
    ORDER  BY ID;
    1. A, B, C, B, C
    2. A, B, NULL, B, C
    3. B, B, NULL, B, C
    4. B, B, C, B, C
  16. 16. Oracle에서 PRODUCT 테이블의 CODE 컬럼은 VARCHAR2(10) 타입이며 CODE에 인덱스가 생성되어 있다. 다음 SQL에 대한 설명으로 가장 적절한 것은?

    SELECT *
    FROM   PRODUCT
    WHERE  CODE = 100;
    1. CODE 컬럼 쪽이 숫자로 암시적 변환되므로, 숫자로 바꿀 수 없는 CODE 값이 있으면 오류가 발생할 수 있다.
    2. 숫자 100이 문자 '100'으로 암시적 변환되므로 CODE 인덱스를 정상적으로 사용한다.
    3. 문자 타입 컬럼과 숫자 리터럴을 비교하면 실행 전에 항상 문법 오류가 발생한다.
    4. 두 값의 타입이 달라 비교 결과가 항상 FALSE이므로 결과는 항상 0건이다.
  17. 17. 다음 [EMP] 테이블에 SQL을 실행했을 때 결과 값은?

    [EMP]

    ENAME DEPTNO JOB SAL
    A 10 CLERK 1000
    B 10 MANAGER 3000
    C 20 CLERK 2500
    D 20 ANALYST 3000
    E 30 SALESMAN 1500
    F NULL MANAGER 4000
    SELECT COUNT(*)
    FROM   EMP
    WHERE  NOT DEPTNO = 10 AND SAL > 2000 OR JOB = 'CLERK';
    1. 1
    2. 2
    3. 3
    4. 4
  18. 18. Oracle의 ROWNUM과 SQL Server의 TOP에 대한 설명으로 적절하지 않은 것은?

    1. WHERE ROWNUM <= 3은 조건을 통과한 행 중 최대 3건을 반환한다.
    2. WHERE ROWNUM = 2는 두 번째로 읽힌 행 1건만 반환한다.
    3. SQL Server는 SELECT TOP(3) ... 형태로 반환 행 수를 제한한다.
    4. ROWNUM은 결과에 포함되는 행에 1부터 순서대로 부여되는 가상 컬럼이다.
  19. 19. 다음 [STAFF] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle)

    [STAFF]

    SID TEAM PAY
    1 A 300
    2 NULL 200
    3 B 400
    4 A NULL
    5 NULL 100
    6 B 400
    SELECT TEAM, COUNT(PAY) AS CNT, SUM(PAY) AS TOT
    FROM   STAFF
    GROUP  BY TEAM
    ORDER  BY TEAM;
    1. A, 1, 300 / B, 2, 800 / NULL, 2, 300
    2. A, 2, 300 / B, 2, 800 / NULL, 2, 300
    3. A, 1, 300 / B, 2, 800
    4. NULL, 2, 300 / A, 1, 300 / B, 2, 800
  20. 20. 다음 [SALES] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle)

    [SALES]

    SNO BRANCH AMT
    1 강남 100
    2 강남 300
    3 종로 200
    4 종로 NULL
    5 마포 500
    6 강남 200
    SELECT COUNT(COUNT(*)), MAX(AVG(AMT)), MIN(SUM(AMT))
    FROM   SALES
    GROUP  BY BRANCH;
    1. 6, 500, 200
    2. 3, 500, 100
    3. 3, 200, 200
    4. 3, 500, 200
  21. 21. 다음 [EMP] 테이블에 SQL을 실행한 결과의 출력 순서로 옳은 것은? (Oracle)

    [EMP]

    ENAME COMM
    KIM 200
    LEE NULL
    PARK 0
    CHOI NULL
    JUNG 200
    HAN 100
    SELECT ENAME
    FROM   EMP
    ORDER  BY COMM NULLS FIRST, ENAME DESC;
    1. CHOI, LEE, PARK, HAN, JUNG, KIM
    2. LEE, CHOI, PARK, HAN, KIM, JUNG
    3. PARK, HAN, KIM, JUNG, LEE, CHOI
    4. LEE, CHOI, KIM, JUNG, HAN, PARK
  22. 22. EMP 테이블(ENAME, JOB, SAL, HIREDATE)에 대해 실행할 때 오류가 발생하는 SQL은?

    1. SELECT ENAME, SAL * 12 AS ANNUAL FROM EMP ORDER BY ANNUAL DESC, 1;
    2. SELECT ENAME, SAL FROM EMP ORDER BY SAL * 12 DESC;
    3. SELECT ENAME, SAL FROM EMP ORDER BY 3;
    4. SELECT ENAME FROM EMP ORDER BY HIREDATE DESC, SAL;
  23. 23. 다음 [ORDERS], [CUSTOMER], [PRODUCT] 테이블에 SQL을 실행했을 때 결과 값은?

    [ORDERS]

    OID CID PID
    1 C1 P1
    2 C2 P2
    3 C1 P3
    4 C3 P1
    5 C9 P2

    [CUSTOMER]

    CID CNAME
    C1 가
    C2 나
    C3 다

    [PRODUCT]

    PID PNAME
    P1 사과
    P2 배
    P4 감
    SELECT COUNT(*)
    FROM   ORDERS O, CUSTOMER C, PRODUCT P
    WHERE  O.CID = C.CID
    AND    O.PID = P.PID;
    1. 5
    2. 2
    3. 4
    4. 3
  24. 24. 다음 [EMP] 테이블에 SQL을 실행한 결과로 옳은 것은? (MGR은 관리자의 EMPNO이다. 이름은 가나다순으로 정렬된다.)

    [EMP]

    EMPNO ENAME SAL MGR
    1 윤 5000 NULL
    2 장 3000 1
    3 임 3500 2
    4 한 2500 2
    5 오 4000 3
    6 서 2000 3
    SELECT E.ENAME
    FROM   EMP E, EMP M
    WHERE  E.MGR = M.EMPNO
    AND    E.SAL > M.SAL
    ORDER  BY E.ENAME;
    1. 오, 임
    2. 임
    3. 윤, 오, 임
    4. 장, 임
  25. 25. 다음 [A], [B] 테이블에 SQL을 실행했을 때 결과 값은?

    [A]

    X
    1
    3
    5
    NULL

    [B]

    Y
    2
    3
    4
    SELECT COUNT(*)
    FROM   A CROSS JOIN B
    WHERE  A.X > B.Y;
    1. 12
    2. 3
    3. 4
    4. 5
  26. 26. 다음 [CUSTOMER], [ORDERS] 테이블에 SQL을 실행한 결과로 옳은 것은? (이름은 가나다순으로 정렬된다.)

    [CUSTOMER]

    CID CNAME
    1 가람
    2 나무
    3 다온
    4 라온
    5 마루

    [ORDERS]

    OID CID AMT
    10 1 500
    11 3 NULL
    12 3 200
    13 6 100
    14 1 300
    SELECT C.CNAME
    FROM   CUSTOMER C LEFT OUTER JOIN ORDERS O
           ON C.CID = O.CID
    WHERE  O.AMT IS NULL
    ORDER  BY C.CNAME;
    1. 나무, 라온, 마루
    2. 나무, 다온, 라온, 마루
    3. 다온
    4. 나무, 라온
  27. 27. 다음 SQL의 실행 결과로 출력되는 DEPTNO를 모두 나열한 것은?

    [EMP]

    ENAME DEPTNO SAL
    A 10 300
    B 10 500
    C 20 200
    D 20 250
    E 30 600
    SELECT DEPTNO, AVG(SAL)
      FROM EMP
     GROUP BY DEPTNO
    HAVING AVG(SAL) > (SELECT AVG(SAL) FROM EMP)
     ORDER BY DEPTNO;
    1. 10, 20, 30
    2. 30
    3. 10, 30
    4. 10
  28. 28. EMP 테이블에 다음과 같이 5건이 있다. (가), (나) SQL의 결과로 옳은 것은? (DEPTNO가 99인 행은 없다)

    [EMP]

    ENAME DEPTNO SAL
    A 10 100
    B 10 200
    C 20 300
    D 20 400
    E 30 500
    -- (가)
    SELECT COUNT(*) FROM EMP
     WHERE SAL < ALL (SELECT SAL FROM EMP WHERE DEPTNO = 99);
    
    -- (나)
    SELECT COUNT(*) FROM EMP
     WHERE SAL < ANY (SELECT SAL FROM EMP WHERE DEPTNO = 99);
    1. (가) 5, (나) 0
    2. (가) 0, (나) 0
    3. (가) 0, (나) 5
    4. (가) 5, (나) 5
  29. 29. 다음 SQL의 실행 결과로 옳은 것은? (값의 순서는 고려하지 않는다)

    [A]

    X
    1
    1
    NULL
    2
    3

    [B]

    X
    2
    NULL
    4
    SELECT X FROM A
    MINUS
    SELECT X FROM B;
    1. 1, 1, 3
    2. 1, NULL, 3
    3. 4
    4. 1, 3
  30. 30. ORD_2024와 ORD_2025 테이블은 구조가 같고, 주문번호(ORD_NO)가 두 테이블 사이에서 겹치지 않으며 각 테이블 안에도 중복 행이 없다. 두 테이블을 합쳐 전체 주문 목록을 조회할 때, 결과의 정확성과 성능을 함께 고려한 선택으로 가장 적절한 것은?

    1. UNION: 중복 제거 과정을 거치므로 결과 정확성이 더 높다
    2. UNION ALL: 겹치는 행이 없어 중복 제거 부담 없이 같은 결과를 얻는다
    3. INTERSECT: 두 테이블의 모든 주문을 하나로 합쳐 보여 준다
    4. MINUS: 2024년 주문 중 2025년과 겹치지 않는 주문을 모두 합친다
  31. 31. 다음 SQL의 결과에 포함되는 행은? (REGION | PROD | S 순서로 표기)

    [SALES]

    REGION PROD AMT
    서울 A 10
    서울 B 20
    부산 A 30
    대구 B 40
    SELECT REGION, PROD, SUM(AMT) AS S
      FROM SALES
     GROUP BY ROLLUP(PROD, REGION);
    1. NULL | A | 40
    2. 서울 | NULL | 30
    3. NULL | B | 40
    4. NULL | NULL | 90
  32. 32. 다음 SQL의 결과에서 LV 값이 '부서계'인 행 수와 '직무계'인 행 수로 옳은 것은?

    [EMP]

    DEPTNO JOB
    10 CLERK
    10 MANAGER
    20 CLERK
    30 CLERK
    30 MANAGER
    SELECT CASE WHEN GROUPING(DEPTNO) = 1 AND GROUPING(JOB) = 1 THEN '전체'
                WHEN GROUPING(JOB) = 1 THEN '부서계'
                WHEN GROUPING(DEPTNO) = 1 THEN '직무계'
                ELSE '상세' END AS LV,
           COUNT(*) AS CNT
      FROM EMP
     GROUP BY CUBE(DEPTNO, JOB);
    1. 부서계 2행, 직무계 3행
    2. 부서계 3행, 직무계 3행
    3. 부서계 3행, 직무계 2행
    4. 부서계 3행, 직무계 0행
  33. 33. 다음 SQL의 실행 결과에서 TOP 값을 ENAME 순서(A~E)대로 나열한 것으로 옳은 것은?

    [EMP]

    ENAME DEPTNO SAL
    A 10 300
    B 10 500
    C 10 200
    D 20 400
    E 20 100
    SELECT ENAME,
           FIRST_VALUE(ENAME) OVER (PARTITION BY DEPTNO
                                    ORDER BY SAL DESC) AS TOP
      FROM EMP
     ORDER BY ENAME;
    1. C, C, C, E, E
    2. A, B, C, D, E
    3. B, B, B, E, E
    4. B, B, B, D, D
  34. 34. 다음 SQL의 실행 결과에서 MA 값을 MON 순서대로 나열한 것으로 옳은 것은?

    [SALE]

    MON AMT
    1 30
    2 60
    3 90
    4 30
    5 120
    SELECT MON,
           AVG(AMT) OVER (ORDER BY MON
                          ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS MA
      FROM SALE
     ORDER BY MON;
    1. 10, 30, 60, 60, 80
    2. 30, 45, 60, 60, 80
    3. 30, 45, 60, 52.5, 66
    4. 45, 60, 60, 80, 75
  35. 35. 윈도우 함수에 대한 설명으로 가장 적절하지 않은 것은?

    1. 윈도우 함수를 사용해도 결과 행 수는 줄어들지 않는다.
    2. ORDER BY만 있고 윈도우 절이 없으면 범위는 파티션 처음부터 현재 행까지이다.
    3. RANK, DENSE_RANK, ROW_NUMBER는 OVER 절 안에 ORDER BY가 필요하다.
    4. WHERE 절에서 윈도우 함수를 직접 사용해 순위를 필터링할 수 있다.
  36. 36. 다음 SQL의 결과 건수는? (Oracle 12c 이상 기준)

    [EMP]

    ENAME SAL
    A 500
    B 400
    C 400
    D 400
    E 300
    F 200
    SELECT ENAME, SAL
      FROM EMP
     ORDER BY SAL DESC
    OFFSET 1 ROWS FETCH NEXT 2 ROWS WITH TIES;
    1. 2
    2. 3
    3. 4
    4. 5
  37. 37. EMP 테이블에서 급여(SAL) 내림차순으로 4~6번째 사원을 조회하려고 한다. 의도한 결과를 얻는 SQL은? (Oracle 기준)

    -- (가)
    SELECT ENAME
      FROM (SELECT ENAME FROM EMP ORDER BY SAL DESC)
     WHERE ROWNUM BETWEEN 4 AND 6;
    
    -- (나)
    SELECT ENAME
      FROM (SELECT ROWNUM AS RN, ENAME FROM EMP ORDER BY SAL DESC)
     WHERE RN BETWEEN 4 AND 6;
    
    -- (다)
    SELECT ENAME
      FROM (SELECT ROWNUM AS RN, ENAME
              FROM (SELECT ENAME FROM EMP ORDER BY SAL DESC))
     WHERE ROWNUM BETWEEN 4 AND 6;
    
    -- (라)
    SELECT ENAME
      FROM (SELECT ROWNUM AS RN, A.ENAME
              FROM (SELECT ENAME FROM EMP ORDER BY SAL DESC) A
             WHERE ROWNUM <= 6)
     WHERE RN >= 4;
    1. (가)
    2. (나)
    3. (다)
    4. (라)
  38. 38. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)

    [EMP]

    EMPNO ENAME MGR
    1 A NULL
    2 B 1
    3 C 1
    4 D 2
    5 E 4
    SELECT COUNT(*) AS CNT
      FROM EMP
    CONNECT BY PRIOR EMPNO = MGR;
    1. 12
    2. 5
    3. 9
    4. 15
  39. 39. 다음 SQL의 실행 결과로 옳은 것은? (SQL Server 기준)

    [EMP]

    EMPNO ENAME MGR
    1 KIM NULL
    2 LEE 1
    3 PARK 1
    4 CHOI 2
    5 JUNG 4
    6 KANG 3
    WITH UP (EMPNO, ENAME, MGR, LVL) AS (
        SELECT EMPNO, ENAME, MGR, 1
          FROM EMP
         WHERE ENAME = 'JUNG'
        UNION ALL
        SELECT E.EMPNO, E.ENAME, E.MGR, U.LVL + 1
          FROM EMP E
               INNER JOIN UP U ON E.EMPNO = U.MGR
    )
    SELECT ENAME FROM UP WHERE LVL = 3;
    1. CHOI
    2. KIM
    3. LEE
    4. PARK
  40. 40. 다음 (가), (나) SQL의 결과 건수로 옳은 것은? (Oracle 기준)

    [QSCORE]

    NAME Q1 Q2 Q3
    A 10 NULL 30
    B NULL NULL NULL
    C 20 25 NULL
    -- (가)
    SELECT * FROM QSCORE
    UNPIVOT (PT FOR QTR IN (Q1, Q2, Q3));
    
    -- (나)
    SELECT * FROM QSCORE
    UNPIVOT INCLUDE NULLS (PT FOR QTR IN (Q1, Q2, Q3));
    1. (가) 4건, (나) 4건
    2. (가) 3건, (나) 9건
    3. (가) 6건, (나) 9건
    4. (가) 4건, (나) 9건
  41. 41. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)

    SELECT REGEXP_SUBSTR('order:A-102;B-77',
                         '([A-Z])-([0-9]+)', 1, 2, NULL, 2) AS R
      FROM DUAL;
    1. 77
    2. B
    3. 102
    4. B-77
  42. 42. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, C1, C2 순서로 표기)

    SELECT REGEXP_COUNT('Data data DATA dAta', 'data', 6, 'i')  AS C1,
           REGEXP_COUNT('Data data DATA dAta', 'data', 1, 'ic') AS C2
      FROM DUAL;
    1. 4, 1
    2. 3, 4
    3. 3, 1
    4. 4, 4
  43. 43. 다음 두 테이블에 대해 아래 UPDATE 문을 실행(Oracle)한 후 SELECT SUM(price), SUM(stock) FROM prod;의 결과는?

    PROD

    PID PRICE STOCK
    P1 100 10
    P2 200 20
    P3 300 30

    NEW_PRICE

    PID PRICE STOCK
    P1 150 5
    P3 280 12
    P4 500 1
    UPDATE prod p
       SET (price, stock) = (SELECT n.price, n.stock
                               FROM new_price n
                              WHERE n.pid = p.pid)
     WHERE EXISTS (SELECT 1
                     FROM new_price n
                    WHERE n.pid = p.pid);
    1. 630, 37
    2. 430, 17
    3. 1130, 38
    4. 600, 60
  44. 44. 다음 두 테이블에 대해 아래 두 DELETE 문을 순서대로 실행한 후 SELECT COUNT(*) FROM orders;의 결과는?

    ORDERS

    OID CUST_ID
    1 A
    2 B
    3 C
    4 NULL

    BLACK

    CUST_ID
    B
    NULL
    DELETE FROM orders
     WHERE cust_id NOT IN (SELECT cust_id FROM black);
    
    DELETE FROM orders
     WHERE cust_id IN (SELECT cust_id FROM black);
    1. 1
    2. 2
    3. 0
    4. 3
  45. 45. SQL Server의 기본 설정(AUTO COMMIT)에서 아래 문장을 순서대로 실행했다. 실행 후의 상태로 옳은 것은?

    CREATE TABLE t (c INT);
    INSERT INTO t VALUES (1);
    BEGIN TRAN;
      INSERT INTO t VALUES (2);
      CREATE TABLE t_tmp (c INT);
      INSERT INTO t_tmp VALUES (9);
    ROLLBACK TRAN;
    INSERT INTO t VALUES (3);
    1. T에는 1, 2, 3이 있고 T_TMP는 존재한다.
    2. T에는 1, 3이 있고 T_TMP는 존재하지 않는다.
    3. T에는 1, 3이 있고 T_TMP는 빈 테이블로 존재한다.
    4. T에는 1, 2, 3이 있고 T_TMP는 존재하지 않는다.
  46. 46. Oracle에서 세션 A가 아래 UPDATE를 실행하고 아직 COMMIT하지 않았다. 이 상태에서 세션 B가 (가)~(다)를 실행할 때의 설명으로 가장 적절한 것은? (EMP의 1번 사원 SAL은 원래 3000으로 커밋되어 있다.)

    -- 세션 A
    UPDATE emp SET sal = sal + 100 WHERE empno = 1;
    
    -- 세션 B
    (가) SELECT sal FROM emp WHERE empno = 1;
    (나) UPDATE emp SET sal = 0 WHERE empno = 1;
    (다) UPDATE emp SET sal = 0 WHERE empno = 2;
    1. (가)는 세션 A가 COMMIT할 때까지 대기한 뒤 3100을 반환한다.
    2. (가)는 대기 없이 세션 A가 변경한 값인 3100을 반환한다.
    3. (나)는 세션 A가 COMMIT 또는 ROLLBACK할 때까지 대기하고, (다)는 바로 수행된다.
    4. (다)도 EMP 테이블 전체가 잠겨 있으므로 (나)와 마찬가지로 대기한다.
  47. 47. 데이터 타입에 대한 설명으로 적절하지 않은 것은? (Oracle)

    1. CHAR(10) 컬럼에 'ABC'를 입력하면 나머지가 공백으로 채워져 10바이트로 저장된다.
    2. DATE 타입은 날짜(연·월·일)만 저장하며 시각 정보는 저장하지 않는다.
    3. NUMBER(7, 2) 컬럼에는 최대 99999.99까지 저장할 수 있다.
    4. VARCHAR2는 입력한 길이만큼만 저장하며, 비교 시 뒤쪽 공백도 문자로 취급한다.
  48. 48. EMP 테이블의 ENAME 컬럼 이름을 EMP_NAME으로, 또는 테이블 이름을 바꾸려 한다. DBMS와 문장의 짝이 올바르지 않은 것은?

    1. Oracle: ALTER TABLE emp RENAME COLUMN ename TO emp_name;
    2. Oracle: RENAME emp TO employee;
    3. SQL Server: EXEC sp_rename 'emp.ename', 'emp_name', 'COLUMN';
    4. SQL Server: ALTER TABLE emp RENAME COLUMN ename TO emp_name;
  49. 49. 아래 DCL을 순서대로 실행한 뒤 KIM, LEE, PARK이 새로 접속했다. SCOTT.EMP에 대해 SELECT가 가능한 사용자와 INSERT가 가능한 사용자를 바르게 짝지은 것은? (Oracle, SCOTT 제외)

    -- DBA 실행
    CREATE ROLE r_emp;
    GRANT r_emp TO kim, lee, park;
    -- SCOTT 실행
    GRANT SELECT, INSERT ON scott.emp TO r_emp;
    GRANT SELECT ON scott.emp TO lee;
    REVOKE SELECT ON scott.emp FROM r_emp;
    -- DBA 실행
    REVOKE r_emp FROM park;
    1. SELECT: LEE / INSERT: KIM, LEE
    2. SELECT: 없음 / INSERT: KIM, LEE
    3. SELECT: LEE / INSERT: KIM, LEE, PARK
    4. SELECT: KIM, LEE / INSERT: KIM, LEE
  50. 50. DBA와 사용자들이 아래 순서로 DCL을 실행했다. 실행 후 CREATE TABLE 권한을 가지고 있는 사용자를 모두 고른 것은? (Oracle, 모든 문장은 정상 실행되었다.)

    -- DBA 실행
    GRANT CREATE TABLE TO u1 WITH ADMIN OPTION;
    -- U1 실행
    GRANT CREATE TABLE TO u2 WITH ADMIN OPTION;
    GRANT CREATE TABLE TO u3;
    -- U2 실행
    REVOKE CREATE TABLE FROM u3;
    -- DBA 실행
    REVOKE CREATE TABLE FROM u1;
    1. U2, U3
    2. 없음
    3. U2
    4. U1, U2

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