본문 바로가기
Database & Bigdata/SQLD

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

by jionee 2020. 9. 3.
SMALL

[33회차 시험 - 2019년 6월 8일 시행 ] -  1과목 7/10, 2과목 31/40, 총 38/50 (76점)

1. 데이터 모델링 이해

Q1. 아래 보기를 만족하는 가장 적절한 파티션 분할 기법?

 

  • 대상 테이블이 날짜 또는 숫자값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리 됨
  • 데이터 보관 주기에 따라 테이블에 데이터를 쉽게 지우는 것이 가능

->  RANGE PARTITION (범위 지정)


< 파티셔닝 기법 >

 

RANGE PARTITION (범위 지정) :

대상 테이블이 날짜/숫자값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리되면 RANGE PARTITION을 적용 가능함. 

데이터 보관 주기에 따라 테이블에 데이터를 쉽게 지우는 것 (파티션 테이블 DROP)이 가능하므로 데이터 보관 주기에 따른 테이블 관리가 용이

 

LIST PARTITION (특정 값 지정)

대용량의 데이터를 특정 값에 따라 분리, 저장하는 기법 -> 핵심적인 코드값으로 기본키가 구성되어 있고, 대량의 데이터가 있는 테이블에서 LIST PARTITION 이용 가능

RANGE PARTITION과 같이 데이터 보관주기에 따라 쉽게 삭제하는 기능 제공 X

 

HASH PARTITION (해시 적용)

지정된 HASH 조건에 따라 해싱 알고리즘이 적용되어 테이블이 분리됨

설계자는 테이블에 데이터가 정확하게 어떻게 들어가는지 알 수 없음

성능 향상을 위해 사용

RANGE PARTITION과 같이 데이터 보관 주기에 따라 쉽게 삭제하는 기능 제공 O


 

 

Q2. 다음 주어진 그림에 해당하는 ERD 표기법은?

 

  • Barker
  • IE
  • UML
  • IDEFIX

-> IE

 

* ERD 표기법 중 IE 표기법은 관계의 1:N 관계에서 N쪽에 새발을 표시

선택, 필수 참여 관계에서 선택 참여에 O, 필수 참여에 | 표시

 

 

Q3. 고객, 고객로그인 내역 테이블에서 로그인한 고객의 10퍼센트는 로그인 내역을 확인하고, 로그인 내역은 3년동안 보관하고 삭제해야한다. 설명 중 적절한 것은?

 

  • 기본키에 대한 인덱스를 추가
  • 외래키에 대한 인덱스는 추가하지 않아도 된다
  • 기간을 Range 파티션함
  • Hash 파티션을 수행

-> 3번

 

 

2. SQL 기본 및 활용

Q1. 서브쿼리에 대한 설명으로 옳지 않은 것?

 

  • 메인쿼리에서 서브쿼리의 결과 칼럼을 사용할 수 있음
  • 서브쿼리에서는 ORDER BY를 사용하지 못함
  • 서브쿼리는 단일행 또는 복수행 비교 연산자와 함께 사용 가능
  • 메인쿼리 레벨이 1이고 서브쿼리가 M이면 항상 메인쿼리 레벨인 1로 결과 집합 생성

-> 1번

 

 

Q2. Oracle 환경에서 날짜형 데이터를 다룰 경우 SQL의 결과로 가장 적절한 것 ?

