본문 바로가기
Database & Bigdata/SQLD

[SQLD] 최신기출문제 (34회차) - 오답체크

by z.1nee 2020. 9. 3.
SMALL

[34회차 시험 - 2019년 8월 24일 시행 ] -  1과목 7/10, 2과목 28/40, 총 35/50 (70점)

1. 데이터 모델링 이해

Q1. 도메인의 특징으로 알맞지 않는 것?

 

  • 데이터 타입, 크기
  • NULL
  • CHECK 
  • FOREIGN Key 제약조건

->  4번

 

 

 

Q2. 다음 보기 중 칼럼에 대한 반정규화 기법으로 알맞지 않은 것?

 

  • 중복 칼럼을 추가 - 조인 감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 함
  • 파생 칼럼을 추가 - 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 함
  • 이력 테이블에 기능 칼럼을 추가 - 최신값을 처리하는 이력의 특성을 고려해 기능성 칼럼을 추가
  • 외래키에 대한 속성을 추가 - 외래키 관계에 해당하는 속성을 추가해 조인 성능을 높임

->  4번

 

* 외래키에 대해 속성을 추가하는 것은 데이터 모델링에서 관계를 연결할 때 사용하는 방식


중복칼럼 추가 : 조인 감소를 위해 중복된 칼럼을 위치시킴

파생칼럼 추가 : 트랜잭션시 계산에 의해 발생되는 성능 저하를 예방. 미리 값을 계산해 칼럼에 보관

이력테이블 칼럼 추가 : 대량의 이력데이터를 처리할 때 블특정 조회나 최근 값을 조회할 때 나타날 수 있는 성능 저하 예방. 이력 테이블에 기능성 칼럼 추가

기본키에 의한 칼럼 추가 : 단일 기본키 안에서 특정값을 별도로 조회할 경우 성능 저하 발생. 기본키 안에 이미 데이터가 존재하지만 성능향상을 위해 일반속성으로 포함하는 방법

응용시스템 오작동을 위한 칼럼 추가 : 업무적으로는 의미가 없지만 사용자가 데이터처리를 하다가 잘못 처리해  원래값으로 복구하길 원하는 경우 이전 데이터를 임시적으로 중복해 보관( 임시적인 기법이지만 이력데이터 모델로 풀어내면 정상적인 기법이 될 수 있음)

 

 


 

2. SQL 기본 및 활용

Q1. 프로시저와 트리거에 대한 설명 중 잘못된 것?

 

  • 프로시저와 트리거 모두 생성할 때 CREATE 명령어 사용
  • 프로시저와 트리거 모두 생성하면 소스코드와 실행코드가 생성
  • 프로시저는 COMMIT,ROLLBACK 실행 가능, 트리거는 실행 불가능
  • 둘 다 EXECUTE 명령어로 실행됨

->  4번

 

*  프로시저는 EXECUTE 명령어로 실행하지만 트리거는 생성 후 자동 실행


 

 

 

Q2. 실행 계획에 대한 설명으로 틀린 것?

SELECT *
FROM HR.Departments A, HR.Employess B
WHERE A.Departments_id = B.Departments_id

  • 성능 향상을 위해 HASH JOIN을 NESTED LOOP JOIN으로 변경
  • 실행 계획에서 실행 순서는 2->3->1->0
  • Departments 테이블이 Employees 테이블보다 소량으로 선행하는 것이 좋음
  • 조인조건이 Non-Equal일 경우 HASH조건으로 수행되지 못하고 MERGE JOIN으로 수행

->  1번

 

*  FULL ACCESS JOIN을 수행하는 두개의 테이블에 대해 Nested Loop JOIN을 수행하면 두 개의 테이블엘서 모든 행마다 JOIN을 수행하므로 성능 저하

 

 

Q4. SQL 수행결과는?

C1 C2 C3 C4
10 10 10 10
20 20 NULL 20
30 NULL 30 NULL
NULL 40 20 40
SELECT SUM(C1 + C2 + C3 + C4 ) 
FROM SQLD_17;

SELECT SUM(C1) + SUM(C2) + SUM(C3) + SUM(C4) 
FROM SQLD_17;

-> 40, 260

 

* 첫번째는 4개의 칼럼이 모두 NULL이 아닌 값을 가지는 행에 대해서만 합계 계산

두번째는 4개의 칼럼이 각각 합계가 계산되고 각 합계를 모두 더함

 

 

Q4. Orcale 과 SQL Server에서 수행했을 때 틀린것은? (Auto commit false)

update 문;
create 문;
rollback;
  •  SQL server - roolback이 수행된 후 update와 create 구문 모두 취소

  •  SQL server - roolback이 수행된 후 create table은 생성 X

  •  Oracle - rollback이 수행된 후 update와 create 구문 모두 취소
  •  Oracle의 경우 update는 취소 X

-> 3번

 

 

* Oracle의 경우 ROLLBACK이 수행되면 DDL인 CREATE 구문과 DML인 UPDATE는 묵시적으로 COMMIT - 취소안됨

SQL Server 은 DDL이 수행되어도 묵시적인 COMMIT이 수행되지 않음

 

 

 

Q5. 조인 기법에 대한 설명으로 알맞은 것?

  •  Hash Join은 정렬작업이 없어 정렬이 부담되는 대량 배치 작업에 유리

  •  Sort Merge Join은 Equal Join에서만 사용 가능

  •  옵티마이저는 조인 칼럼에 인덱스가 존재하지 않으면 Nested Loop Join을 선호
  •  Nested Loop Join은 정렬된 결과들을 통해 조인 작업이 수행

-> 1번

 

 

* Sort Merge Join은 Not Equal Join에서도 사용 가능

Nested Loop Join은 조인칼럼의 인덱스가 존재해야함

 Sort Merge Join은 정렬된 결과들을 통해 조인 작업이 수행

 

 

Q6. SQL 수행 시두번째로 나오는 값은?

ID SUPER_ID CODE
1 NULL A
2 1 B
3 1 C
4 2 D
SELECT CODE
FROM SQLD_44
START WITH SUPER_ID IS NULL
CONNECT BY PRIOR ID = SUPER_ID
ORDER SIBILINGS BY CODE DESC;

-> C

 

* ORDER SIBLINGS BY: 같은 부모 아래 형제들끼리 정렬 

댓글