[ 1과목 데이터 모델링의 이해 ]
Q1. 데이터 모델링의 세 가지 중요개념에 속하지 않는 것 ?
- 업무가 관여하는 어떤 것(Things)
- 업무가 관여하는 어떤 것의 성격(Attributes)
- 업무가 관여하는 어떤 것의 행위 (Events)
- 업무가 관여하는 어떤 것의 관계 (Relationships)
-> Events
Q2. 데이터 모델링에 대한 아래 보기 설명 중 알맞은 것 ?
- 데이터 모델링의 3가지 요소는 Process, Attributes, Relationships
- 실제로 데이터 베이스를 구축할 때 참고되는 모델은 개념적 데이터 모델링
- 물리 모델링 -> 논리 모델링 -> 개념 모델링 단계로 갈 수록 구체적
- 논리 모델링의 외래키는 물리 모델에서 반드시 구현되지는 않음
-> 4번
데이터모델링 3가지 요소 : Things, Attributes, Relationships
실제 데이터베이스 구축 시 참고되는 모델은 물리적 데이터 모델링
물리 모델링에서 개념 모델링 단계로 갈 수록 더 추상적
논리 모델링의 외래키의 물리 모델 구현은 선택 사항
Q3. 다음에 설명에 해당하는 모델링 관점 ?
업무가 어떤 데이터와 관련이 있는지 또는 데이터 간이 관계는 무엇인지에 대해서 모델링 하는 관점
- 프로세스 관점
- 데이터와 프로세스의 상관관점
- 데이터와 데이터 간의 상관관점
- 데이터 관점
-> 4번
< 데이터 모델링의 3가지 관점 >
1. 데이터 관점 : 업무가 어떤 데이터와 관련이 있는지 또는 데이터 간의 관계는 무엇인지에 대해 모델링 (What, Data)
2. 프로세스 관점 : 업무가 실제로 하고 있는 일은 무엇인지 또는 무엇을 해야하는지를 모델링 (How, Process)
3. 데이터와 프로세스의 상관관점 : 업무가 처리하는 일의 방법에 따라 데이터는 어떻게 영향을 받고 있는지 모델링하는 방법 (Interaction)
Q4. 테이블의 반정규화 기법 중 데이터 무결성을 깨트릴 위험을 갖지 않고 데이터 처리의 성능을 향상 시킬 수 있는 기법 ?
- 테이블 반정규화
- 중복관계 추가
- 칼럼 반정규화
- 데이터 반정규화
-> 중복관계 추가
Q5. 엔티티에 대한 개념 중 엔티티 정의의 공통점 3가지가 아닌 것?
- 데이터베이스 내에서 변별 가능한 객체
- 엔티티는 사람, 장소, 물건, 사건, 개념 등의 명사에 해당
- 저장되기 위한 어떤 것(Things)
- 업무상 관리가 필여한 관심사
-> 1번
[ 2과목 SQL 기본 및 활용 ]
Q1. 다음 중 절차형 SQL을 이용해 주로 만드는 것이 아닌 것 ?
- Procedure
- Trigger
- Built-In-Function
- User Defined Function
-> Built-In-Function
Q2. 다음 중 적절한 것은 ?
- 인덱스는 인덱스 구성 칼럼으로 항상 오름차순으로 정렬
- 비용기반 옵티마이저는 인덱스 스캔이 항상 유리하다고 판단
- 규칙 기반 옵티마이저는 적절한 인덱스가 존재하면 항상 인덱스를 사용하려함
- 인덱스 범위 스캔은 항상 여러건의 결과 반환
-> 3번
- 인덱스는 내림차순으로 생성 및 정렬됨
- 비용적인 측면에서는 전체 테이블 스캔이 유리할 수 있음
- 규칙 기반 옵티마이저의 규칙에 따라 적절한 인덱스가 존재하면 전체 테이블 스캔보다는 항상 인덱스를 사용하려함
- 인덱스 범위 스캔은 결과 건수만큼 반환
Q3. 다음 중 주어진 그룹 함수와 동일한 결과값을 반환하는 그룹 함수 ?
GROUP BY CUBE(DEPTNO, JOB);
- GROUP BY ROLLUP(DEPTNO, JOB);
- GROUP BY (DEPTNO, JOB,(DEPTNO, JOB),());
- GROUP BY DEPTNO UNION ALL GROUP BY JOB UNION ALL GROUP BY (DEPTNO, JOB);
- GROUP BY GROUPING SETS (DEPTNO, JOB, (DEPTNO, JOB),());
-> 4번
Q4. 부서코드 100의 상위 부서코드를 찾는 SQL문(테이블명 DEPT)
부서 ID | 부서코드 | 상위부서코드 |
10 | 50 | 0 |
20 | 100 | 50 |
30 | 150 | 100 |
-> SELECT 상위 부서코드
FROM DEPT
WHERE 부서코드 = 100
START WITH 상위부서코드 = 0
CONNECT BY PERIOR 부서코드 = 상위부서코드;
Q5. 인덱스를 사용할 수 없는 조건에 해당되지 않는 것 ?
- 인덱스가 사용되는 칼럼에 NVL (Key,0)를 사용
- 인덱스가 사용되는 칼럼에 to_char(vintagedate,'yyyymmdd')=sysdate를 사용
- 인덱스가 사용되는 칼럼에 vintageyear = to_char(sysdate,'yyyy')를 사용
- 인덱스가 사용되는 칼럼에 name || '' = 'lim'을 사용
-> 3번
* 인덱스를 형변환하지 않아 사용가능
Q6. Sort Merge 방식의 조인이 Nested Loop 방식 조인보다 효율적으로 판단되는 것 고르기
- 기본키와 외래키 관계에서 외래키에 인덱스가 없을 때
- 사용자가 발주한 주문에 대해서 체결 정보 한 건을 확인할 때
- 병렬로 테이블을 읽고 SORT_AREA_SIZE가 작은 경우
- Random Access가 자주 발생하지 않는 경우
-> 1번
Q7. TABLE을 탐색하지 않고 Fetch하려 할때 생성해야할 INDEX
-> IOT
* Index-Organized Table 은 테이블을 참조하지 않는 인덱스를 생성
Q8. INDEX 튜닝에 대한 잘못된 설명은?
- 인덱스를 경유한 테이블의 Random 액세스 부하가 심할 때, 클러스터 테이블이나 IoT를 활용하는 방안 고려
- 인덱스를 경유한 테이블 액세스 횟수가 같더라도 인덱스 구성에따라 스캔 효율이 달라짐 (효율을 높이기 위해 인덱스 칼럼 순서를 바꿔야할 때가 있음)
- 조건절이 Where deptno = 10 and ename = 'SCOTT'일 때 인덱스를 [deptno + ename]순으로 구성하나 [ename + deptno]순으로 구성하나 인덱스 스캔 효율에 차이가 없음
- Random 액세스 횟수를 줄이기 위해 인덱스 칼럼 순서를 바꿔주는 것도 큰 효과가 있음
-> 4번
* 인덱스 칼럼 순서를 아무리 바꾸어도 Random 액세스 횟수는 동일
Q9. ROWNUM을 올바르게 사용하지 않은 것?
- SELECT ROWNUM, ENAME, FROM EMP;
- SELECT EMPNO FROM EMP WHERE ROWNUM = 1;
- SELECT ENAME FROM EMP WHERE ROWNUM = 2;
- SELECT DEPTNO FROM EMP WHERE ROWNUM<10;
-> 3번
* 다음 지문과 같이 실행하려면 인라인 뷰를 사용해야함
SELECT *
FROM ( SELECT ROWNUM top, ename FROM EMP) aWHERE a.top = 2;
Q 10. Subquery 종류 중 Subquery가 Mainquery의 제공자 역할을 하고 Mainquery의 값이 Subquery에 주입되지 않는 유형은 ?
- Filter형 Subquery
- Early Filter형 Subquery
- Associative Subquery
- Access Subquery
-> 4번
Access Subquery : 쿼리의 변형이 없고 제공자 역할을 하는 서브쿼리
Filter Subquery : 쿼리의 변형이 없고 확인자 역할을 하는 서브쿼리
Early Filter Subquery : 쿼리의 변형이 없고 서브쿼리가 먼저 실행하여 데이터를 걸러냄
Q 10. EMP 테이블에서 EMPNO가 7698이 있으면(EXISTS구 사용) DEPTNO 30번에 대해서 EMPNO, ENAME, DEPTNO를 조회하는 SQL문 작성
->
SELECT EMPNO, ENAME, DEPTNO
FROM EMP
WHERE EXISTS (SELECT EMPNO FROM EMP WHERE EMPNO = 7698) AND DEPTNO = 30;
Q 11. SQL문을 보고 효과적인 인덱스 작성
SELECT SAL FROM EMP ORDER BY SAL DESC;
->
CREATE INDEX idx ON EMP(SAL DESC);
Q 12. 윈도우 함수 중에서 윈도우에서 제일 먼저 나오는 것을 0으로 하고 제일 늦게 나오는 것을 1로 해서 행 순서별 백분율을 구하는 것 ?
- FIRST_VALUE
- LAST_VALUE
- PERCENT_RANK
- CUME_DIST
-> 3번
FIRST_VALUE : 파티션에서 가장 처음 나오는 값
LAST_VALUE : 파티션에서 가장 나중에 나오는 값
PERCENT_RANK : 파티션에서 제일 먼저 나오는 것을 0으로 제일 늦게 나오는 것을 1로 하여 값이 아닌 행의 순서별 백분율을 조회
CUME_DIST: 파티션 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율 조회 (0~1)
Q 12. 다음 중 틀린 것은 ?
- SQL Server은 null값을 인덱스 맨 뒤에 저장
- Oracle 인덱스 구성 칼럼 중 하나라도 null이 아닌 레코드는 인덱스에 저장
- SQL Server 인덱스 구성 칼럼이 모두 null인 레코드도 인덱스에 저장
- Oracle 에서 인덱스 구성 칼럼이 모두 null인 레코드는 인덱스에 저장하지 않음
-> 1번
* SQL Server는 null값을 인덱스 맨 앞에 저장
Oracle은 맨 뒤에 저장
'Database & Bigdata > SQLD' 카테고리의 다른 글
[SQLD] 최신기출문제 (34회차) - 오답체크 (0) | 2020.09.03 |
---|---|
[SQLD] 최신 기출 문제(35회차) - 오답 체크 (0) | 2020.09.01 |
[SQLD] SQL 기본 및 활용/최적화의 원리 - 오답체크 (0) | 2020.08.29 |
[SQLD] 데이터 모델링의 이해 - 오답체크 (0) | 2020.08.29 |
[SQLD] SQL 최적화의 원리 - 옵티마이저와 실행 계획, 옵티마이저 종류, 인덱스, 실행 계획, 옵티마이저 조인 (0) | 2020.08.25 |
댓글