본문 바로가기
Database & Bigdata/SQLD

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

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

[35회차 시험 - 2019년 11월 30일 시행 ]   -  1과목 8/10, 2과목 29/40, 총 37/50 (74점)

1. 데이터 모델링의 이해 

 

Q1. 반정규화의 이유로 가장 부적절한 것 ?

  • 데이터를 조회할 때 디스크 입출력량이 많아서 성능이 저하될 때 반정규화를 수행
  • 데이터 무결성을 보장하지 못할 때 반정규화를 수행
  • 경로가 너무 멀어 조인으로 인한 성능 저하가 예상될 때 반정규화를 수행
  • 칼럼을 계산해 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행

->  2번

 

* 정규화는 데이터 무결성을 위해서 함

반정규화는 오히려 데이터 무결성에 위배될 수 있음

 

 

 

 

Q2. 테이블 설계 시 인덱스와 관련된 설명으로 부적절한 것 ?

 

식별자 관계만을 사용했을 경우 : 기본키 속성의 숫자가 증가해 SQL문이 복잡해짐

비식별자 관계만을 사용했을 경우 : 테이블 간의 과다한 조인을 유발해 조인에 의한 성능 저하 발생

 

  • 주로 B-Tree 인덱스로 되어있음
  • 외래키가 설계되어 있는데 인덱스가 없는 상태에서 입력/삭제/수정의 부하가 생김
  • 테이블에 만들 수 있는 인덱스의 수는 제한이 없으나, 너무 많이 만들면 오히려 성능 부하가 발생
  • 조회는 일반적으로 인덱스가 있는 것이 유리

->  2번

 

* 외래키가 설계되어있지만 인덱스가 없는 상태면 입력/삭제/수정 부하가 오히려 덜 생김

 

 

 

 

 

Q3. 한 테이블에 많은 칼럼이 과도하게 밀집되어있을 경우에 이에 대한 설명으로 가장 부적절한 것 ?

 

  • 자주쓰는 칼럼과 그렇지 않은 칼럼으로 나눠 성능 향상시킬 수 있음
  • Row Chaining이 발생해 속도가 느려질 수 있음
  • 한 테이블에 많은 수의 칼럼들이 존재하게 되면 데이터가 디스크의 여러 블록에 존재하므로 디스크에서 데이터를 읽는 I/O량이 많아지게 되어 성능이 저하될 수 있음
  • 데이터 로우가 과도하게 밀집하지 않도록 스키마 구조와 동일하게 파티션을 분할

->  4번

 

* Row Chaing과 유사한 의미인데  ROW 정보를 검색하기 위해 하나 이상의 데이터 블록을 SCAN해야해 성능이 감소될 수 있음

 


Row Chaining : 하나의 Row를 하나의 블록에 저장할 수 없어서 여러 블록에 걸쳐서 저장하는 현상

Row Migration : 

Update로 인하여 늘어나는 공간을 저장할 공간이 없어서 다른 블록으로 Row를 옮기는 현상


 

 

2. SQL 기본 및 활용

 

Q4. ANSI JOIN SQL에서 가장 올바르지 않은 것

 

SELECT EMP.DEPTNO, EMPNO.ENAME, DNAME
FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;
SELECT EMP.DEPTNO, EMPNO.ENAME, DNAME
FROM EMP NATURAL JOIN DEPT;
SELECT *
FROM DEPT JOIN DEPT_TEMP USING (DEPTNO)
SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME
FROM EMP E INNER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);

->  2번

 

* NATURAL JOIN에서 EMP.DEPTNO와 같이 OWNER 명을 사용하면 에러가 발생

 

 

 

Q5. "_"(언더바)이 들어가 있는 문자열을 찾는 SQL문은 ?

 

WHERE절만 

  • WHERE NAME LIKE '%_%'
  • WHERE NAME LIKE '%#_%'
  • WHERE NAME LIKE '%@_%' ESCAPE '@'
  • WHERE NAME LIKE '%_%' ESCAPE '_'

-> 3번

 

* LIKE 연산으로 '%'나 '_'가 들어간 문자를 검색하기 위해선 ESCAPE 명령어를 사용할 수 있음

( '_'나 '%'앞에 ESCAPE로 특수문자를 지정하면 검색 가능)

 

 

 

 

 

Q6. WINDOW FUNCTION을 사용한 SQL중 올바르지 않은 것 ?

 

-> SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO 

           RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED PRECEDING) SAL3


- Start point에는 End point와 같거나 작은 값이 들어감

- default 값은 Range Between unbounded preceding and current row

- UNBOUNDED PRECEDING : start point에만 들어갈 수 있음

- UNBOUNDED FOLLOWING : end point에만 들어갈 수 있음

- CURRENT ROW : start point end point 둘다 가능함


 

 

 

Q7. 다음 중 PL/SQL에 대한 설명으로 가장 적절하지 않은 것 ?

  • 변수와 상수등을 사용해 일반 SQL 문장을 실행할 때 WHERE절의 조건 등으로 대입할 수 있음
  • Procedure, User Defind Function, Trigger 객체를 PL/SQL로 작성
  • Procedure 내부에 작성된 절차적 코드는 PL/SQL이 처리하고, 일반적인 SQL문장은 SQL실행기가 처리
  • PL/SQL문의 기본 구조로 DECLARE, BEGIN~END, EXCEPTION은 필수적으로 써야한다.

->  4번

 

* DECLARE와 BEGIN~END문은 필수지만 EXCEPTION문은 선택

 

 

 

Q8. 다음 중 데이터 무결성을 보장하기 위한 방법으로 가장 부적절한 것 ?

  • 애플리케이션
  • Trigger
  • Lock
  • 제약조건

->  3번

 

* Lock은 병행성 제어 (동기성) 기법

 

 

 

Q8. 결과값이 다른 것 ?

  • SELECT SUBSTR(TO_CHAR('20190504',5,2) FROM DUAL;
  • SELECT EXTRACT(MONTH FROM DATE '2020-05-01') FROM DUAL;
  • SELECT CONCAT('0','5') FROM DUAL;
  • SELECT TRIM ('05') FROM DUAL;

->  2번

 

* 5가 출력됨 (나머지는 05)

 

 

 

 

Q9. 데이터베이스 테이블 제약조건(CONSTRAINT)에 대한 설명으로 부적절한 것은?

  • Check 제약 조건은 데이터베이스에서 데이터의 무결성 유지를 위해 테이블의 특정 컬럼에 설정하는 제약
  • 기본키 (Primary Key)는 반드시 테이블당 하나의 제약만을 정의할 수 있음
  • 고유키(Unique Key)로 지정된 모든 칼럼들은 Null 값을 가질 수 없음
  • 외래키(Foreign Key)는 테이블간의 관계를 정의하기 위해 기본키(Primary Key)를 다른 테이블의 외래키가 참조하게 생성

->  3번

 

* 지정된 모든 칼럼은 중복된 값을 허용하진 않지만 Null 값은 가질 수도 있음

 

 

Q9. 아래 SQL에 대한 Column Header를 적으시오 (DBMS : Oracle)

SELECT employee_id, DEPARTMENT_ID, SALARY AS "salary"
FROM SQLD_49
WHERE EMPLOYEE_ID<110;

->  EMPLOYEE_ID, DEPARTMENT_ID, salary

 

* 별칭이 없는 칼럼은 대문자로 바뀌고, 별칭이 있는 칼럼은 그대로 사용

(SQL Server의 경우는 별칭이 없는 칼럼도 그대로 사용)

 

 

 

 

댓글