Home 34회 기출 복원 피드백 정리
Post
Cancel

34회 기출 복원 피드백 정리

1번 - 도메인 및 속성

도메인Domain의 특징

  • 각 속성을 가질 수 있는 값의 범위
  • 엔터티 내에서 속성에 대한 데이터타입과 크기, 제약사항 정하는 것

따라서,
“테이블의 속성 간 FK 제약 조건을 지정”하는 것은 틀린 선지이다.
==> 이는 ‘엔터티의 속성’과 관련되어 있다.



3번 - 주식별자 특징 및 도출 기준

주식별자 특징

  • 유일성
    : 주식별자에 의해
      엔터티 내의 모든 인스턴스들을 유일하게 구분함.

  • 최소성
    : 주식별자 구성 속성의 수는
      유일성 만족하는 최소의 수가 되어야 함.

  • 불변성
    : 주식별자가 한 번 특정 엔터티에 지정되면
      그 식별자의 값은 변하지 않아야 함.

  • 존재성
    : 주식별자가 지정되면
      반드시 데이터 값이 존재해야 함.
      (즉, NULL 허용 X)

주식별자 도출 기준

  • 해당 업무에서 자주 이용되는 속성을 주식별자로.
  • 명칭, 내역 등의 이름으로 기술되는 걸 피하기.
  • 속성의 수가 많아지지 않도록 함.



10번 - 속성의 특징

  • 한 개의 속성은 한 개의 속성값을 갖는다.
  • 엔터티를 설명하고 인스턴스의 구성요소가 됨.
  • 의미상 더 이상 분리되지 않음



11번 - TRUNCATE Vs DROP Vs Delete

TRUNCATE

  • DDL임.
  • 테이블의 값만 삭제, 테이블 구조는 유지
  • DDL이므로 자동으로 커밋됨.(Auto Commit)

DROP

  • DDL임.
  • 테이블 자체를 삭제함.
  • DDL이므로 자동으로 커밋됨.

DELETE

  • DML임.
  • 테이블 자체를 삭제함.
  • DML이므로 자동 커밋 안됨.
  • SQL Server에선 AUTO COMMIT 설정에 따라
     DML도 자동커밋 가능.



13번 - 절차형 SQL, PROCEDURE, TRIGGER

PROCEDURE

  • CREATE로 생성함.
  • DROP으로 삭제함.
  • EXECUTE로 실행함.
  • PROCEDURE에서도 COMMIT, ROLLBACK 사용 가능.

TRIGGER

  • 특정 테이블에 DML문 수행됐을 때,
     DB에서 자동 동작하도록 작성된 프로그램.
  • CREATE로 생성함.
  • COMMIT, ROLLBACK 실행 안됨.



21번 - GROUPING SETS Vs CUBE

GROUPING SETS

  • 인수에 대한 개별 집계 구함.
  • 인수가 3개 이상일 때
     다른 그룹함수와의 차이 식별 가능한듯.

CUBE

  • 결합 가능한 모든 값에 대하여 다차원 집계 생성.
  • 생성하는 Subtotal의 개수
      $= 2^N$개의 레벨.

풀이

  • 2번
     ROLLUP은 인수 순서에 따라 결과 달라짐.
     따라서 “결과는 같다”는 틀림.

  • 3번
     계층간 정렬 가능함.

  • 4번
     시스템 부담 차이 분명하지 않음.



24번 - 트랜잭션의 4가지 특성

  • 원자성
    : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행
        또는
      전혀 실행되지 않은 상태로 남음.
      둘 중 하나여야만 함.

  • 일관성
    : 트랜잭션 실행 전의 DB 내용이 잘못돼있지 않다면,
      실행 이후에도 DB 내용에 잘못 있으면 안됨.

  • 고립성
    : 트랜잭션 실행 도중에 다른 트랜잭션 영향을 받아
      잘못된 결과 만들어선 안됨.

  • 지속성
    : 트랜잭션이 성공적 수행되면
      그 트랜잭션이 갱신한 DB 내용은 영구적 저장.



13번 - 오라클만의 JOIN 문법

오라클

1
2
3
4
5
6
7
8
9
SELECT A.EMPNO,
        A.ENAME,
        A.JOB,
        A.DEPTNO,
        B.DNAME
FROM    EMP A
        DEPT B
WHERE A.DEPTNO = B.DEPTNO(+)
AND A.DEPTNO = B.DEPTNO(+);

ANSI 표준

1
2
3
4
5
6
7
8
SELECT A.EMPNO,
        A.ENAME,
        A.JOB,
        A.DEPTNO,
        B.DNAME
FROM    EMP A
LEFT OUTER JOIN DEPTNO B
ON  A.DEPTNO = B.DEPTNO;

