WorkHard/자격증

[SQLD 개발자] 기출문제 공부(39회)

코딩공대 2023. 3. 18. 19:03
728x90

1. DISK I / O를 경감할 수 있는 반정규화 방법?

  • 일단 수직 분할은 특정 칼럼 단위로 테이블을 분할하여 디스크 I / O를 줄일 수 있는 방법이다.

  • 반정규화의 대상
    • 디스크 I / O량이 많아 성능이 저하될 때

    • 경로가 너무 멀어 조인으로 성능이 저하될 때

    • 컬럼을 계산하여 읽을 때

  • 반정규화의 개념
    • 시스템의 성능 향상

    • 개발 및 운영의 편의성 등을 위해 정규화된 데ㅔ이터 모델을 통합, 중보그 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위

  • 반정규화의 특징
    • 반정규화를 수행하면 스스템의 성능이 향상되고 관리 효율성을 증가시키지만 데이터의 일관성 및 정합성이 저하될 수 있다.

    • 과도한 반정규화는 오히려 성능을 저하시킨다.

    • 반정규화를 위해서는 사전에 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선으로 할지를 결정해야 한다.

    • 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있다.

  • 반정규화 방법
    • 테이블 병합
       - 1 : 1관계 : 1 : 1관계를 통합하여 성능 향상
       - 1 : M관계 : 1 : M관계를 통합하여 성능 향상
       - 슈퍼 / 서브타입 : 슈퍼 / 서브 관계를 통합하여 성능 향상

    • 테이블 분할
       - 수직분할 : 컬럼 단위의 테이블을 디스크 I / O를 분산처리하기 위해 테이블을 1 : 1로 분리하여 성능 향상(트랜잭션의 처리되는 유형파악이 선행되어야 한다.)
       - 수평분할 : 행(레코드)단위로 집중 발생되는 트랜잭션을 분석하여 디크스 I / O및 데이터 접근의 효율성을 높여 성능을 향상하기 위해 행 단위로 테이블을 쪼갠다.

    • 테이블 추가
       - 중복테이블 추가 : 다른 업무 or 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거하고 성능을 향상시킨다.
       - 통계테이블 추가 : SUM, AVG등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상시킨다.
       - 이력테이블 추가 : 이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 존재하는 방법이다.

2. 1, 2, 3차 정규화?

  • 1차 정규화 : 테이블의 속성 하나는 하나의 속성값만을 가져야 한다.

  • 2차 정규화 : 기본키 중에 특정 컬럼에만 종속된 컬럼이 존재할 경우 테이블을 분해한다.

  • 3차 정규화 : 제 2정규형을 만족하는 상태에서 이행 함수 종속을 제거하는 정규화 과정이다. 주식별자를 제외한 컬럼간의 종속성을 확인해서 종속성이 있으면 분할하는 과정이다.

3. 슈퍼 / 서브타입 데이터 모델

  • 슈퍼 / 서브타입 데이터 모델의 변환타입 비교
    • One To One Type
       - 특징 : 개별 테이블 유지
       - 확장성 : 우수함
       - 조인성능 : 나쁨
       - I / O량 성능 : 좋음
       - 관리용이성 : 나쁨
       - 트랜잭션 유형에 따른 선택방법 : 개별테이블로 접근이 많은 경우 선택한다.

    • Plus Type
       - 특징 : 슈퍼 + 서브 테이블
       - 확장성 : 보통
       - 조인성능 : 나쁨
       - I / O량 성능 : 좋음
       - 관리용이성 : 나쁨
       - 트랜잭션 유형에 따른 선택방법 : 슈퍼 + 서브 형식으로 데이터를 처리하는 경우 선택한다.

    • Single Type
       - 특징 : 하나의 테이블
       - 확장성 : 나쁨
       - 조인성능 : 우수함
       - I / O량 성능 : 나쁨
       - 관리용이성 : 좋음
       - 트랜잭션 유형에 따른 선택방법 : 전체를 일괄적으로 처리하는 경우 선택한다.

4. 데이터베이스 모델링의 설명

  • 도메인은 속성이 가질 수 있는 값의 범위이다.(값의 허용범위이다.)