SELECT TO_CHAR(TO_DATE('2015.01.10. 10'.'YYYY.MM.DD HH24') + 1/24(60/10), 'YYYY.MM.DD HH24:MUSS'
FROM DUAL'
  • 2015.01.10 11:01:00
  • 2015.01.10 10:05:00
  • 2015.01.10 10:10:00
  • 2015.01.10 10:30:00

 

-> 3번

 

* 특정 날짜에 1을 더하면 하루를 더한 결과와 같음

1/24 = 1시간

1/24/60 = 1분

1/24/(60/10) = 10분

 

-> 2015.01.10. 10:10:00

 

 

 

Q3. 아래 SQL 문장 실행 순서로 알맞은 것은?

1. Nested loops
2. Hash Join
3.	TABLE ACCESS (FULL) TAB1
4.  	TABLE ACCESS (FULL) TAB2
5. TABLE ACCESS (BY ROWID) TAB3
6.  INDEX (UNIQUE SCAN) PK_TAB3

 

  • 3,4,2,6,5,1
  • 1,2,3,4,5,6
  • 3,4,6,2,5,1
  • 3,4,2,1,6,5

-> 1번

 

* SQL문 실행 계획은 우선 안에서바깥으로 읽고 같은 레벨에서는 위에서 아래순으로 읽기

 

 

 

 

Q4. 명시적 커서에서 FETCH 단계 이후 수행되는 것?

  • CURSOR DEFINE
  • OPEN CURSOR
  • CLOSE CURSOR
  • EXIT

-> 3번


< 명시적 커서 >

1. 커서 선언 : 사용할 커서에 이름을 부여하고 이 커서에 대한 쿼리를 선언

2. 커서 열기 : 사용할 커서를 오픈

3. 패치 단계에서 커서 사용 : 결과 집합의 행(ROW) 수는 보통 1개 이상이므로 각각의 개별 행(ROW)에 접근 하기 위해서는 반복문 사용

4. 커서 닫기 : 커서 사용이 끝났으면 닫아 줌


 

 

Q5. 승리건수가 높은 순으로 3위까지 출력하되 3위의 승리건수가 동일한 팀이 있다면 함께 출력하는 문은 ? (SQL Server)

 

SELECT TOP(3) WITH TIES 팀명, 승리건수
	FROM 팀별성적
    ORDER BY 승리건수 DESC;

* SQL Server에서 상위 N개의테이블을 출력할 때 TOP N 질의문 사용 가능

WITH TIES 옵션은 N에 해당하는 값이 동일할 경우 동일한 데이터를 함께 출력하는 옵션

 

 

 

Q6. Hash Join의 순서로 올바른 것?

 

가) 선행 테이블에서 주어진 조건을 만족하는 레코드를 필터링

나) 선행 테이블의 조인 키를 기준으로 해시 함수를 적용해 해시 테이블을 생성

다) 1,2번 작업을 선행 테이블에서 조건을 만족하는 모든 행 수행

라) 후행 테이블에서 주어지는 조건을 만족하는 레코드를 필터링

마) 후행 테이블의 조인 키를 기준으로 해시 함수를 적용해 선행 테이블에서 해시 함수 반환값과 같은 값을 반환하는 해당 버킷을 찾음

  • 가-나-다-라-마
  • 가-나-라-마-다
  • 나-가-마-라-다
  • 가-라-나-마-다

-> 1번

 

 

 

 

 

 


*   LEAD(대상 속성, 순서, 디폴트값) OVER (PARTITION BY 절)


 

 

 

Q7. NTILE SQL문을 보고 빈칸 채우기

(총 행 갯 수 7개)

SELECT NTILE_2, COUNT(*) AS CNT
FROM (SELECT COL1, COL2, COL3, NTILE(3) OVER (ORDER BY COL3) AS NTILE_2 FROM SQL_3
WHERE 1=1 GROUP BY NTILE_2;
NTILE_2 CNT
(      ) (      )
2 2
3 2

-> 1,3

 

* 7개 행을 2,2,2로 균등하게 3등분하고, 남은값을 앞에서부터 순차적 할당하므로 3,2,2개씩 파티션 불팔

NTILE_2에는 각각 분할된 파티션 번호인 1,2,3이 할당됨 CNT에는 각각 분할된 파티션 별 행의 수가 카운터되어 3,2,2 반환됨

 

 

 

Q8. 주어진 테이블에서 날짜값을 2020,02로 분리해 추출하도록 아래 SQL문의 빈칸을 완성

COL1
2020-2-1
SELECT EXTRACT(YEAR FROM SYSDATE),
LPAD(EXTRACT(MONTH FROM SYSDATE,[      ])
FROM SQLD_3

-> 2,'0'

 

*(EXTRACT( 보고자 하는 정보 FROM 입력 날짜 )

LPAD( 대상 문자 ,  총 문자 길이   , 채움 문자  )

 

 

 


Q9. 아래와 같은 결과가 나오도록 SQL문의 빈칸을 완성

select deptno, job, sum(sal)
from emp2
group by [           ];

-> GROUPING SETS(deptno,(deptno, job)) 


* ROLLUP과 CUBE는 총계가 함께 조회되므로 적절하지않음

댓글