즉, WHERE (+) == FROM LEFT OUTER JOIN!!!

문제를 똑바로 읽자!!

1
2
3
4
5
6
7
8
SELECT COUNT(*)
FROM SQLD_34_26_01 T1,
     SQLD_34_26_02 T2,
     SQLD_34_26_03 T3,
     SQLD_34_26_04 T4
WHERE T1.COL1 = T2.COL1(+)
  AND T2.COL1 = T3.COL1(+)
  AND T3.COL1 = T4.COL1;

맨 마지막의 T4.COL1(+)가 안 붙었으므로
결국 INNER JOIN의 결과가 되어버렸다.
즉, 주어진 테이블 데이터에 의거해서는
오직 1인 행만 남게 된다.



43번 - WINDOW FUNCTION

  • 윈도우 함수 활용 시,
     복잡한 프로그램을 하나의 SQL 문장으로 쉽게 해결.

  • 복잡하거나 자원 많이 사용하는 튜닝 기법들 대체 가능

풀이

3번 선지에서
SUM 등의 집계 윈도우 함수 사용 시에
WINDOW 절과 함께 사용하면
집계 대상이 되는 레코드 범위 지정 가능한 것은
적절한 내용이다.

예시

1
MIN() OVER (PARTITION BY ~ )

이런 식으로 가능.



44번 - 계층 문제

IDSUPER_IDCODE
1NULLA
21B
31C
42D
1
2
3
4
5
SELECT CODE
FROM SQLD_34_44
START WITH SUPER_ID IS NULL
CONNECT BY PRIOR ID = SUPER_ID
ORDER SIBLINGS BY CODE DESC;

풀이 과정

IDSUPER_IDCODE
1NULLA
21B
31C
42D
IDSUPER_IDCODE
1NULLA
21B
31C
42D
IDSUPER_IDCODE
1NULLA
21B
31C
42D
IDSUPER_IDCODE
1NULLA
21B
31C
42D

이에 따라 도출된 계층(중간결과)은 다음과 같다.

LVIDSUPER_IDCODE
11NULLA
221B
342D

그리고 주어진 SQL에 따른 결과는 다음과 같다.

CODE
D
C
A

따라서 답은 C이다.



47번 - WITH

서브쿼리로 할 때

1
2
3
4
5
6
7
SELECT T1.*
  FROM (
       SELECT A.DEPTNO
            , A.LOC
         FROM SCOTT.DEPT A
       ) T1
 WHERE 1=1;


WITH로 할 때

1
2
3
4
5
6
7
8
9
WITH DEPT_LOC ( DEPTNO, LOC ) AS (
    SELECT A.DEPTNO, 
            A.LOC
    FROM SCOTT.DEPT A
)

SELECT T1.*
FROM DEPT_LOC
WHERE 1=1;

풀이 과정

1
2
3
4
5
6
7
8
9
10
11
12
13
WITH WITH_TAB(LAST_NAME, EMP_ID, MGR_ID, SUM_SALARY)
AS (
    SELECT LAST_NAME, EMPLOYEE_ID, MANAGER_ID, SALARY
    FROM COMP_47
    WHERE MANAGER_ID IS NULL
    UNION ALL
    SELECT A.LAST_NAME, A.EMPLOYEE_ID, A.MANAGER_ID, A.SALARY + B.SUM_SALARY
    FROM COMP_47 A, WITH_TAB B
    WHERE B.EMP_ID = A.MANAGER_ID
    )
SELECT SUM_SALARY
FROM WITH_TAB
WHERE EMP_ID = 105;

EMP_ID가 105번인 행을 조회,
MGR_ID가 103번임.
 └ EMP_ID가 105번인 행을 조회,
     MGR_ID가 102번임.
   └ EMP_ID가 102번인 행을 조회,
       MGR_ID가 100번임.
     └ EMP_ID가 100번인 행을 조회,
         MGR_IDNULL임. END.



50번 - LAGLEAD 함수

1
2
LAG(expr, [,offset] [,default])
    OVER([partition_by_clause] order_by_clasue)
1
2
LEAD(expr, [,offset] [,default])
    OVER([partition_by_clause] order_by_clasue)

LAG 함수 : 이전 행의 값을 리턴
LEAD 함수 : 다음 행의 값을 리턴

expr : 대상 컬럼명
offset : 값을 가져올 행의 위치 기본값은 1
            생략가능
default : 값이 없을 경우 기본값
            생략가능
partition_by_clause : 그룹 컬럼명
            생략가능
order_by_clause : 정렬 컬럼명
            필수

(출처: [Oracle] 오라클 LAG, LEAD 함수 사용법 (이전값, 다음값))

Contents