5. 엔티티의 종류

  • 독립 엔티티(Kernel Entity, Master Entity) : 사람, 물건, 장소 등과 같이 현실세계에 존재하는 엔티티

  • 업무중심 엔티티(Transaction Entity) : Transaction이 실행되면서 발생하는 엔티티

  • 종속 엔티티(Dependent Entity) : 주로 1차 정규화로 인해 관련 중심엔티티로부터 분리된 엔티티

  • 교차 엔티티(Intersaction Entity) : M : M의 관계를 해소하려는 목적으로 만들어진 엔티티

  • 유형, 무형에 따른 엔티티 종류
    • 유형 엔티티 : 업무에서 도출되며 지속적으로 사용되는 엔티티

    • 개념 엔티티 : 개념적으로 사용되는 엔티티, 유형 엔티티는 물리적 형태가 있지만, 개념 엔티티는 물리적 형태가 없다.

    • 사건 엔티티 : 비즈니스 프로세스를 실행하면서 생성되는 엔티티

  • 발생시점에 따른 엔티티 종류
    • 기본 엔티티 : 다른 엔티티로부터 영향을 받지 않고 독립적으로 생성되는 엔티티, 키 엔티티라고도 한다.

    • 중심 엔티티 : 기본 엔티티와 행위 엔티티 간의 중간에 있는 엔티티, 기본 엔티티로부터 발생되고 행위 엔티티를 생성하는 엔티티

    • 행위 엔티티 : 2개 이상의 엔티티로부터 발생하는 엔티티, 지속적으로 정보가 추가되고 변경되는 엔티티

6. ERD 작성 절차

  1. 엔티티를 그린다.

  2. 엔티티를 적절하게 배치한다.

  3. 엔티티 간에 관계를 설정한다.

  4. 관계명을 기술한다.

  5. 관계의 참여도를 기술한다.

  6. 관계의 필수 여부를 기술한다.

7. 비즈니스 프로세스에 의하여 만들어지는 식별자?

  • 대체 여부에 따라서 본질 식별자와 인조 식별자로 분류된다.

  • 비즈니스 프로세스에 의해 만들어지는 식별자는 "본질 식별자"이다.

8. SQL문 빈칸 채우기?

  • "CONNECT BY" -> ORACLE이 지원하는 질의 방법으로 계층형 구조를 탐색할 수 있다.

  • 정렬할때 계층형 구조까지 보존하려면 ORDER SIBLINGS BY절을 사용해야 한다.
    (같은 부모를 가진 로우, 즉 레벨이 같은 형제 로우에 한해서 정렬이 수행된다.)

9. 아래와 같은 SQL문?

  • GROUP BY CUBE(DEPTNO, JOB) 은 소계, 총계 등 모든 합계를 구하는 것이다.

2. 에서 GROUPING SETS(DEPTNO, JOB, (DEPTNO, JOB), ())이므로 DEPTNO의 합, JOB의 합, (DEPTNO, JOB)의 합, 소계의 합을 구하는 SQL문이므로 CUBE와 같이 모든 합을 다 구하는 것이다.

 


10. SQL문에서 오류가 발생하지 않는 것은?

  1. 번은 NAME에 DATE타입의 데이터를 입력하여 ERROR가 발생한다.

  2. 번은 AGE에  NOT NULL인데 NULL값이 들어가 ERROR가 발생한다.

  3. 번은 ID(PK)값을 입력하지 않아서 ERROR가 발생한다.

11. 계층형 쿼리문의 설명으로 옳지 않은 것?

  1. NOT IN (3)이므로 3이 포함되면 전개를 멈춘다.

  2. CONNECT BY PRIOR ID = PARENT_ID이므로 부모ID를 기준으로 자식 ID를 검색하는 순방향 전개이다.

  3. 중복이 생겼을 때 루프를 돌지 않기 위해 NO CYCLE옵션을 사용할 수 있다.

  4. ORDER SIBLINGS BY 를 수행하게 되면 전체 테이블이 아니라 계층형으로 된 데이터 값을 기준으로 정렬된다.

12. 인덱스 스캔 방식

  • UNIQUE SCAN : 유일한 값 하나 찾기, 예를 들어 고객아이디 찾기.

  • RANGE SCAN : 어떠한 조건에서 한 범위를 찾기, 예를 들어 주문번호 찾기.

  • FULL SCAN : 전체 데이터 * 전체 행 찾기

  • DECENDING : 인덱스 역순으로 찾기, 최댓값 찾기에 유리하다.
    (ASC : 최소값 찾기에 유리하다.)

13. SQL문의 실행 결과?

  • CASE 문을 사용해서 정렬의 순서를 변경했으므로 ID = 13, ID = 10인 수가 먼저 조회된다.

  • 그 다음 AGE DESC이므로 13의 AGE가 먼저 조회된다.

  • 따라서 1번이 정답이다.

14. SQL문 실행 결과?

  • ORDER BY (CASE WHEN ID = 1000 THEN 0 ELSE ID END)를 통해 ID가 1000인 것들을 0으로 바꾸고 ID값으로 ASC한다.

  • 그리고 HAVING COUNT(*) = 2를 통해 카운트한 값이 2인 것들만 남기면 3000, 9999가 남는다.

  • 따라서 ID에는 3000, 9999가 들어가야 한다.

15. SUB QUERY의 유형은?

  • 메인쿼리의 값을 서브쿼리에서 주입을 받아서 비교하는 것으로 상호연관 서브쿼리(CORRELATED SUB QUERY)이다.

  • 서브쿼리에 * A.EMPNO 값을 매번 가져와서 대입해야 하므로 성능이 좋지 않다.

