[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의 경우는 별칭이 없는 칼럼도 그대로 사용)
'Database & Bigdata > SQLD' 카테고리의 다른 글
[SQLD] 최신기출문제 (33회차) - 오답체크 (0) | 2020.09.03 |
---|---|
[SQLD] 최신기출문제 (34회차) - 오답체크 (0) | 2020.09.03 |
[SQLD] 실전 모의고사 150제 - 오답체크 (0) | 2020.09.01 |
[SQLD] SQL 기본 및 활용/최적화의 원리 - 오답체크 (0) | 2020.08.29 |
[SQLD] 데이터 모델링의 이해 - 오답체크 (0) | 2020.08.29 |
댓글