16. KPI-POOL 테이블에서 특정 하나의 값에 대한 자신의 상위 KPI를 검색하는 SQL문은?

  • 특정 하나의 값에 대한 자신의 상위 KPI를 검색하는 것으로, MAINKPI가 0부터 출발하여 WHERE SUBKPI가 30이면(특정 하나의 값) 30의 상위 KPI(MAINKPI = 20)이 같이 출력된다.

  • PRIOR -> 자식 -> 부모 -> 순방향 전개

  • PRIOR -> 부모 -> 자식 -> 역방향 전개

17. 결과가 동일한 SQL문?

  • 문제의 SQL문이 SUBKPI가 20이고 MAINKPI가 10 이거나 SUBKPI가 0이고 MAINKPI가 30인 행을 출력하는 문제이다.

  • KPIPOOL을 보면 SUBKPI가 20이고 MAINKPI가 10은 하나 존재한다.
    하지만 SUBKPI가 0이고 MAINKPI가 30인 행은 없다.

  • 따라서 SUPKPI = 20인 행을 고르면 되기 때문에 정답은 1번이다.

18. 서브쿼리?

  • 서브쿼리에서는 정렬을 수행가시 위해서 내부에 ORDER BY 를 사용하지 못한다.

  • 여러 개의 행을 되돌리는 서브쿼리는 다중행 연산자를 사용해야 한다.

  • EXIST는 TRUE와 FALSE만 되돌린다.

  • 메인쿼리에서는 서브쿼리의 컬럼은 자유롭게 사용할 수 없다.

19. ORACLE데이터에서 날짜를 조회하는 방법?

  • 오늘 날짜를 구하기 위해서는 SYSDATE + 1을 해주고, 데이트 타입을 문자열로 변환해주어야 한다.

20. CURSOR의 처리단계

  1. 명시적 커서 선언 -> Cursor 커서이름

  2. 명시적 커서 오픈 -> Open 커서이름

  3. 커서에서 데이터 추출 -> Fetch 커서이름

  4. 커서 종료 -> Close 커서이름

  • CURSOR -> OPEN -> FETCH -> CLOSE!!!!!!!!

21. HASH JOIN?

  • 조인 컬럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있다.

  • 해시 함수를 이용하여 조인을 수행하기 때문에 '='로 수행하는 조인으로 동등 조건에만 사용가능하다.

  • 해시 함수가 적용될 때 동일한 값을 항상 같은 값으로 해싱됨이 보장된다.

  • HASH JOIN 작업을 수행하기 위해 해시 테이블을 메모리에 생성해야 한다.

  • 메모리에 적재할 수 있는 영역의 크기보다 커지면 임시 영역에 해시 테이블을 저장한다.

  • HASH JOIN을 할 때는 결과 행의 수가 적은 테이블을 선행 테이블로 사용하는 것이 좋다.

  • 선행 테이블을 Build input이라 하며, 후행 테이블을 Prove input이라고 한다.

22. 3차 정규형을 만족할 때 엔티티의 갯수는?

 

  • 2차 정규화

 

  • 3차 정규화

  • 2차 정규화 -> 3차 정규화(종속 존재를 분해한다.) 학번, 코스코드(FK), 평가코드(FK)로 총 3개로 된다.

23. 숫자함수

  • ROUND(반올림)

  • ABS(절대값) 
  • FLOOR(CEIL의 반대, 정수로 내림)

  • TRUNC(소수점 버림)

  • CEIL(FLOOR의 반대, 정수로 올림)

24. 빈칸에 맞는 말?

  • "ROLE"은 데이터베이스에서 OBJECT(테이블, 프로시저, 뷰)등의 권한을 묶어서 관리할 수 있다.

25. SQL문 실행 결과는?

  • WHERE 조건이 A.COL1 = B.COL1이므로 A.COL1 = 1일 때, B.COL1 = 1인 레코드 -> 2개
    A.COL1 = 1일 때, B.COL1 = 1인 레코드 -> 2개
    A.COL1 = 2일 때, B.COL1 = 2인 레코드 -> 1개
    A.COL1 = 3일 때, B.COL1 = 3인 레코드 -> 2개
    A.COL1 = 3일 때, B.COL1 = 3인 레코드 -> 2개


  • 위와 같은 계산으로 2 + 2 + 1 + 2 + 2 = 9가된다.

26. SQL1과 동일한 값을 반환하도록 SQL2의 빈칸에 들어갈 서브쿼리 연산자는?

  • SQL1의 결과는 (120, 400)이다.

  • SQL2에 같은 결과를 반환하기 위해서는 빈칸에 EXIST를 작성해주어야 한다.

  • 하위 쿼리가 하나 이상의 레코드를 반환하는 경우 TRUE, 그렇지 않은 경우 FALSE를 리턴한다.