You are on page 1of 144

목차

국가공인 S Q L 전문가/개발자 자격검정 안내 ......................................................1

국가공인 SQL 전문가 자격시험 안내 ...................... ................................................................. 2

국가공인 SQL 개발자 자격시험 안내 .......................................................................................... 3

I ᄉm 치, ....................... -.............................................................................슈 ....................................................3

과목 I . 데이터 모델링의 이해 ............................................. .............................. 5

제 1장. 데이터 모델링의 이해 ........................................................................................................ 7

제 2장. 데이터 모델과 성능 .......................................................................................................... 21

과목 E . S Q L 기본 및 활용 . ......................................................................................................37

제 1장. SQL 기본 ............................................................................................................................ 39

제 2장. SQL 활용 .......................................................................................................................... V7

제 3장. SQL 최적화 기본 원리 ........................................... ...................................................... 129

과목 I . S Q L 고급활용 및 튜닝 .............................................................................................. 139

계 1장. 아키텍처 기반 튜닝 원리 ............................................................................................... 141

제 2장. Lock과 트랜잭 션 동시성제어 ...................................... ................................................ 151

제 3장. 옵티아미저 원 리 ........................................................................... .................................. 159

계 4장. 인덱스 와 조인 ........................................................................................................ ........ 167

계 5장. 고급 SQL 튜닝 ................................................................................................................ 183

S Q L 전문가 실기문제 ...................................................................................................................... 197

S Q L 자격검정 실전문제 정답 및 해설 ................................................................................. 209

SQL 자격검정 실전문제 I


국가공인 SQL 전문가 자격시험 안내

n 시험안내
국가공인 구분 시험과목 과목별 세부 내용 문항수 배점 시험시간

SQL 전문가/개발자
• 데이터 모델링의 이해
1과목 데이터 모델링의 이해 10
• 데이터 모델과 성능
• SQL 기본
2과목 SQL 기본 및 활용 • SQL 활용 20

자격검정 안내
• SQL 최적화 기본원리 70 점
(문항별 1점) 180분
• 아키텍처 기반 튜닝 원리
• Lock과 트랜잭션 동시성제어 (3 시간)
3과목 SQL 고급 활용 및 튜닝 • 옵티마이저 원리 40
• 인덱스와 조인
• 고급 SQL 튜닝
30 점
실기 SQL 고급활용 및 실무 2
(문항별 I 5점)

_ 협•격 기 준 ※ 자격검정 합격 후 응시자격심의에 통과매야 최종업격 처리됨

합격기준 과락기준
필기와 실기 총점 75점 이상인 자 과목별 40% 미만 취득 불합격

§■ 응시 자격 ^ 경력/학력 또는 자격기준 중 하나 이상 만족 시 응시 가능

응시자격
학사학위 이상 취득자
경력/학력
전문학사학위 취득 후 실무경력 2년 이상인 자
기준
고등학교 졸업 후 실무경력 4년 이상인 자
국내 • 외 데이터베이스 관련 자격을 취득한 자
- IBM, Microsoft, Oracle, Sybase 등의 해외 DBMS 기업들이 인증하는 데이터베이스 관련 자격
자격기준 - 데이터아키텍처 전문가(DAP) 및 준전문가(DAsP)
SQL 개발자 자격을 취득한 자

■■ 응시료

응시료 환불규정
100,000원 수험표 발행 이전일 24시까지 100% / 수험표 발행일부터 환불불가

2 I SQL 자격검정 실전문제


SQL 전문가/개발자 자격검정 안내

국가공인 SQL 개발자 자격시험 안내

!_ 시험안내
시험과목 과목별 세부 내용 C】툐;卜
入^
구분 nr〇 nr 배점 시험시간

데이터 모델링의 이해 • 데이터 모델링의 이해


1과목 10
* 데이터 모델과 성능
100 점 90분
• SQL 기본 (1시간 30분)
(문항별 2점)
2과목 SQL 기본 및 활용 • SQL 활용 40
• SQL 최적화 기본원리

■ 합격 기준

합격기준 과락기준
필기와 실기 총점 60점 이상인 자 과목별 40% 미만 취득 불합격

정 응시 자격
■응시자격

제한없음

■ 응시료
응시료 환불규정
50,000원 수험표 발행 이전일 24시까지 100% / 수험표 발행일부터 환불불가

응시절차
SQL Professional

S |\I @ SQL 전문가 자격시험 응시 절차

시험접수
]' 〇 <19
buL Developer f___

출 # II ^ SQL 개발자 자격시험 응시 절차

며]S S £>!
시험접수 최종합격

SQL 자격검정 실전문제 I 3


데이터 모델링의 이해

제 1장 데이터 모델링의 이해 제 2 장 데이터 모델과 성능


제 1절 데이터 모델의 이해 저i|1절 성능 데이터 모델링의 개요
제 2절 엔터티 제 2절 정규화와 성능
제 3절 속성 제3 절 반정규화와 성능
제 4 절 관계 제4 절 대량 데이터에 따른 성능
제 5 절 식별자 제 5 절 데이터베이스 구조와 성능
저I6절 분산 데 이 터 베 이스 와 성능
____________________곈호
o

핵심 정 리 1 모델링은 현실세계에 대해서 표현하는 것으로 이해할 수 있다. [ 居 중


모델링의 특징으로 가장 부적절한 것은?

발생시점(發生時點) 에

데이터 모델링의 이해
① 현실세계를 일정한 형식에 맞추어 표현하는 추상화의 의미를 가질 수
따른 엔터티 분류
있음
• 기본/키엔터티
(Fundamental Entity, ② 시스템 구현만을 위해 진행하는 사전단계의 직-업으로서 데이터베이스

Key Entity) 구축을 위한 사전작업의 의미가 있음


• 중심엔터티 (Main ③ 복잡한 현실을 제한된 언어나 표기법을 통해 이해하기 쉽게 하는 단순
Entity) 화의 의미를 가지고 있음
• 행위엔터티 (Active ④ 애매모호함을 배제하고 누구나 이해가 가능하도록 정확하게 현상을
Entity)
기술하는 정확화의 의미를 가짐

제 1절 데이터 모델의 이해
제 2절 엔터티 데이터모델링이란 다음 설명 중 데이터 모델링이 필요한 주요 이유로 가장 부적절한 것은?
• 정보시스템을 구축하기
제 3절 속성
위한 데이터 관점의 ① 업무정보를 구성하는 기초가 되는 정보들에 대해 일정한 표기법에 의해
제 4 절 관계
업무 분석 기법 표현한다.
제 5 절 식별자
• 현실세계의
② 분석된 모델을 가지고 데이터베이스를 생성하여 개발 및 데이터관리에
데이터(what)에 대해
약속된 표기법에 의해
사용하기 위한 것이다.
③ 데이터베이스를 구축하기 위한 용도를 위해 데이터모델링을 수행하고
표현하는 과정
• 데이터베이스를 업무에 대한 설명은 별도의 표기법을 이용한다.
구축하기 위한 ④ 데이터모델링 자체로서 업무의 흐름을 설명하고 분석하는 부분에 의미를
분석/설계의 과정 가지고 있다.

데이터 모델링 유의점 3 다음 중 데이터모델링을 할 때 유의해야 할 사항으로 가장 부적절한 것은?


• 중복(Duplication)
• 비유연성(Inflexibility) ① 여러 장소의 데이터베이스에 같은 정보를 저장하지 않도록 하여 중복성을
• 비일관성(Inconsistency) 최소화 한다

② 데이터의 정의를 데이터의 사용 프로세스와 분리하여 유연성을 높인다.


③ 사용자가 처리하는 프로세스나 장표 등에 따라 매핑이 될 수 있도록
프로그램과 테이블간의 연계성을 높인다.
④ 데이터간의 상호 연관관계를 명확하게 정의하여 일관성 있게 데이터가
유지되도록 한다.

8 I SQL 자격검정 실전문제


I . 데이터 모델링의 이해

〇 G

핵심정리 4 다음 중 아래 설명이 의미하는 데이터모델링의 유의점에 해당하는 특성은 핵심정 리 6 다음 중 ANS卜SPARC에서 정의한 3단계구조(three-level architecture)

무엇인가? 에서 아래 내용이 설명하는 스키마구조로 가장 적절한 것은?

데이터베이스 스키마
아래 아래
구조 3단계
데이터 모델을 어떻게 설계했느냐에 따라 사소한 업무변화에도 데이터 • 외부스키마 - 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현
모델이 수시로 변경됨으로써 유지보수의 어려움을 가중시킬 수 있다. (External Schema) - 모든 응용시스템들이나 사용자들이 필요로 하는 데이터를 통합한
데 이터의 정의를 데이터의 사용 프로세스와 분리함으로써 데이 터 • 개념스키마 조직 전체의 DB 를 기술한 것으로 D B 에 저장되는 데이터와 그들
모델링은 데이터 혹은 프로세스의 작은 변화가 애플리케이션과 데이터 (Conceptual 간의 관계를 표현하는 스키마
베이스에 중대한 변화를 일으킬 수 있는 가능성을 줄인다.
Schema)
• 내부스키마
① 외부스키마 (External Schema)
(Internal Schema)
① 중복 ② 개념스키마 (Conceptual Schema)
② 비유연성 ③ 내부스키마(Internal Schema)
③ 비일관성 ④ 논리스키마(Logical Schema)
④ 일 ^^

개념적 데이터 모델링 5 다음 H 아래 데이터모델링 개념에 대한 설명에서 1 & ©


추상화 수준이 높고
들어갈 단어로 가장 적절한 것은?
업무중심적이고 포괄적인
수준의 모델링 진행.
아래
전사적 데이터 모델링,
EA수립시 많이 이용 전사적 데이터 모델링을 수행할 때 많이 하며, 추상화 수준이 높고
업무 중심적이고 포괄적인 수준의 모델링을 진행하는 것을 E ]
논리적 데이터 모델링 데이터 모델링 이라고 한다. 이와 달리 실제로 데이터베이스에 이식
할 수 있도록 성능, 저장 등의 물리적인 성격을 고려한 데이터 모델링은
시스템으로 구축하고자
Q |데이터모델링 이라고 한다.
하는 업무에 대해 Key,
속성, 관계 등을 정확하게 ① 한 명의 고객은 여러 개의 제품을 주문 할 수 있다. 주문은 할 수도
표현, 재사용성이 높음 ① -1-개념적, 물리적 있고 안 할 수도 있다.
② ~卜논리적, 개념적 ② 하나의 주문은 반드시 한 명의 고객에 의해 주문된다.
물리적 데이터 모델링 ③ -—논리적, 물리적
③ 주문에 데이터를 입력할 때는 반드시 고객데이터가 존재해야 한다.
실제로 데이터베이스에
④ 기-개념적, 논리적 ④ 고객에 데이터를 입력할 때는 주문데이터가 존재하는 고객만을 입력할
이식할 수 있도록 성능,
저장 등 물리적인 성격을 수 있다.
고려하여 설계

〇 〇

SQL 자격검정 실전문제 1 9 1 0 I SQL 자격검정 실전문제


I . 데이터 모델링의 이해

핵심정리 다음 중 타RD에 대한 설명으로 가장 부적절한 것은? 핵심정리 11 다음 중 엔터티의 일반적인 특징으로 가장 부적절한 것은?

① 1976년 피터첸(Peter Chen)에 의해 Entity-Relationship Model(E—R ① 다른 엔터티와의 관계를 가지지 않는다.


ERD 작성 순서
Model) 이라는 표기법이 만들어졌다. ② 유일한 식별자에 의해 식별이 가능해야 한다.
① 엔터티를 그린다.
② 일반적으로 ERD를 작성하는 방법은 엔터티 도출 一,엔터티 배치 ᅳ ③ 엔터티는 업무 프로세스에 의해 이용되어야 한다.
② 엔터티를 적절하게
관계 설정 ᅳ 관계명 기술의 흐름으로 작업을 진행한다. ④ 엔터티는 반드시 속성을 포함해야 한다.
배치한다.
③ 엔터티간 관계를 ③ 관계의 명칭은 관계 표현에 있어서 매우 중요한 부분에 해당한다.
설정한다. ④ 가장 중요한 엔터티를 오른쪽 싱단에 배치하고 추가 빌생되는 엔터티들을
④ 관계명을 기술한다. 왼쪽 편과 하단에 배치하는 것이 원칙이다.
12 다음 중 다른 엔터티로부터 주식별지를 상속받지 않고 자신의 고유한
⑤ 관계의 참여도를
주식별자를 가지며 사원,부서, 고적, 상품,자재 등이 예가 될 수 있는
기술한다.
엔터티로 가장 적절한 것은?
⑥ 관계의 필수여부를
기술한다.
① 기본 엔터티(키엔터티)
9__ 다음 중 아래 시나리오에서 엔터티로 가장 적절한 것은?
② 중심 엔터티(메인엔터티)

아래 ③ 행위 엔터티
④ 개념 엔터티
s 병원은 여러 명의 환자가 존재하고 각 환자에 대한 이름, 주소 등을
관리해야 한다.
(단,업무범위와 데이터의 특성은 상기 시나리오에 기술되어 있는
사항만을 근거하여 판단해야 함)
엔터티의 특징 I s 다음 중 엔터티의 이름을 부여하는 방법으로서 가장 부적절한 것은?
• 반드시 해당 업무에서
필요하고 관리하고자
① 가능하면 약어를 사용하여 엔터티의 이름을 간결하고 명확하게 한다.
① 병원
하는 정보이어야 한다. ② 현업의 업무 용어를 사용하여 업무상의 의미를 분명하게 한다.
② 환자
(예. 환자,토익의 ③ 모든 엔터티에서 유일한 이름이 부여되어야 한다.
③ 이름
응시횟수, …) ④ 엔터티가 생성되는 의미대로 자연스럽게 부여하도록 한다.
④ 주소
• 유일한 식별자에 의해
식별이 가능해야 한다.
• 영속적으로 존재하는
인스턴스의 집합 엔터티, 인스턴스, 14 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상
이어야 한다. 속성, 속성값의 관계 분리되지 않는 최소의 데이터 단위를 무엇이라 하는가?
1〇 다음 중 엔터티의 특징으로 가장 부적절한 것은?
(’한 개’가 아니라 • 한 개의 엔터티는 두 개
'두 개 이상’) ① 속성이 없는 엔터티는 있을 수 없다. 엔터티는 반드시 속성을 가져야 이상의 인스턴스의 [ ]
• 엔터티는 업무 집합이어야 한다.
한다.
프로세스에 의해 • 한 개의 엔터티는 두 개
② 엔터티는 다른 엔터티와 관계가 있을 수 밖에 없다. 단, 통계성 엔터티나,
이용되어야 한다. 이상의 속성을 갖는다.
코드성 엔터티의 경우 관계를 생략할 수 있다. 15 다음 중 속성에 대한 설명으로 가장 부적절한 것은?
• 엔터티는 반드시 • 한 개의 속성은 한 개의
③ 객체지향의 디자인패턴에는 싱글턴패턴이 있어 하나의 인스턴스를
속성이 있어야 한다. 속성값을 갖는다. ① 엔터티에 대한 자세하고 구체적인 정보를 나타낸다.
• 엔터티는 다른 엔터티와 ‘ 가지는 클래스가 존재한다. 이와 유사하게 엔터티는 한 개의 인스턴스를
② 하나의 엔터티는 두 개 이상의 속성을 갖는다.
최소 한 개 이상의 가지는 것만으로도 충분한 의미를 부여할 수 있다.
③ 하나의 인스턴스에서 각각의 속성은 하나 이상의 속성값을 가질 수 있다.
관계가 있어야 한다. ④ 데이터로서 존재하지만 업무에서 필요로 하지 않으면 해당 업무의 엔터티로
④ 속성도 집힙-이다.
성립될 수 없다.

12 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 1 1
I . 데이터 모델링의 이해

-公-

16 다음 중 아래와 같은 사례에서 속성에 대한 설명으로 가장 부적절한 것은?


핵심정리 핵심정리 19 다음 중 데이터모델링을 할 때 속성의 명칭을 부여하는 방법으로
가장 부 적 절 한 것 은?
아래
속성의 특성에 따른 분류 속성의 명칭 부여
① 속성의 이름에 약어를 사용할 경우 그 의미를 명확하게 이해할 수 없고
• 기본속성 우리은행은 예금분류(일반예금,특별예금 등)의 원금,예치기간,이 • 해당업무에서 사용하는
혼돈을 초래하여 커뮤니케이션의 혼란을 야기할 수 있으므로 지나친
• 설계속성 자율을 관리할 필요가 있다. 또한 원금에 대한 이자율을 적용하여 이름을 부여 한다.
• 파생속성 계산된 이자에 대해서도 속성으로 관리하고자 한다. 예를 들어 원금 • 서술식 속성명은 약어 사용은 가급적 제한하도록 한다.
이 1000원이고 예치기간이 5개월이며 이자율이 5.0%라는 속성을 관
사용하지 않는다. ② 속성의 이름에는 서술식 용어는 사용하지 않도록 한다.
리하고 계산된 이자도 관리한다. 일반예금이나 특별예금 등에 대해서
• 약어사용은 가급적 ③ 직원 엔터티의 이름,고객 엔터티의 이름과 같이 각 엔터티별로 동일한
는 코 드 를 부여(예. 01-일반예금,02-특별예금 등)하여 관리한다.
제한한다. 속성명을 시용하여 데이터모델의 일관성을 가져가는 것이 좋다.
① 일반예금은 코드 엔터티를 별도로 구분하고 값에는 코드값만 포함한다. • 전체 데이터모델에서 ④ 데이터모델링 대싱예서 용하는 용어도 있고 외부에서 사용히는 용어
유일성 확보하는 것이
② 원금,예치기간은 기본(BASIC)속성이다. 도 있어 중복이 있을 때,가급적 해당 업무에서 자주 사용하는 이름을
좋다.
© 이자와 이자율은 파생(DERIVED)속성이다. 이용하도록 한다.
④ 예금분류는 설계(DESIGNED)속성이다.

1 17 | 다음 중 데이터를 조회할 때 빠른 성능을 낼 수 있도록 하기 위해 원래 B ?D에서는 존재적 관계와 I 20 I 다음 중 데이터모델링의 관계에 대한 설명으로 가장 부적절한 것을 2개
속성의 값을 계산하여 저장할 수 있도록 만든 속성으로 가장 적절한 행위에 의한 관계를 구분 고르시오.
것은? 하지 않지만 클래스다이어
그램에서는 이것을 구분 ① 관계는 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있으나 ERD
① 파생속성 (Derived Attribute) 하여 연관관계와 의존 에서는 관계를 연결할 때, 존재와 행위를 구분하지 않고 단일화된 표기
② 기본속성 (Basic Attribute) 관계로 표현한다. 법을 사용한다.
③ 설계속성 (Designed Attribute) ② UML(Unified Modeling Language)에는 클래스다이 어그램의 관계 중
④ PK속성 (Derived Attribute) 연관관계(Association)와 의존관계 (Dependency) 가 있고 이것은 실선과
점선의 표기법으로 다르게 표현이 된다.
③ 관계는 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있고 ERD

각 속성은 가질 수 있는 18 다음 중 아래 설명이 나타내는 데이터모델의 개념으로 가장 적절한 것은? 에서는 관계를 연결할 때, 존재와 행위를 구분하여 실선과 점선의 표기
값의 범위가 있는데 이를 법으로 다르게 표현한다.
그 속성의 도메인(Domain) ④ UML(Unified Modeling Language)에는 클래스다이 어그램의 관계 중
아래
이라하며, 엔터티 내에서 연관관계 (Association)와 의존관계 (Dependency)가 있고 있으나 구분
속성에 대한 데이터타입과 주문이라는 엔터티가 있을 때 단가라는 속성 값의 범위는 100에서
10,000 사이의 실수 값이며 제품명이라는 속성은 길이가 20자리 이내 하지 않고 단일화된 표기법을 사용한다.
크기 그리고 제약사항을
의 문자열로 정의할 수 있다.
지정하는 것이다.

① 시스템카탈로그(System Catalog)
② 용어사전(Word Dictionary) __ 다음 중 관계에 대한 설명으로 가장 부적절한 것은?
③ 속성사전(Attribute Dictionary)
① 관계는 존재적 관계와 행위에 의한 관계로 나누어볼 수 있다.
④ 도메인(Domain)
② 관계의 표기법은 관계명,관계차수,식별성의 3가지 개념을 사용한다.
③ 부서와 사원 엔터티 간의 '소속’ 관계는 존재적 관계의 사례이다.
④ 주문과 배송 엔터티 간의 ’배송근게 관계는 행위에 의한 관계의 사례이다.

SQL 자격검정 실전문제 I 1 3 1 4 I SQL 자격검정 실전문제


I . 데이터 모델링의 이해

핵심정리 22 다음 중 엔터티간의 관계에서 n 1:M과 같이 관계의 기수성을 나타내는


핵심정리 25 다음 중 아래에서 주식별자를 지정할 때 고려해야 할 사항을 묶은 것으로
것으로 가장 적절한 것은? 가장 적절한 것은?

관계의 표기법 식별자의 종류


① 관계명 (Relationship Membership)
• 관계명(Membership) : • 엔터티 내에서
② 관계차수(Relationship Degree/ Cardinality)
관계의 이름 대표성을 가지는가에 가. 주식별자에 의해 엔터티 내의 모든 인스턴스들이 유일하게 구분
• 관계차수(Cardinality) :
③ 관계선택사양(Relationship Optionality)
따라 주식별자 되어야 한다.
1:1, 1:M,M :N ④ 관계정의 (Relationship Definition) 오
(Primary Identifier)■卜 나. 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수
• 관계선택사양 보조식 별자(Alternate 가 되어야 한다.
(Optional ity) 로 구분
Identifier〉 다. 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한디-.
라. 주식별자가 지정이 되면 반드시 값이 들어와야 한다.
:필수관계,선택관계 • 엔터티 내에서 스스로
생성되었는지 여부에
따라 내부식별자와
① 가,나,다
23 다음 중 두 개의 엔터티 사이에 정의한 관계를 체크하는 사항으로 가장 외부식 별자(Foreign
② 가,나,라
부적절한 것은? Identifier)로 구분
③ 나,다,라
• 단일 속성으로 식별이
① 두 개의 엔터티 사이에 관심 있는 연관규칙이 존재하는가? ④ 가,나,다,라
되는가에 따라
② 두 개의 엔터티 사이에 정보의 조합이 발생되는가? 단일식별자

③ 업무기술서, 장표에 관계연결을 구]능하게 하는 명사<Noun) 가 있는가? (Single Identifier)와 I 26 I 다음 중 사원엔터티에서 식별자의 특성에 해당하지 않는 것은 무엇인가?
복합식 별天卜(Composit
④ 업무기술서,장표에 관계연결에 대한 규칙이 서술되어 있는가?
Identifier)^,
• 원래 업무적으로
의미가 있던 식별자
속성을 대체하여
일련번호와 같이
관계 읽기 24 다음 중 두 개의 엔터티 사이에서 관계를 도출 할 때 체크 할 사항을 새롭게 만든 식별자를
• 기준(Source) 엔터티를 구분하기 위해
모두 고른 것은?
한 개(One) 또는 본질식별자와
인조식별자로 구분 ① 주식별자
각(Each)으로 읽는다.
아래
• 대상(Target) ② 단일식별자
엔터티의 관계참여도 가. 두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가? ③ 내부식별자
즉 개수(하나, 하나 나. 두 개의 엔터티 사이에 정보의 조합이 발생되는가? ④ 인조식별자7
2
다. 업무기술서,장표에 관계연결에 대한 규칙이 서술되어 있는가?
이상)를 읽는다.
라. 업무기술서, 장표에 관계연결을 가능하게 하는 동사(Verb)가 있
• 관계선택사양과
는가?
관계명을 읽는다.
27 다음 중 식별자로 가장 부적절한 것은?

① 가,다,라
① 사원 ② 쏜벋_____________
② 기-,다,라 사■원번호: HUHBERdO) 이름: V4RC» K2(20)
③ 가,나,다 주민 _f 룍번호: NUMBEE(13) 사 원번 호 : MMBEE( IO)

④ 가,나,다,라
④ 사원
③ 사원
일현번旦: VAECHAR2( 10)
주민번호: HUHBEEC13)
주민중곡번호: CHAK(18)
사원번호: HDHBERO0) 사원번호: HDHBER( IO)

SQL 자격검정 실전문제 I 1 5 16 I SQL 자격검정 실전문제


I . 데이터 모델링의 이해

28 다음 중 아래에서 엔터티 내에 주식별자를 도출하는 기준을 묶은 것으로 30 다음 중 비식별자 관계로 연결하는 것을 고려해야 하는 경우로 가장
핵심정리
가장 적절한 것은? 부적절한 것은?
주식별자의 특징
• 유일성 : 주식별자에 아래 ① 부모엔터티에 참조값이 없어도 자식엔터티의 인스턴스가 생성될 수
의해 엔터티내에 모든 있는 경우
인스턴스들을 유일 가. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
② 부모엔터티의 인스턴스가 자식 엔터터와 같이 소멸되는 경우
나. 명칭, 내역 등과 같이 이름으로 기술되는 것들을 주식별자로 지정
하게 구분함
한다. ③ 여러 개의 엔터티를 하나로 통합하면서 각각의 엔터티가 갖고 있던
• 최소성 : 주식별자를 다. 복합으로 주식별자를 구성할 경우 너무 많은 속성을 포함하지 여러 개의 개별 관계가 통합되는 경우
구성하는 속성의 수는 않도록 한다.
④ 자식쪽 엔터티의 주식별자를 부모엔터 티와는 별도로 생성하는 것이
유일성을 만족하는 라. 자주 수정되는 속성을 주식별자로 지정한다.
최소의 수가 되어야 함 더 유리하다고 판단하는 경우

• 불변성 : 주식별자가
한 번 특정 엔터티에
① 가,나
② 가,다 식별자의 분류체계
지정되면 그 식별자의
fc i gsa
값은 변하지 않아야 함 ③ 다, 라 식별자 설명
• 존재성 : 주식별자가 ④ 나,라 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티
주식 별자
지정되면 반드시 대표성 와 참조관계를 연결할 수 있는 식별자
데이터 값이 존재 여부 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을
1 29 1 프로젝트를 전개할 때는 식별자관계와 비식별자관계를 선택하여 연결 보조식 별자
(Null 안됨) 가지지 못해 참조관계 연결을 못함
해야 하는 높은 수준의 데이터모델링 기술이 필요하다. 다음 중 비식별자
스스로 내부식 별자 엔터티 내부에서 스스로 만들어지는 식별자
관계를 선택하는 기준으로 가장 부적절한 것은?
생성여부 외부식 별자 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자

① 관계의 강약을 분석하여 상^간에 연관성이 약할 경우 비식별자관계를 속성의 단일식 별자 하나의 속성으로 구성된 식별자
고려한다. 수 복합식 별자 둘 이상의 속성으로 구성된 식별자
② 자식테이블에서 독립적인 Primary Key의 구조를 가지기 원할 때 비식 본질식 별자 업무에 의해 만들어지는 식별자
대체
별자관계를 고려한다. 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지
여부 인조식별자
③ 모든 관계가 식별자 관계로 연결되면 SQL Where절에서 비교하는 항목이 고 있기 때문에 인위적으로 만든 식별자
증가되어 조인에 침며하는 테이블에 따라 SQL문장이 길어져 SQL문의
복잡성이 증가되는 것을 방지하기 위해 비식별자관계를 고려한다.
④ 부모엔터티의 주식별자를 자식엔터 티에서 받아 손자엔터 티까지 계속
흘려보내기 위해 비식별자관계를 고려한다.

식별자와 비식별자관계 비교

〇 —I 식별자관계 비식별자관계
목적 강한 연결관계 표현 약한 연결관계 표현
자식 주식별자
자식 주식별자의 구성에 포함됨 자식 일반 속성에 포함됨
영향
표기법 실선 표현 점선 표현
- 반드시 부모엔터티 종속 - 약한 종속관계
- 자식 주식별자구성에 부모 - 자식 주식별자구성을 독립적으로 구성
연결
주식별자포함 필요 - 자식 주식별자구성에 부모 주식별자 부분 필요
고려사항
- 상속받은 주식별자속성을 타 - 상속뻗은주식별자속성을타 엔터티에 치단필요
엔터티에 이전 필요 - 부모쪽의 관계참여가 선택관계

18 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 17
)
___________________ 히 핵심정리 다음 중 성농 데이터모델링에 대한 설명으로 가장 부적절한 것은?

성능데이터모델링이란? ① 성능이 저하된 결과를 대상으로 데이터모델 보다는 문제발생 시점의

데이터 모델과 성능 데이터베이스 성능


향상을 목적으로
설계단계의 데이터
SQL을 중심으로 집중하여 튜닝을 한다,
② 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 증가한다.
③ 데이터모델은 성능을 튜닝하면서 변경이 될 수 있는 특징이 있다.
모델링 때부터 성능과
④ 분석/설계 단계에서 성능을 고려한 데이터모델링을 수행할 경우 성능
관련된 사항이 데이터
저하에 따른 Rework비용을 최소화 할 수 있는 기회를 가지게 된다.
모델링에 반영될 수
있도록 하는 것이다.

32 아래 설명을 읽고 다음 _ 에 들어갈 단어를 작성하시오.

아래

제 1 절 성능 데이터 모델링의 개요 첫번째, 데이터모델링을 할 때 정규화를 정확하게 수행한다.


제 2절 정규화와 성능 두번째,데이터베이스 용량산정을 수행한다.
제 3절 반정규화와 성능 세번째,데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

제4 절 대량 데이터에 따른 성능 네번째, 용량과 트랜잭션의 유형에 따라 1 3


( ) ~1를 수행
한다.
제5 절 데이터베이스 구 조와 성능
다섯번째,이력모델의 조정, PK/FK조정,슈퍼타입/서브타입 조정
제 6 절 분산 데 이 터 베 이 스 와 성능 등을 수행한다.

33 다음 중 아래에서 성능을 고려한 데이터 모델링의 순서로 가장 적절한


것은?

아래

가. 데이터 모델링을 할 때 정규화를 정확하게 수행한다.


나. 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
다. 데이터베이스 용량산정을 수행한다.
라. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
마. 성능관점에서 데이터 모델을 검증한다.
바. 이력모델의 조정,PK/FK조정,슈퍼타입/서브타입 조정 등을 수
행한다.

① 가-나-다-라-마-바
② 가-나-다-라-바-마
③ 가-다-라-바-나 一 마
④ 가-다-라-나-바-마

22 I SQL 자격검정 실전문제


I . 데이터 모델링의 이해

34 다음 중 성능데이터 모델링을 할 때 고려사항으로 가장 부적절한 것은? 36 다음 중 아래 '일자별매각물건’ 엔터티에 대한 설명으로 가장 적절한


것은?
① 데이터 모델링의 정규화는 항상 조회 성능저하를 나타내므로 반정규화
관점에서만 성능을 고려하여 설계하도록 한다.
② 용량산정은 전체적인 데이터베이스에 발생되는 트랜잭션의 유형과 양을
매각꿈건 i 자i 매각글건
분석하는 자료가 되므로 성능데이터 모델링을 할 때 중요한 작업이 매각일자_ 매각내역
매각일자
될 수 있다. 층매각금액
③ 물리적인 데이터 모델링을 할 때 PK/FK의 칼럼의 순서조정, FK인덱스 § 유찰금액

과목 I ■
끙매각글건수
생성 등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소가 된다. S 유찰물건수

④ 이력데이터는 시간에 따라 반복적으로 발생이 되기 때문에 대량 데이터일 2:만권

데이터모델링의이해
가능성이 높아 특별히 성능을 고려하여 칼럼 등을 추가하도록 설계해야
^다 .
① 1차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:
M

35 아래와 같은 보관금원장 엔터티에서 관서에 대한 정보가 반정규화 되어 관계가 될 수 있다.


② 1차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:1
있기 때문에 관서정보를 조회할 때 성능저하가 발생하고 있다. 이 엔터티에
관계가 될 수 있다.
대해 몇 차 정규화가 필요한 지와 분리된 스키마 구조를 가장 바르게
③ 2차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:
M
짝지은 것은?
관계기- 될 수 있다.

아래 ④ 2차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:1


관계가 될 수 있다.
[보관금원장]
관서 번호
납부자번호

관리 점번호
관서명
싱-태
관서등록일자
직급명
통신 번호

1관서번호, 납부자번호} - {직급명, 통신번히


1관서번하 -> {관리점번호, 관서명,상태,관서등록일자}

① 2차 정규화 - 정규화테이봄m 서번호. 납부자번호,관리점번호,관서명,


상태,관서등록일자}
② 3차 정규화 - 정규화테이블{관서번호. 납부자번호. 관리점번表 관서명,

상태, 관서등록일자}
③ 2차 정규화 - 정규화테이블{관서번호. 관리점번호,관서명,상태,관서
등록일자}
④ 3차 정규화 - 정규화테이봄{관서번호. 관리점번호,관서명,상태, 관서
등록일자}

SQL 자격검정 실전문제 1 2 3 24 I SQL 자격검정 실전문제


I . 데이터 모델링의 이해

37 아래의 데이터 모델처럼 동일한 유형의 속성이 칼럼단위로 반복되는 핵심정리 38 다음 중 아래 '일재고' 엔터티에 대한 설명으로 가장 적절한 것은?
경우가 실제 프로젝트를 하면서 많이 발생 될 수 있다. 다음 중 아래와

같이 전제조건이 있을 때 테이블에서 나타날 수 있는 현상으로 가장


적절한 것은? 입재고_____________
물유센터3 드
아래 .재고일及_________
■ 초제고수 if
전제조건 : 유형기능분류코드에 해당하는 속성들은 분포도가 양호 장기 1 고 1개월수량
장기 제고2개1 수량
하며, SQL Where절에서 각각의 값이 상수값으로 조건 입력될 수 장기 1 고3개1 수 ■
있는 특징을 가진다. 장기재고 1개 I 주문수 t
장기재고幻H■주문수량
장기재고幻!! 월 주문수 t
SS
장기재고 1개1 금액
里 2! 코드

S제 D
s
장기 1 고2개1 금액

명 가
s
S 기 1 고3개■곱액


si
장기1 고 1개 ■주문금액

nt
UI

장기재고幻H■주문금액



U
장기재고.3개 ■푸은금액
A유형기능2 W코드1
3유S 기능S W 코드2
C유S 기능S W 코드3
0유疫기능분류코드4
E유험기능분큐코드5
F유험기능분W코드5 ① 1차 정규화가 필요한 엔터티로서 일재고와 일재고상세로 1:M의 관계가
6유S 기능분유코드7
H유형기능분유코드8 될 수 있다.
I 유형기능분유코드9
② 1차 정규화가 필요한 엔터티로서 일재고와 일재고상세로 1:1의 관계가
될 수 있다.
③ 2차 정규화가 필요한 엔터 티로서 일재고와 일재고상세로 1:M의 관계가
될 수 있다.
④ 2차 정규화가 필요한 엔터티로서 일재고와 일재고상세로 1:1의 관계가
될 수 있다.
① 조회 조건이 유형기능분류코드에 따라 반복되는 그룹이 칼럼단위로
되어 있으므로 제 1정규형이라고 할 수 있다.
중복속성에 대한 분리가 1 39 1 다음 중 아래와 같이 수강지도 엔터티를 만들었을 때 이에 해당하는
② 유형기능분류코드에 대해 Where절에 조건으로 들어오는 값이 있으므로
1차 정규화의 대상이 되며,
정규형과 정규화의 대상으로 가장 바르게 짝지어진 것은?
PK와 이에 대한 Index만 있으면 SQL문장은 빠르게 수행될 수 있다고
로우단위의 중복도 1차
할 수 있다. 정규화의 대상이 되지만
아래
③ 유형기능분류코드가 일반속성 안에서 반복적으로 속성이 구분되어 있기 칼럼 단위로 중복이 되는
때문에 이전종속을 수행해야 하는 제 2정규형이라 할 수 있다. 경우도 1차 정규화의 [수강지도] ^수종속성 (FD)

④ 유형기능분류코드 각각에 대하여 개별로 Index를 모두 생성할 경우 대상이다. 학번


1. 학번 II 과목번호 ᅳ 성적
과목코드
입력, 수정,삭제 때 성능이 저하되므로 제1차 정규화를 수행한 후 인덱
성적 2 . 학번 ᅳ 지도교수명
스를 적용하는 것이 좋다.
지도교수명
3. 학번 一 학과명
학과명

① 1차 정규형 - 2차 정규화 대상
② 2차 정규형 - 3차 정규화 대상
③ 3차 정규형 - 보이스코드 정규화대상
④ 보이스코드정규형 - 4차 정규화 대상

26 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 2 5
I . 데이터 모델링의 이해

핵심정리 40 다음 중 데이터 모델에 대한 반정규화를 고려할 때 판단요소에 대한 핵심정리 42 다음 중 칼럼에 대한 반정규화 기법으로 가장 부적절한 것은?
설명으로 가장 적절한 것은?
① 중복칼럼을 추가 - 조인감소를 위해 여 러 테이블에 동일한 칼럼을
반정규히'는 정규화된 반정규화 절차
① 반정규화 정보에 대한 재현의 적시성으로 판단한다. 예들 들어, 빌링의 갖도록 한다.
엔터티,속성,관계에 대해 1. 반정규화 대상조사
잔액(balance)은 다수 테이블에 대한 다량의 조인이 불가피하므로 데 • 범위처리빈도수 조사 ② 파생칼럼을 추가한다 - 조회 성능을 우수하게 하기 위해 미리 계산된
시스템의 성능향상과
개발(Development)과 이터 제공의 적시성 확보를 위한 필수 반정규화 대상 정보이다. • 대량의 범위 처리 조사 칼럼을 갖도록 한다.
운영 (Maintenance)의 ② 탐색 대상 데이터의 크기로 판단한다. 왜냐하면 다량 데이터에 대한 • 통계성 프로세스 조사 ③ FK에 대한 속성을 추가한다 - FK관계에 해당하는 속성을 추가하여
단순하를 위해 중복, 통합, 인덱스를 활용한 탐색은 Random처리의 특성으로 성능 저하가 불가피 • 테이블 조인 개수 조인성능을 높인다.
분리 등을 수행하는 하다. ④ 이력테이블에 기능 칼럼을 추가한다.-최신값을 처리하는 이력의
데이터 모델링의 기법을 2. 다른 방법유도 검토 특성을 고려하여 기능성 칼럼을 추가한다.
③ RDBMS는 현재 레코드 기준으로 이전 또는 이후 위치의 레코드에 대한
의미한다. 반정규화는 • 뷰(VEW ) 테이볼
접근이 원천적으로 불가능하므로 반정규화를 하지 않으면 해당 정보에
데이터를 중복하여 성능을 • 클러스터링 적용
대한 데이터 접근 자체가 불가능하다. • 인덱스의 조정
향상시키기 위한
기법이라고 정의할 수 ④ 반정규화 테이블은 집계 테이블에 국한하여 적용하도록 한다. • 응용애플리케이션
있고 좀 더 넓은 의미의
반정규화는 성능을 3. 반정규화 적용 43 다음 중 아래의 주문,주문목록, 제품에 대한 데이터모델과 이를 이용하여
향상시키기 위해 정규화된 • 테이블 반정규화
데이터를 조회하는 SQL문에서 조회를 빠르게 수행하기 위한 반정규화
데이터 모델에서 중복, • 속성의 반정규화
41 다음 중 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중히'된 칼럼들이 방법으로 가장 적절한 것은?
통합,분리 등을 수행하는 • 관계의 반정규화
모든 과정을 의미한다. 있을 때 디스크 I셔 를 줄이기 위해 해당 칼럼들을 별도로 모아놓는 반정
규화 기법으로 가장 적절한 것은? 아래
데이터 무결성이 깨질 수
있는 위험을 무릅쓰고
데이터를 중복하여 ① 칼럼추가 - 부분칼럼 추가
반정규화를 적용하는 ② 칼럼추가 _ 중복칼럼 추가
이유는 데이터를 조회할 ③ 테이블추가 _ 중복테이블추가
때 디스크 1/◦량 이 많아서 ④ 테이블추가 _ 부분테이블추가
성능이 저하되거나 경로가 SELECT A. 주 문 번 호 ,SUM(C. 단가)
너무 멀어 조인으로 인한 FROM 주 문 A , 주 문 목 록 B,제 품 C

테이블의 반정규화 칼럼의 반정규화 WHERE A. # 번호 = ‘2015-02-001’


성능저하가 예상되거나
AND A . 주 문 번 호 = B. 주 문 번 호
칼럼을 계산하여 읽을 때 반정규화 기법 ___________반정규화 기법__________
기법분류 AND B. 제 품 번 호 = C. 제 품 번 호
성능이 저하될 것이 1:1 관계 테이블병합 __________ 중복칼럼 추가 GROUP BY A 주 문 번 호
예상되는 경우 반정규호®
테이블병합 1:
M 관계 테이블병합 파생칼럼 추가__________
수행하게 된다.
슈퍼/서브타입 테이블병합 이력테이블 칼럼추가
① 제품 엔터티에 단가를 합한 계산된 칼럼을 추가하도록 한다.
수직분할 P K 에 의한 칼럼 추가
테이블분할 ② 주문목록 엔터티에 단가를 합한 계산된 칼럼을 추가하도록 한다.
수평분할 응용시스템 오작동을 위한 칼럼 추가
③ 주문 엔터티에 단가를 합한 계산된 칼럼을 추기-하도록 한다.
중복테이블 추가
④ 제품 엔터티에 최근값 여부에 대한 칼럼을 추가하도록 한다.
통계테이블 추가
테이블추가
이력테이블 추가
부분테이블 추가

28 | SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 2 7
I. 데이터 모 델 링 의 이해

-公

핵심정리 „ 다음 중 칼럼수가 많은 테이블에 대한 설명으로 가장 적절한 것은?

① 한 테이블에 많은 칼럼을 가지고 있으면 조인이 발생되지 않아 여러


개 테이블일 때에 비해 성능이 항상 우수하다고 할 수 있다.
② 로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우

조회성능저하가 발생할 수 있다. 한 테이블내에서 칼럼의 위치를 조정


하면 디스크 I / O 가 줄어들어 조회 성능을 향상 시킬 수 있다.
반정규화의 대상에 대해
③ 로우체이 닝 이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우

과목
다른 방법으로 처리
조회성능저하가 발생할 수 있다, 트랜잭션이 접근히는 칼럼유형을 분
• 지 나 치 게 많은

I
.데이터 모델링의 이해
석하여 1:1로 테이블을 분리하면 디스크 I/O 가 줄어들어 조회 성능을
조 인 (JOIN )이 걸려
데이터를 조회 하 는 향상 시킬 수 있다.
작업이 기 술 적 으 로 ④ 로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우

어 려 울 경우 뷰 조회성능저하가 발생할 수 았다. 그러나 이를 분리할 경우 조인으로


(VIEW)를 사 용 하 면
인한 성능 저하가 더 심하게 나타날 수 있으므로 감수하는 것이 좋다.
이를 해 결 할 수도 있다.
• 대량의 데 이 터 처 리 나

부 분 처 리 에 의해

성능이 저 하 되 는
경우에 클 러 스 터 링 을

적용하거나 인덱스를
조 정 함 으 로 써 성능 을
46 아래 설명에서 데이터 액세스 성능을 향상시키기 위해 적용하는 방법에
향 상 시 킬 수 있다.
대해서 _ 을 채우시오.
• 대량의 데 이 터 는
① 공급자별로 최근에 변경된 전화번호,메일주소,위치와 공급자 이름을
Primary Key의 성격에
같이 조회할 때 이 값들을 공급자 테이블에 반정규화로 갖고 있는 경우 아 래
따라 부 분 적 인
에 비해 조회 성능이 저하되지 않는다. 테이블로 분 리 할 수
하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고
② 데이터를 조회할 때 과도한 조인으로 인해 조회성능이 저하될 수 있으 있다. 즉 파티셔닝 기법 테이블을 몇 개로 쪼개도 성능이 저하되는 경우가 있다. 이때 논리적
므로 공급자 테이블에 가장 빈번하게 조회되는 값인 최근 변경값에 (Partitioning)0| 으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리
적용되어 성 능 저 하 를 하여 데이터 액세스 성능도 향상시키고,데이터 관리방법도 개선할
해당하는 전화번호, 메일주소, 위치를 반정규화하여 조회 성능을 향상
방 지 할 수 있다. 수 있도록 테이블에 적용하는 기법을 I 石) I 이라고 한다.
시킬 수 있다.
• 응용 애 플 리케이션에서
③ 전화번호,메일주소, 위치에 대한 가장 최근에 변경된 값을 알 수 있도
로직을 구사하는
록 최신여부 라는 속성을 추가함으로써 최근 값을 찾기 위한 조회 성능
방 법 을 변경 함 으 로 써
저하를 예방할 수 있다. 성능을 향상시킬 수
④ 조회 성능을 위해서는 하나의 테이블로 통합하여 전화번호, 메일주소, 있다.

위치 등이 변경될 경우 전체 속성이 계속 발생되는 이력의 형태로 설계


될 수 있다. 이럴 경우 조회에 대한 성능은 향상이 되나,과도한 데이터
가 한 테이블에 발생하게 되어 용량이 너무 커지는 단점이 있다.

SQL 자격검정 실전문제 I 2 9 3 0 I SQL 자격검정 실전문제


I . 데이터 모 델 링 의 이해

-分

다음 중 아래 데이터 모 델 과 SQL 문에 대해 개선해야 할 사항에 대한 I 的 | 다음 중 아래와 같은 '현금출급기실적1 테이블과 이 테이블에서 데이터를


핵심정리 47
설명 으 로 가장 적절 한 것 은 ? 조회할 때 사용되는 아래의 SQL패턴에 대한 설명으로 가장 적절한 것은?

슈퍼/서브 타입 데이터
아 래 아 래
모델의 변환기술
• 개별로 발생되는
[긴 급 사 건 ] [특 수 사 건 ] [일 반 사 건 ] 현 금 f 굼기실적

거사콜명
대무금세
일 소
자 코 먼 먼
트랜잭션에 대해서는
긴급사건 번호 특수사건 번호 일반사건 번호

^ 5 #-
개별 테 이 블 로 구성
SELECT 건수,금액
사건명 사건명 사건명 FROM 현금출급기실적
>1


• 슈 퍼 타 입 +서 브 타 입 에
발생일시 발생일시 발생일시 WHERE 거래일자 BETWEEN

건금
4적
대해 발 생 되 는
'20140701' AND '20140702'
SELECT 긴급사건번호,사건명 FROM 긴급사건 WHERE 발생일시 = ‘20150905’
트 랜 잭 션 에 대 해서는 AND 사무소코드 = '000368'
UNION ALL
슈 퍼 타 입 +서브타입
SELECT 특 수 사 건번호, 사건명 FROM 특수사건 WHERE 발생일시 = ‘20150905’
테 이 블 로 구성
UNIONALL
• 전 체 를 하 나 로 묶어 SELECT 일반사건번호, 사건명 FROM 일반사건 WHERE 발생일시 : ‘20150905’
(단 ,PK 인덱스는 설계된 순서 그대로 생성함)
트랜잭션이 발생할

때 는 하 나 의 테 이블로 務 전제조건 : 위 세 테 이 블 은 함께 조 회 하 는 경 우 가 대부분이고 아직 시스템을


오픈하지 않았다.
① 사무소코드가 로 상수값이 들어 왔고, 거래일자가 범위 BETWEEN’
구성
으로 들어왔기 때문에 거래일자+사무소코드 + 출급기번호 + 명세표

① UNION ALL로 조회하면 정렬로 인한 성능이 저하되므로 UNION으로 번호로 구성된 PK인텍스는 최적의 효율성을 가지고 있음.

조합하여 조회한다. ② 乂!
■무소코드가 로 상수값이 들어 왔고, 거래일자가 범위 'BETWEEN’

② 긴급사건, 특수사건, 일반사건을 하나의 테이블로 통합하고 P뜬를 사건 으로 들어왔기 때문에 PK의 순서를 사무소코드 + 출급기번호 + 명세

분류코드 + 사건번호로 조합하여 구성하도록 한다. 표번호 + 거래일자로 바꾸고 인덱스를 생성하는 것이 성능에 유리함.
③ 사무소코드가 로 싱수값이 들어 왔고,거 래일자가 범위 ’BETWEEN’
③ 긴급사건, 특수사건,일반사건 테이블을 개별로 유지하되 … 에 사건
분류코드를 포함하도록 한다. 으로 들어왔기 때문에 PK의 순서를 거래일자 + 출급기번호 + 명세표
번호 + 사무소코드로 비꾸고 인덱스를 생성하는 것이 성능에 유리함.
④ 세 개의 테이블을 그대로 유지하되 반정규화된 형태의 통합테이블을
④ A ]•무소코드가 로 4 V수값이 들어 왔고,거 래일자가 범위 ’BET W EEN
하나 더 생성하여 조회의 성능을 향상하도록 한다.
으로 들어왔기 때문에 PK의 순서를 시-무소코드 + 거래일자 + 출급기
번호 + 명세표번호로 바꾸고 인덱스를 생성하는 것이 성능에 유리함.

48 다음 중 논리데이터모델의 슈퍼타입과 서브타입 데이터모델을 물리적인

테이블 형식 으 로 변환할 때 설명으로 가장 부적 절 한 것 은 ?

① 트랜잭션은 항상 전체를 대상으로 일괄 처리하는데 테이블은 서브타입


별로 개별 유지하는 것으로 변환하면 Union 연산에 의해 성능이 저하

될 수 있다.
② 트랜잭션은 항상 서브타입 개별로 처 리하는데 테이블은 하나로 통합

하여 변환하면 불필요하게 많은 양의 데이터가 집적되어 있어 성능이

저하될 수 있다.
③ 트랜잭션은 항상 슈퍼+서브 타입을 함께 처리하는데 개별로 유지 하면

조인에 의해 성능이 저하될 수 있다.


④ 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 하나로 통합되어
있으면 데이터 집적으로 인해 성능이 저하될 수 있다.

〇 分

SQL 자격검정 실전문제 I 31 3 2 I SQL 자격검정 실전문제


I. 데 이터 모 델 링 의 이해

핵심정리 I 50 1 다음 중 아래의 엔터티와 이 엔터티를 매우 빈번하게 참조하는 SQL 의 5 1 __ 다음 중 아래 데이터모델에 표현된 FK(Foreign Key )에 대한 설명으로
핵심정리
성능에 대한 설명으로 가장 적 절한 것 은 ? 가장 적절 한 것을 2 개 고 르 시 오 .

… 순서를 결정하는 기준은


인덱스 정렬구조를 이해한
상태에서 인덱스를 효율적

으로 이용할 수 있도록

PK 순 서 를 지 정 해 야 한다.
즉 인 덱 스 의 특 징 은 여러
개의 속 성 이 하나의

인 덱 스 로 구 성 되 어 있을
때 앞쪽에 위 치 한 속 성 의

값이 비 교 자 로 있 어 야

인덱스가 좋은 효율을
단,학사기준과 수강신청은 조인하여 정보를 조회할 업무가 많음
나타낼 수 있다. 앞쪽에
위 치 한 속성 값이 가급적 ① 학사기준번호는 부모 테이블에 이미 인덱스가 존재하기 때문에 상속받아
'=' 아니면 최 소 한 범위
생긴 수강신청에는 학사기준번호 칼럼에 대한 별도의 인덱스가 필요
' BETWEEN ' ‘< 가 ① 명세번호를 실적 테이블에 맨 처음 칼럼으로 옮기면 PK 인텍스의 이용
하지 않다.
들 어 와 야 인덱스를 이용할 효율성이 향상된다.
② 학사기준번호는 부모 테이블에 이미 인덱스가 존재하나 수강신청과
수 있는 것이다. 분산 데이터베이스 장단점
② 지사코드에 대해 입력 값이 EQUAL 조건으로 사용되므로 지사코드를
조인에 의한 성능저하 예방을 위해 상속받아 생긴 수강신청에도 학사기
장점
실적 테이블의 맨 처음 위치로 옮겨서 일자 칼럼의 앞에 두면 인텍스
• 지역 자 치 성 , 점증적 준번호 칼럼에 대한 별도의 인덱스가 필요하다.
이용 효율성이 높아진다.
시스템 용 량 확 장 ③ 데이터모델에서는 관계를 연결하고 데이터베이스에 FK제약조건 생성을
③ 일자가 SQL문장의 Where절에 첫 번째 조건으로 나왔으므로 칼럼 순서
• 신 뢰 성 과 가용성 생략하는 경우에 학사기준번호에 대한 인덱스를 생성할 필요가 없다.
에서도 첫번째에 위치하는 것이 효율성이 높다. • 효용성 과 융통성 ④ 데이터모델에서는 관계를 연결하고 데이터베이스에 FK제약조건 생성을
④ 일자, 명세번호,지사코드로 칼럼 순서를 바꾸어야 일자 범위에 대한 • 빠른 응 답 속 도 와
생략하는 경우에도 데이터의 조인관계가 필요하므로 학사기 준번호에
내용을 먼저 식별하고,그 다음으로 지사코드를 찾기에 용이할 수 있으 통신비용 절감
대한 인덱스를 생성할 필요가 있다.
므로 이때 인덱스의 효율성이 가장 높다. • 데이터의 가 용 성 과

신뢰 성 증 가

• 시스 템 규 모 의 적절한

조절 52 다음 중 데이터가 여러 지역에 분산되어 있지만 하나의 데이터베이스처럼


• 각 지역 사 용 자 의 요 구
사용하 기 를 원하는 분산 데이터베이스 환경에서 데이터베이스 분산
수 용 증대
설 계 를 적용하여 효율 성 을 증대 시 킬 수 없는 것 은 ?

단점
① 공통코드,기준정보 등 마스터 데이터는 분산데이터베이스에 복제분산을
• 소 프 트 웨 어 개 발 비용
적용한다.
• 오류 의 잠재성 증대
② 거의 실시간 (Near Real Time) 업무적인 특성을 가지고 있을 때 분산
• 처리 비용의 증대
• 설계, 관 리 의 복 잡 성 과 데이터베이스를 사용하여 구성할 수 있다.

비용 ③ 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수

• 불규칙한 응답 속도 있다.
• 통제의 어려움 ④ Global Single Instance(GSI)를 구성할 때 분산데이터베이스를 활용
• 데이터 무 결 성 에 대한
하여 구성하는 것이 효율적이다.
위협

SQL 자격검정 실전문제 I 33 3 4 I SQL 자격검정 실전문제


M
寒 ( m m .
SQL 기본 및 활용

제1장 SQL 기본 제2장 SQL 활용


제1절 관계형 데이터베이스 개요 제 1절 표준 조인
제2절 DDL 제2절 집합 연산자
제3절 DML 제3절 계층형 질의오ᅡ 셀프 조인
제4절 TCL 제4절 서브쿼리
제5절 WHERE 절 제5절 그룹 함수
제6절 함수 제6절 윈도우 함수
제7절 G roup B y , H aving 절 제7절 DCL
제8 절 O rder By 절 제8절 절차형 SQL
제9절 조인(JOIN )
제3장 SQL 최적화 기본 원리
제1절 옵티마이저와 실행계획
제2절 인덱스 기본
제3절 조인 수행 원리
핵심정리 다음 중 데이터 제 어 어 ( D CL ) 에 해 당 하 는 명 령 어 는 ?

'① IN況 :RT


데이터 제어어

SQL 기본 (DCL:Data Control


Language) :
② RENAME
© COMMIT
④ REVOKE
이터베이스에 접근하고

객체들을 사용하도록
권한을 주고 회수하는

명 령 어 를 DCL 이라고
SQL 문장들의 종류
부른다.
명령어의 종류 명령어 설명
데이터베이스에 들어 있는 데이터를 조회하거나 검색
SELECT 하기 위한 명령 어를 말하는 것으로 RETRIEVE 라고도
데이터 조작어 한다.
(DML! Data 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가
제1절 관계형 데이터베이스 개요 Manipulation INSERT 하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테
Language) UPDATE 이블에 새로운 행을 집어넣거나, 원하지 않는 데이터를
제2절 DDL
DELETE 삭제하거나 수정하는 것들의 명령어들을 DML이라고 부
제3절 DML 론다.
제4절 TCL 데이터 정의어 CREATE 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령
(DDL: Data ALTER 어들로 그러한 구조를 생성하거나 변경하거나 삭제
제5절 WH 타RE 절
Definition DROP 하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을
제6절 함수 Language) RENAME DDL이라고 부른다.

제7절 G roup B y , H aving 절 데이터 제어어


GRANT 데이터베이스에 접근하고 객체들을 사용하도록 권한을
(DCL: Data Control
제8절 O rder By 절 REVOKE 주고 회수하는 명령어를 DCL이라고 부른다.
Language)
제9절 조인(JOIN ) 트랜잭션 제어어
COMMIT 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를
(TCL:Transaction
ROLLBACK 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다.
Control Language)

다음 중 아래 내용의 범주에 해당하는 SQL 명령어로 옳지 않은 것 은 ?

아 래

테이블의 구조를 생성, 변경,삭제하는 등 데이터 구조를 정의하는


데 사용되는 명령어이다.

① CREATE
② GRANT
③ ALTER
④ DROP

4 0 I SQL 자격검정 실전문제


n . SQL 기본 및 활용

3 __ 아래 내용에 해당 하 는 SQL 명령어의 종 류를 작 성 하시오. 다음 중 아래의 데이터 모델과 같은 테이블 및 PK 제약조건을 생성하는
DDL 문장으로 을바른 것은? (단,DBMS는 O racle 을 기준으로 한다.)
아 래

논 리 적 인 작업의 단 위 를 묶어 DM L에 의해 조작된 결과 를 작업
단 위 (Transaction)별로 제어하는 명령어인 Commit, Rollback, PRODUCT [PB0BtJCT( >
Savepoint 등이 여기에 해당하며, 일부에서는 DCL(Data Control 」
PROD D: VARCHM12(10) NOT NULL * PEOILID VABCtttE2(10)
* PE0DJ1M VkECHAE2(100)
Language) 로 분류하기도 한다. PROD—NM: VARO W !2(100) NOT NULL * REG.DT DATE
REG _O T: DATE NOT NULL 0 EESEJfO NUMEEE(IO)
REGR_N O: NUMBER(10) NULL

[IE 표기법] [Barker 표기법]

① CREATE TABLE PRODUCT


( PROD—ID VARCHAR2(10) NOT NULL
4 __ 데이터베이스를 정의하고 접근하기 위해서는 데이터베이스 관리 시스
,PROD_NM VARCHAR2(100) NOT NULL
템과의 통신수단이 필요한데 이를 데이터 언어 (Data Language ) 라고
,REG一DT DATE NOT NULL
하며, 그 기능과 사용 목적에 따라 데이터 정의어( DDL), 데이터 조작어
,REGR_NO NUMBER(IO) NULL ) ;
( DML), 데이터 제 어어( DCL )로 구분 된 다 . 다음 중 데이터 언어와 SQL

과목
ALTER TABLE PRODUCT ADD PRIMARY KEY PRODUCT_PK ON
명령어에 대한 설명으로 가장 부 적 절 한 것 은 ?
(PROD_ID) ;

I
.
① 비절치적 데이터 조작어(DML)는 사용자가 무슨 데이터를 원하며, 어떻게 ② CREATE TABLE PRODUCT

S Q L
그것을 접근해야 되는지를 명세하는 언어이다. ( PROD—ID VARCHAR2(10)

기본 및 활용
② DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 ,PROD_NM VARCHAR2(100)

저장된 데이터베이스를 실질적으로 접근하는데 시용되 며 SELECT, ,REG_DT DATE

INSERT, DELETE, UPDATE 등이 있다. ,REGR_NO NUMBER(IO) ) ;

③ DDL은 스키마, 도메인,테이블,뷰, 인덱스를 정의하거나 변경 또는 ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK

제거할 때 사용되며 CREATE, ALTER, DROP, RENAME 등이 있다. PRIMARY KEY (PRODJD) ;

④ 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어들을 데이터 ③ CREATE TABLE PRODUCT

부속어 (Data Sub Language) 라고 한다. { PROD_ID VARCHAR2(10) NOT NULL


,PROD_NM VARCHAR2(100) NOT NULL
,REG_DT DATE NOT NULL
,REGR_NO NUMBER(IO) NULL
,ADD CONSTRAINT PRIMARY KEY (PROD ID) ) ;
5 __ 다음 중 데이터베이스 시스템 언어의 종류와 해당되는 명령어를 바르게
④ CREATE TABLE PRODUCT
연결한 것을 2개 고 르 시 오 .
( PR O D JD VARCHAR2(10) NOT NULL
,PROD_NM VARCHAR2(100) NOT NULL
① DML -SELECT
,REG_DT DATE NOT NULL
② TCL - COMMIT
,REGR_NO NUMBER(IO)
③ DCL - DROP
④ DML - ALTER • CONSTRAINT PRODUCT—PK PRIMARY KEY (PRODJD) ) ;

SQL 자격검정 실전문제 I 41


n . SQL 기본 및 활 용

아래와 같이 데이터가 들어있지 않은 왼쪽의 기관분류 테이블 (가 )를 핵심정리 아래 테이블 T , S , R 이 각각 다음과 같이 선언되었다. 다음 중 DELETE
핵심정리
오 른쪽 기관분류 테이블 (나 )처 럼 변경하고자 할 때 다음 중 올바룬 FROM T ;를 수행 한 후에 테이블 R 에 남아있는 데이터로 가장 적절한
SQL 문 장 은 ?(단 , DBMS는 SQLServer 로 가 정 한 다 .) 것은?
테이블 칼럼에 대한
정의 변경
• [Oracle ]
A LT E R T A B LE CREATE TABLE T
기관분류 기관분류
테이블명 분류ID: VARCHAR(10) NOTNULL 분류ID: VARCHAR(10) NOTNULL (C INTEGER PRIMARY KEY,
MODIFY 분류명:VARCHAR(10) NOTNULL 분류명:VARCHAR(30) NOTNULL D INTEGER) ;
등록일자:VARCHAR(1D)NULL ■록일자:DATE NOTNULL
(칼 럼 명 1 데 이 터 유 형
CREATE TABLE S
[D EFAU LT 식]
(가) (나) (B INTEGER PRIMARY KEY,
[NOT NULL ],
C INTEGER REFERENCES T(G) ON DELETE CASCADE) ;
칼 럼 명 2 데이터 유형

① ALTER TABLE 기관분류 ALTER COLUMN (분류명 VA及CHAR(30), CREATE TABLE R


(A INTEGER PRIMARY KEY,
등록일자 DATE NOT NULL) ;
• [SQ L S e rv e r] B INTEGER REFERENCES S(B) ON DELETE SET NULL) ;
② ALTER TABLE 기관분류 ALTER COLUMN (분류명 VARCHAR(30)
A LT E R T A B LE
NOT NULL, 등록일자 DATE NOT NULL) ; 현재 테이블 T, S, 묘의 상태는 다음과 같다.
테이블명

과목
A LT ER ③ ALTER TABLE 기관분류 ALTER COLUMN 분류명 VAECHAR(3〇 );
ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL;

K
(칼 럼 명 1 데이터 유형 C D : B C A B


[DEFAULT 식] [NOT ④ ALTER TABLE 기관분류 ALTER COLUMN 분류명 VAECHAR(30) 1 1 1 1 1 1

S Q L
2 1 2 1 2 2
NULL], NOT NULL;

기본 및 활용
칼 럼 명 2 데이터 유형
ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL;

① (1, NULL)과 (2, 2)


② (1, NULL) 과 (2, NULL)
③ (2, 2)
④ (1, 1)

NU니—
(ASCII 코 드 다음 중 NULL의 설명으로 가장 부 적 절 한 것 은 ?

0 0 번 )은 공 백 ( BLANK ,
ASCII 코 드 32번 )이 나 ① 모르는 값을 의미한다.

숫天卜 0(ZERO , ASCII ② 값의 부재를 의미한다.


제약조건의 종류 1ᄋ 다음 중 테이블 생성시 칼럼별 생성할 수 있는 제약조건(Constraints)에
48) 과 는 전혀 다른 ③ 공백문자 (Empty String) 혹은 숫자 0을 의미한다.
• PRIMARY KEY (기본키) 대한 설명으로 가장 부적 절 한 것 은 ?
값이며, 조건 에 맞는 ④ NULL과의 모든 비교 (IS NULL 제외)는 알 수 없음( Unknown)을 반환
• UNIQUE KEY (고 유 키 )
데 이 터 가 없을 때의
한다. • NOT NULL ① UNIQUE :테이블 내에서 중복되는 값이 없으며 NULL 입력이 불가능
공 집 합 과 도 다르다.
• CHECK 하다.
‘NU1丄 ,
은 ‘아직 정 의되지
• FOR티GNI KEY (외래키)
않은 미지의 값 '이 거 나
② PK :주키로 테이블당 1개만 생성이 가능하다.

‘현재 데 이 터 를 입력하지 ③ FK :외래키로 테이블당 여러 개 생성이 가능하다.

못 하 는 경우’를 의미한다. ④ NOT NULL :명시적으로 NULL 입력을 방지한다.

4 4 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 4 3
n . SQL 기본 및 활용

11 ③ CREATE TABLE EMP


다음 중 물리적 테이블 명으로 가장 적 절한 것 은 ?
핵심정리
(EMP_NO VARCHAR2(10) NOT NULL,
테이블 생성의 주의사항
① EMP—10 EMP—NM VAHCHAR2(30) NOT NULL,
• 테 이 블 명 은 객체 를
② 100-EMP DEPT—CODE VARCHAR2(4) DEFAULT '0000' NOT NULL,
의 미 할 수 있는 적 절 한
@ EMP-100 JOIN_DATE DATE NOT NULL,
이름을 사용한다.
④ 100一EMP REGIST—DATE DATE) ;
가능한 단수형을
권고한다. ALTER TABLE EMP ADD CONSTRAINT EMP—
PK PRIMARY KEY

• 테 이 블 명은 다른 (EMP—NO);
테이블의 이 름 과 CREATE INDEX IDX_EMP__01 ON EMP (JOIN—DATE);
중 복 되 지 않 아 야 한다. ④ CREATE TABLE EMP
12 아래와 같은 테이블 구조를 정의하려고 한다. 이때 아직 부서가 정의되지
• 한 테이 블 내 에서는
(EMP_NO VARCHAR2(10) NOT NULL PRIMARY KEY,
않은 사원은 기본부서(코드 :, )로 배치하고, 압사일지( JOIN_ DATE)
0000,
칼 럼 명 이 중복되게
EMP_NM VARCHAE2(30) NOT NULL,
지정 될 수 없다. 기준으로 많은 조회가 발생하므로 압사일자에 Index를 생성하려고 한다.
DEPT CODE VARCHAR2(4) DEFAULT '0000' NOT NULL,
• 테 이 블 이름을 다음 중 몰 바른 SQL 문 장을 2 개 고르 시 오
JOIN_DATE DATE NOT NULL,
지정하고 각 칼럼들은

괄 호 _'()" 로 묶어 REGIST_DATE DATE NULL ) ;

지정한다. ALTER TABLE EMP ADD CONSTRAINT EMP一PK PRIMARY KEY

과목
EMP
• 각 칼 럼 들 온 콤 마 "/로 (EMP—NO);
EMPJNJO: VARCHAR 2(10) NOT NULL

I
구 분 되 고 , 테이블 CREATE INDEX IDX_EMP_01 ON EMP (JOIN—DATE);


생성문의 끝은 항상 EMP . NM: VARCHAR 2(3D) NOT NULL

S Q L
D EP T _ CODE : VARCHAR 2(직) NOT NULL
세미콜론으로 J 01N_ D ATE : DATE NOT NULL

기본 및 활용
끝난다. R EG IST . D ATE : DATE NULL
• 칼럼에 대 해 서 는 다른
테이블까지 고려하여 13 다음 중 아래와 같은 문장으로 ’학생' 테이블을 생성한 후, 유효한 튜플
데이터베이스 (Tuple)들을 삽입하였다. SQL 1, SQL 2 문장의 실행 결과로 가장 적절한
내 에 서 는 일관성 있게 ① CREATE TABLE EMP
것은?
사 용 하 는 것이 좋다. (EMP_NO VARGHAR2(10) PRIMARY KEY,
(데 이 터 표 준 화 관점) EMP_NM VARCHAR2(30) NOT NULL ,
아 래
• 칼럼 뒤에 데이터 DEPT_CODE VARCHAR2(4) DEFAULT '0000' NOT NULL,
유형은 꼭 지정되어야 생성) create table 학생 (학번 char (8) primary key,
JOIN_DATE DATE NOT NULL,
장학금 integer) ;
한다.
REGIST_DATE DATE NULL ) ;
• 테이블명과 칼럼명은
CREATE INDEX IDX_ EMP_01 ON EMP (JOIN _ DATE) ; SQL1:select count(*) from 학생
반드시 문 자 로
SQL2:select count(학번) from 학생
시 작 해 야 하고,
© CREATE TABLE EMP
(EMP_NO VARCHAR2(10) PRIMARY KEY,
벤 더 별 로 길이에 대한

한 계 가 있다. EMP_NM VARCHAR2(30) NOT NULL, ① SQL1, SQL2 문장의 실행 결과는 다를 수 있으며,그 이유는 장학금
• 벤 더에서 사전에 DEPT_CODE VARCHAR2(4) DEFAULT '0000', 속성(Attribute)에 널(Null)값이 존재할 수 있기 때문이다.
정 의 한 예약어 JOIN_DATE DATE NOT NULL, ② SQL1, SQL2 문장의 실행 결과는 항상 다르다,
(Reserved word)는 ③ SQL1, SQL2 문장의 실행 결과는 항상 같다.
REGIST_DATE DATE ) ;
쓸 수 없다.
CREATE INDEX IDX EMP 01 ON EMP (JOINJDATE); ④ SQL1, SQL2 문장의 실행 결과는 다를 수 있으며, 그 이유는 회-번
• A - Z , a - z , 0-9, $,
속성 (Attribute) 에 널 (Null) 값이 존재할 수 있기 때문이다.
# 문 자 만 허용 된 다 .

SQL 자격검정 실전문제 I 4 5


n . SQL 기본 및 활용

o 내
"

-

14 17 아래 7개의 SQL 문장이 성공적으로 수행되었다고 할 때,A , B, C 세 개의


핵심정리 다음 중 외래키에 대한 설명 으 로 가장 부 적 절 한 것을 2개 고 르 시 오 .
SQL 문 장을 차례 대 로 실행하면 A 와 C 의 SELKTT 문 장 수 행 결 고 는
① 테이블 생성시 설정할 수 있다.
각각 무 엇 인 가 ?
② 외래키 값은 널 값을 가질 수 없다.
③ 한 테이블에 하나만 존재해야 한다. 아 래
④ 외래키 값은 참조 무결성 제약을 받을 수 있다.
CREATE TABLE 부서 (부서번호 CHAR(IO), 부서명 CHAR(IO),
PRIMARY KEY(부서번호));
15 다음 중 데이터베이스 테이블의 제약조건(Constraint)에 대한 설명으로
CREATE TABLE 직원 (직원번호 CHAR(IO), 소속부서 CHAR(IO),
가장 부 적 절 한 것 은 ? PRIMARY KEY(직원번호),
FOREIGN KEY(소속부서) REFERENCES 부서(부서번호)
① Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 ON DELETE CASCADE) ;
유지하기 위하여 테이블의 특정 컬럼(Column)에 설정하는 제약이다.
INSERT INTO 부서 VALUES('10', '영업과’);
② 기본키 (Primary Key)는 반드시 테이블 당 하나의 계약만을 정의할
INSERT INTO 부서 VALUES('20', '기획과’);
수 있다.
③ 고유키(Unique Key)로 지정된 모든 컬럼들은 Null 값을 가질 수 없다, INSERT INTO 직원 VALUES('100O', '10');
INSERT INTO 직원 VALUES('2000', ’20,);
④ 외래키(Foreign Key)는 테이블간의 관계를 정의하기 위해 기본키
INSERT INTO 직원 VALUES('3000', '20');

과목
(Primary Key)를 다른 테이블의 외래키가 참조하도록 생성한다. COMMIT;

I
■S
A. SELECT COUNT(직원번호) FROM 직원
16 4개의 칼럼으로 이루어진 티녀P 테이블에서 COMM 칼럼을 삭제하고자

Q L
테이블의 불필요한 B. DELETE FROM 부서 WHERE 부서번호 = ‘20’;
W\ ,® C. SELECT COUNT(직원번호) FROM 직원

기본 및 활용
칼럼 삭제 할 때, 아래 SQL 문장의 [ 안에 들어갈 내용을 기술하시오.
COMMIT;*1
8

ALTER TABLE
테이블명
① 3, null
DROP COLUMN MGR ENAME SAL COMM
7566 FORD 3000 ② 3, 1
삭 제 할 칼럼명;
7566 SCOTT 3000 ③ 3, 2
7698 JAMES 950 ④ 3, 3
7698 ALLEN 1600
7698 WARD 1250
7698 TURNER 1500
7698 MARTIN 1250
7782 MILLER 1300
7788 ADAMS 1100
7839 BLAKE 2850
18 STADIUM 테이블의 이름을 STA 이 U M JS C 로 변경 하 는 SQL 을 작성
7839 JONES 2980
하 시 오 . (ANSI 표준 기준)
7839 CLARK 2450
7902 SMITH 800
KING 5000

© TABLE EMP
© COMM;

O G

SQL 자격검정 실전문제 I 4 7 4 8 I SQL 자격검정 실전문제


n . SQL 기본 및 활용

19 표준 SQL (SQ L :1999>에서 테이블 생성시 참조관계를 정의하기 위해 핵심정리 11 J 아래와 같은 데이터 모델에서 데이터를 조작하려고 한다. 다음 중 오류가

외 래 키 (Foreign Key )를 선 언 한 다 . 관계형 데이터베이스에서 Child I 1


I 발 생 SQL 문장인 것 은 ?
Table 으I FK 데이터 생성시 Parent Tab le 에 PK 가 없는 경 우 ,Child 아 래
테이블에 데이터를
Table 데이터 입력을 허용하지 않는 참조동작 (Referential Action ) 인 입력하는 두 가지 유형 BOARD
것은? INSERT INTO 테이블명 BOARDJ D : VARCHAR2(10) NOT NULL
(COLUMNJJST ) BOARD_ NM: VARCHAR2(5Q) NOT NULL
① CASCADE USE _ VN: VARCHAR2(1) NOT NULL
VALUES
REG . DATE : DATE NOT NULL
② RESTRICT (COLUMNJJST 에. BOARD_ DESC : VARCHAR2(100) NULL
@ AUTOMATIC 넣을 V A L U E JJS T );

④ DEPENDENT
① INSERT INTO BOARD VALUES (1,,
Q6A,
, Y , SYSDATE, rQ&A 게시판);
INSERT INTO 테이블명
VALUES (D INSERT INTO BOARD (BOARD_ ID , BOARD_ NM, USE_ YN,

(전체 COLUMN에 넣을 BOARD_ DESC) VALUES (’100’,'FAQ', Y ,’FAQ 게시판’);


VA 니J E J J S T ); (D UPDATE BOARD SET USE_YN = rN' WHERE BOARD_ID =
④ UPDATE BOARD SET BOAED_ID = 200 WHERE BOARDJD = ’100,
;
입력된 데이터의 수정
아 래와 같은 SQL 문에 대해 삽입이 성공 하 는 SQL 문 은 ? UPDATE 테이블명

과목
1 22 I 아래 데이터 모델과 같이 고객과 주문 테이블이 생성되어 았으며,고객과
SET 수정되어야
주문 테이블에 입력되어 있는 데이터는 아래 표 와 같다. 이 때 FK_001

a
아 래 할 칼럼명 =


수 정 되 기 를 원하 는 이라는 제 약조건을 아래 SQL 과 같이 설 정 하 였 다 . 다음 중 오류 없이

S Q L
CREATE TABLE TBL 정상 적 으 로 수행 되 는 SQL 을 2개 고 르 시 오 .
새 로 운 값;
(

기 본 및 활용
ID NUMBER PRIMARY KEY, 아 래
AMT NUMBER NOT NULL,
고객 天□
-rtr
DEGREE VARCHAR2(1)
고객 ID:VARCHAR2(20)NOTNULL 주문번 호: VARCHAR2(20) NOT NULL

— —F K JI 며
고■ ■ ■ , ) ■ 고객 ID: VARCHAR2(20) NOT NULL (FK)
1. INSERT INTO TBL VALUES(1, 100) 가입일시 : DATE NOT NULL 주문일 A|: DATE NOT NULL
2. INSERT INTO TBL(ID, AMT, DEGREE) VALUES(2, 200, 'AB')
3. INSERT INTO TBL(ID, DEGREE) VALUES(4, 'X') [표 : 주문 데이테 [표 : 고객 데이테
4. INSERT INTO TBL(ID, AMT) VALUES(3, 300) 주문번호 고객 ID 고객 ID
주문일시 고객명 가입일시
5. INSERT INTO TBL VALUES(5, 500, NULL) (PK) (FK) (PK)
0001 C001 2013-12-24 C001 홍길동 2013-12-12
0002 C001 2013-12-25 0002 이순신 2013-12-13
0003 C002 2013-12-26
① 1, 2 0004 C002 2013-12-27
② 2, 3
③ 3, 4 [SQL]
ALTER TABLE 주문 ADD CONSTRAINT FK_001 FOREIGN KEY
④ 4, 5
(고객 ID)
REFERENCES 고객 (고객 ID) ON DELETE SET NULL;

① INSERT INTO 고객 VALUES ('0003', ’강감찬’, '2014-01-01');


② INSERT INTO 주문 VALUES ('0005', 'C003', '2013-12-28');
③ DELETE FROM 주문 WHERE 주문번호 IN (’0001、 '0002');
④ DELETE FROM 고객 WHERE 고객 ID = 'C002';

〇 o

5 0 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 4 9
n . SQL 기본 및 활용

-〇

23 개발 프로젝트의 표준은 모든 삭제 데이터에 대한 로 그를 남기는 것을


핵심정리 핵 심 정 리 26 다음 중 DELETE 오유TRUNCATE, DROP 명령어에 대해 비교한 설명으로
원칙으로 하고, 테이블 삭제의 경우는 허가된 인력만이 정기적으로 수행 가장 부 적 절 한 것을 2개 고 르 시 오 .
가능하도록 정하고 있다. 개발팀에서 사 용 용 도 가 없다고 판 단 한
① 특정 테이블에 대하여 WHERE 조건절이 없는 DELETE 명령을 수행하
STADIUM 테이블의 데이터를 삭제하는 가장 좋은 방법은 무 엇 인 가 ?
면 DROP TABLE 명령을 수행했을 때와 똑같은 결과를 얻을 수 있다.
① DELETE FROM STADIUM; ② DROP 명 령어는 테이블 정의 자체를 삭제하고,TRUNCATE 명 령 어는
② DELETE * FROM STADIUM; 테이블을 초기상태로 만든다.
③ TRUNCATE TABLE STADIUM; ③ TRUNCATE 명령어는 UNDO를 위한 데이터를 생성하지 않기 때문에
④ DROP TABLE STADIUM; 동일 데이터량 삭제시 DELETE보다 빠르다.
테이블에 입력된
데이터 조회 ④ DROP은 Auto Commit이 되고,DELETE와 TRUNCATE는 사용■자

SELECT Commit으로 수행된다.


[公 나 "DISTINCT] 24 아래의 고객지역 테이블을 대상으로 질의 결과와 같이 거주지와 근무지를
보고 싶은 칼럼명, 트랜잭션의 특성
보 고 싶 은 칼 럼 명 ,...
#르적하^天꾸 f t h (가라| SQL으| Q) 안에 들어갈 내용을 작성^ᅡ시오
• 원 天 병 (atomicity)
幻 데이터베이스 트랜잭션에 대한 설명으로 가장 부적절한 것을 2개 고르

시오.
FROM 해 당 칼럼둘이 트 랜 잭 션 에 서 정의된

있는 테이블명; 연산들은 모두
① 원자성(atomicity) :트랜잭션에서 정의된 연산들은 모두 성공적으로
[테이블 : 고객지역] [질의 결과] 성공적으로

과목
실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.
- ALL :Default 고객 ID (P K ) :저주지 근무지 거주지 근무지 실 행 되 던 지 아니면

I
② 일관성(consistency) :트랜잭션이 성공적으로 수행되면 그 트랜잭션이
옵 션 이 므 로 별도로 C001 서울 서울 서울 서울 전혀 실 행 되 지 않 은


C002 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

S Q L
표 시 하 지 않아도 된다. 서울 서울 울산 서울 상 태 로 남아 있 어 야

중복 된 데 이 터 가 C003 울산 서울 부산 부산 한다. (all or nothing) ③ 고립성(isolation) :트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을

기본 및 활용
C004 울산 서울
있어 도 모두 출력 한 다 . ■ ^ ^ ^ Kconsistency) 받아 잘못된 결과를 만들어서는 안된다.
C005 부산 부산
- DISTINCT :중복된 트 랜 잭 션 이 실행되기 ④ 지속성(durability) :트랜잭션이 실행 되기 전의 데이터베이스 내용이
데 이 터 가 있는 경우 전의 데 이 터 베 이 스
[SQL] 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의
1건 으 로 처리해서 내용이 잘못 되어 있지
SELECT [ I (5) ] 거주지, 근무지 내용에 잘못이 있으면 안된다.
출력한다. 않다면 트 랜 잭 션 이
FROM 고객지역;
실행된 이후에도
데이터베이스의 1 部 I 데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제
내용에 잘못이 있으면 점으로 가장 부 적 절 한 것을 2개 고 르 시 오 .
안 된다.
TRUNCATE TABLE 은 25 다음 중 아 래와 같은 상황에서 사 용 할 수 있는 SQL 명 령 어 는 ? • 고 립 성 ( isolation) ① Dirty Read :다른 트랜잭션에 의해 수정되었고 이미 커밋된 데이터를
테이블 자 체 가 삭제되는
트랜잭션이 실행되는
것이 아 니 고 해당 테이블에 읽는 것을 말한다.
도 중 에 다른
들 어 있 던 모 든 행들이 ② Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행
트랜잭션의 영향을
제거되고 저장 공간을 우리가 관리하는 데이터베이스의 "매출” 테이블이 너무나 많은 디스 했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에
크 용량을 차지하여 '때출” 테이블에서 필요한 데이터만을 추출하여 받아 잘못된 결과 를
재 사 용 가 능 하 도 록 해제 두 쿼리 결과가 다르게 나타나는 현상을 말한다.
별도의 테이블로 옮겨 놓았다. 이후 "매출” 원본 테이블의 데이터를 만 들 어 서 는 안 된다.
한다. 테이블 구 조 를 (受) Phantom Read:한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데,
모두 삭제함과 동시에,디스크 시성■량도 초기화 하고자 한디-. (단, "매 • 지속 성 (durability)
완전히 삭제하기 위해서는
출” 테이블의 스키마 정의는 유지한다.) 트랜잭션이 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상을
DROP TABLE 을 실행하면
성 공적으로 수행되면 말한다.
된다. ① TRUNCATE TABLE 매출; 그 트랜잭션이 갱신한 ④ isolation :트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아
② DELETE FROM 매출; 데이터베이스의
잘못된 결과를 만들어서는 안된다.
③ DROP TABLE 매출; 내용은 영 구 적 으 로

④ DELETE TABLE FROM 매출; 저장된다.

SQL 자격검정 실전문제 I 5 2 I SQL 자격검정 실전문제


n . SQL 기본 및 활용

29 테이블 A 에 대해 아 래와 같은 SQL 을 수 행 하 였 을 때 테이블 A 의 ID 핵심정리 _ _ 아래와 같은 테이블에 SQL구문이 실행되었을 경우 최종 출력 값을 작성


핵심정리
〇 〇 1,에 해당하는 최종 VAL 으| 값이 ORACI王에서는 200, SQL Server
, 하시오.
에서는 100이 되었 다 . 다음 설명 중 가장 부 적 절 한 것 은 ?(단 , AUTO BEGIN TRANSACTION
테이블 내 입 력 한

데 이 터 나 ,수 정 한 데이터, COMMIT은 FA LSE 로 설정되어 있다》 (B E G IN TRA N 구 문 도

삭 제 한 데이터에 대하여 가 능 )으 로 트 랜 잭 션 을
[품목] [SQ L 구 문 ]
COMMIT 이 전 에 는 변경 시 작 하 고 COMMIT BEGIN TRANSACTION
품 목 ID 단가
사 항 을 취 소 할 수 있는데 TR A N S A C T IO N (T R A N S A INSERT INTO 품목(품목 ID , 단가)
[테 이 블 : A ] 001 1000
데이터베이스에서는 CTIO N 은 생략 가능) 또 는 VALUES('005、2000)
002 2000
ID (P K ) VAL RO LLBA C K COMMIT
롤 백 ( ROLLBACK ) 기능을 003 1000
001 100 BEGIN TRANSACTION
사용한다. TR A N S A C T IO N (T R A N S A 004 2000
002 200 DELETE WHERE 삐 D=’002’
롤백 ( m i _ LBACK 》
은 C TIO N 은 생 략 가 능 )으 로
BEGIN TRANSACTION
데이터 변경 사항이 트랜잭션을 종료한다. UPDATE 품목 SET 단가=2000 WHERE
[SQL]
취 소되어 데이터의 이전 RO LLB A C K 구문을 단가 =1000
UPDATE A SET VAL = 200 WHERE ID = '001';
상 태 로 복 구 되 며 , 관련된 만나면 초|초의 BEG IN ROLLBACK
CREATE TABLE B ( ID CHAR(3) PRIMARY KEY) ;
TR A N SA C TIO N 시 점 刀卜天| SELECT COUNT(품목 ID) FROM 품목
행에 대한 ROLLBACK;
WHERE 단 가 대 000
잠 금 (LOCKING)이 풀 리 고 모 두 R01丄 B A C K 이

다른 사 용 자 들 이 데이터 수행된다.

과목
① ORAC내에서는 CREATE TABLE 문장을 수행한 후,묵시적으로 COMMIT이
변 경 을 할 수 있게 된다. ① 〇
수행 되어 VAL 값은 200이 되었다.

K
②2
② SQL Server에서는 ROLLBACK 문장에 의해 UPDATE가 취소되어

■S
③ 3

Q L
VAL 값은 100이 되었다.
④ 4

기보」및
③ ORACLE에서는 CREATE TABLE 문장 수행에 의해 VAL 값은 200이 저 장 점 (SAVEPOINT )을

되었지만, ROLLBACK 실행으로 인하여 최종적으로 B 테이블은 생성 정으[하면 롤백(ROLLBACK)

■용
할 때 트랜잭션에 포함된
되지 않았다.
전체 작 업 을 롤 백 하 는 32 아래의 상품 테이블의 데이터에 대하여 관리자가 아래와 같이 SQL문장을
④ 幻3L Server에서는 ROLLBACK 실행으로 인하여 UPDATE가 취소되
것이 아 니 라 현 시점에서 실행하여 데이터를 변경하였다. 데이터 변경 후의 상품 ID ’001'의 최종
었으며,최종적으로 B 테이블은 생성되지 않았다.
S.AV티d〇 INT까지
상품명 을 작 성 하시오.
트랜잭션으 j 일」
부만'

수 있다
아 래
30 아래 내용의 © © J , L 절 」 에 해 당 §1는 단 어 를 순 서 대 로 작 성
[테 이 블 : 상 품 ]
[Oracle ]
하시오.
SAVEPOINT SVPT1; 상 품 ID 상품명
001 TV

ROLLBACK TO S V P T 1 ;
© 은 데이터베이스의 논리적 연산단위로서 밀접히 [SQ L ]

관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다. BEGIN TRANSACTION;


[SQL Server ]
SAVE TRANSACTION SP1;
© 의 종료를 위한 대표적 명령어로서는 데이터에 대한 SAVE TRANSACTION UPDATE 상품 SET 상품명 = 'LCD-TV' WHERE 상품ID - '〇 〇 !';
변경사항을 데이터베이스에 영구적으로 반영하는 © 과 SVTR1; SAVE TRANSACTION SP2;
데이터에 대한 변경사항을 모두 폐기하고 변경전의 상태로 되돌리는 UPDATE 상품 SET 상품명 = ’평 면 -TV WHERE 상품 ID = '001';
© k i 있다. ROLLBACK ROLLBACK TRANSACTION SP2;
COMMIT;
TRANSACTION
SVTR1;

5 4 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 5 3
n . SQL 기본 및 활용

33 아래의 1 fj ) I 에 들 어 갈 내용을 적으시오. 3 6 __ 다음 SQL 문장 중 COI丄 IMN1의 값이 널( NUI丄 )이 아닌 경우를 찾아내는


핵심정리 핵심정리
문 장 으 로 가장 적절 한 것 은 ? (ANSI 표준 기준)
WHERE 절은 FROM 절 부정 비교 연산자
다음에 위치하며, • ! — ■같지 않다.
① SELECT * FROM MYTABLE WHERE C0 LUMN1 IS NOT NULL
조건식은 아래 내용으로 SQL을 사 용 하 여 데 이 터 베 이 스 에 서 데 이 터 를 조 회 할 때 원 하 는 데이터 • A= :같지 않다.
② SELECT * FROM MYTABLE WHERE COLUMN1 ◊ NULL
구성된다. 만 을 검 색 하 기 위해 서 SELECT, FROM 절 과 함 께 © 을 (를)
• 0 :같지 않다.
- 칼럼( Column) 명 (ISO 표 준 ,모 든 (受) SELECT * FROM MYTABLE WHE及E COLUMN1 卜 NULL
이용하여 조 회 되 는 데이터의 조건을 설정하여 데 이 터 를 제한할 수
(보통 조건식의 있다. 운영체제에서 ④ SELECT * FROM MYTABLE WHERE COLUMN1 NOT NULL
좌측에 위치) 사 용 가능)
_ 비교 연산자 • NOT 칼럼명 = :

- 문天!■
, 숫자, 표현식 ~ 와 같지 않다.
34 다음 중 SQL의 실행 결과로 가장 적절한 것 은 ?
(보통 조건식의 우측에 • NOT 칼럼명 ) :

위치) ~ 보 다 크지 않다.

- 비교 칼럼명
(JOIN 사용시) 37 아래와 같은 DDL 문장으로 테이블 생성하고, SQL 들을 수행하였을 때
EMP TBL
EMPNO SAL 다음 설명 중 옳은 것 은 ?

100 1500
연산자의 우선순위 200 3000

과목
① 괄호로 묶은 연산 300 2000
② 부정 연산자( NOT)
CREATE TABLE 서비스

K
SELECT COUNT(*)


③ 비교 연산자 FROM EMP_TBL
서비스번호 VARCHAR2(10) PRIMARY KEY,

S Q L
<=,>,〉
=,〈
,<=)와 WHERE EMPNO > 100 AND S A L 〉= 3000 OR EMPNO 200;
서비스명 VARCHAR2(100) NULL,
SQL 비교 연산자

기본 및 활용
개시일자 DATE NOT NULL
(BETWEEN a AND b, );
① 〇
IN ( list), 니KE , IS
NULL) ② 1 [SQL]

④ 논리 연산자 중 and, ③ 2 Q SELECT * FROM 서비스 WHERE 서비스번호 = 1;


© INSERT INTO 서비스 VALUES ('999',", '2015-11-11');
OR의 순으로 처리 ④ 3
© SELECT * FROM 서비스 WHERE 서비스명 = " ;
© SELECT * FROM 서비스 WHERE 서비스명 IS NULL;

_丄 으 | 연산 35 다음 중 SELECT COL1 + COL3 FROM TAB_ A ;의 결과로 가장 적절한


- NULL 값과의 ① 서비스번호 컬럼에 모든 레코드 중에서 ‘〇 〇 r 과 같은 숫자형식으로 하나의
것은?
연 산 등 ) 은 레코드만이라도 입력되어 反)은 오류 없이 실행된다.
NULL 값을 리턴 ② ORACLE에서 ©과 같 이 데이터를 입력하였을 때, 서비스명 컬럼에
- NULL 값과의 비교연산 공백문자 데이터가 입력된다.
TAB_A (레 코 드 3 건 )
(=)> = ,< ,
〈=)은
COL2 COL3 ③ ORACLE에서 ©과같이 데이터를 입력하고, © 과 같이 조회하였을 때,
COLl
거짓( FALSE )을 리턴
30 NULL 20 데이터는 조회된다.
- 특정 값보다 크다, 10 40
NULL ④ SQL Server에서 ©과같이 데이터를 입력하고, ⑯ 과 같이 조회하였을
적다라고 표현할 수 50 NULL NULL
때,데이터는 조회되지 않는다.
없음

① NULL ② 80 @ 150 ④ 50

10 NULL

60 NULL

SQL 자격검정 실전문제 I 55 5 6 I SQL 자격검정 실전문제


n . SQL 기본 및 활용

38
핵심정리 아래와 같이 월별매출 테이블에 데이터가 입력되어 있다. 다음 중 2014년 39 아래 테이블 스키마를 참조하여 SQL 문장을 작성하였다. 다음 중 결과가
11월부터 2015년 03월까지의 매출금액 합계를 출력하는 SQL 문장으로 다른 SQL 문 장 은 ?
BETWEEN a AND b
a와 b의 값 사이에 옳은 것 은 ?

있으면 된다.(a와 b 값이 아 래

포함됨) AI 비스_가입_____________________ SVC_JOIN


고객ID OUST ID: VARCHAR2(10) NOT NULL
[테이블 : 월별매출] 서비스ID SVCJD: VARCHAR2(5) NOT NULL
IN (list) 찌]출금액 가입일자 JOIN_YMD: VARCHAR2(0) NOT NULL
년 (PK) 월 (PK)
리스트에 있는 값 중에서 가입시 간 JOIN.HH: VARCHAR2(4) NOT NULL
2014 01 1000
서비스시작일시 SVC START DATE: DATE NULL
어느 하나라도 일치하면 2014 02 2000 서비스종료일시 SVC,END_DATE: DATE NULL
된다. 2014 03 3000
(논리) (물리)
2014 11 4000
2014 12 5000 ① SELECT SVCJD, COUNT(*) AS CNT
2015 01 6000 FROM SVC_JOIN
2015 02 7000
WHERE SVC_END_DATE >= TO^DATE('20150101000000',
2015 03 8000
'YYYYMMDDHH24MISS')
2015 11 9000
AND SVC__END_DATE <= TOJDATE(,
20150131235959、
2015 12 10000

과목

YYYYMMDDHH24MISS,
)

I
AND CONCAT(JOIN_YMD, JOIN_HH) = 12014120100'

*
① SELECT SUM(매출금액) AS 매출금액합계 GROUP BY SVC—ID;

S Q L
FROM 월별매출 ② SELECT SVC_ID, C〇 UNT(” AS CNT

가 본 및 활용
WHERE 년 BETWEEN '2014' AND '2015, FROM SVC—JOIN

AND 월 BETWEEN ’03' AND '12'; WHERE SVC_END_DATE >= TO_DATE('20150101', 'YYYYMMDD')

② SELECT SUM(매출금액) AS 매출금액합계 AND SVC_END_DATE < TO_DATE('20150201', 'YYYYMMDD')

FROM 월별매출 AND (JOIN_YMD, JOIN—HH) IN (('20141201', '〇 〇 '))

WHERE 년 IN {'2014', '2015') GROUP BY S V C JD ;

AND 월 IN ('11', '12', '03', ’04’, ’05’); ③ SELECT SVCJD, COUNT(*) AS CNT

③ SELECT SUM(매출금액) AS 매출금액합계 FROM SVC_JOIN

FROM 월별매출 WHERE '201501' = TO^CHAR(SVC_END_DATE, 'YYYYMM')

WHERE (년 - ’2014’ OR 년 = ’2015’) AND JOIN—YMD = '20141201'

AND (월 BETWEEN '01' AND '03' OR 월 BETWEEN ’11’ ’1幻; AND JOINJHH = '00'

④ SELECT SUM(매출금액) AS 매출금액합계 GROUP BY S V C JD ;

FROM 월별매출 ④ SELECT SVCJD, COUNT(*) AS CNT

WHERE 년 = '2014' AND 월 BETWEEN 'll 12’



FROM SVC_JOIN

OR 년' = '2015' 월 BETWEEN ’01’ '03' WHERE TO_DATE('201501\ 'YYYYMM') = SVC_END_DATE


AND JOIN—YMD | |JOIN—HH = ’2014120100,
GROUP BY SV CJD

O

SQL 자격검정 실전문제 I 57


5 8 I SQL 자격검정 실전문제
n . SQL 기본 및 활용

다음 중 아래와 같은 2 건의 데이터 상황에서 SQL 의 수행 결과로 가장


핵심정리 연산자의 종류

구분 연산자 연산자의 의미 적절한 것은? (단, 이해를 돕기 우(해 1 는 줄바꿈을 의미 ᅳ 실제 저장값이


= 같다. 아 님, CHR (10) :ASCII 값 一) 줄바 꿈 을 의미》
> 보다 크다.
비교
>= 보다 크거나 같다.
연산자
< 보다 작다.
TAB1
보다 작거나 같다.
BETWEEN a AND b a와 b 의 값 사이에 있으면 된다. (a와 b 값이 포함됨) ROWNUM C1 SELECT SUM(CG)
IN (list) 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다. 1 A FROM (
SQL
연산자 LIKE ’비교문자열1 비교문자열과 형태가 일치하면 된다.(%, _ 사용) 1 SELECT(LENGTH(C1) -
A LENGTH(REPLACE(C1,
IS NULL NULL 값인 경우
2 B CHR(IO))) + 1) CC
앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도
I FROM TAB1
AND 참(TRUE) 이 된다. 즉,앞의 조건과 뒤의 조건을 동시 에 만족
B
해야 한다.
논리 앞의 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되어 1
연산자
OR 야 결과도 참(TRUE) 이 된다, 즉, 앞뒤의 조건 중 하나만 참 B
(TRUE) 이면 된다.
NOT 뒤에 오는 조건에 반대되는 결과를 되돌려 준다.
j= 같지 않다. ① 2

과목
부정
,、 : 같지 않다. ② 3

n
비교 0 같지 않다. (iso 표준, 모든 운영체제에서 사용 가능)
③ 5


연산자 NOT 칼럼명 = ~와 같지 않다.
④ 6

S Q L
NOT 칼럼명 > 〜보다 크지 않다.
NOT BETWEEN a와 b 의 값 사이에 있지 않다.

기본 및 활용
부정 a AND b (a , b 값을 포함하지 않는다)
SQL 단일행 문자형 함수의 종류
NOT IN (list) list 값과 일치하지 않는다.
연산자 문자형 함수 함수 설명
I 致 NOT NULL NULL 값을 갖지 않는다,
LOWER(문자열) 문자열의 알파벳 문자를 소문자로 바꾸어 준다.
함수는 벤더에서 UPPER(문자열) 문자열의 알파벳 문자를 대문자로 바꾸어 준다.
제공하는 함수인 ASCII(문자) 문자나 숫자를 ASCII 코드 번호로 바꾸어 준다.
내장 함수(Built-in 40 1 아래와 같은 내장 함수에 대한 설명 중에서 옳은 것을 모두 묶은 것 은 ? CHR/ CHAR(ASCII 번호) ASCII 코드 번호를 문자나 숫자로 바꾸어 준다.
Function)와 사용자가 CONCAT Oracle, My SQL에서 유효한 함수이며 문자열1과 문자열2를 연결한
정의할 수 있는 (문자열1,문자열2) 다. 합성 연산자’1「(Oracle)나 V(SQL Server)와 동일하다.

함수(User Defined SUBSTR/SUBSTRING 문자열 중 m 위치에서 n 개의 문자 길이에 해당하는 문자를 돌려준다.


가) 함수의 입 력 행수에 따라 단일행 함수와 다중행 함수로 구분할 (문자열,m[,n 】
) n 이 생략되면 마지막 문자까지이다.
Rjnction)g L|-^ ^
LENGTH/ LEN(문자열) 문자열의 개수를 숫자값으로 돌려준다.
수 있다.
있다.
나) 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE의 SET 문자열의 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를
내장 함수는 다시 LTRIM 제거한다.(지정 문자가 생략되면 공백 값이 디폴트)
절에 사용이 가능하다.
단일행 함수(Single - 다) 1:M 관계의 두 테이블을 조인할 경우 M쪽에 다중행이 출력되므로 (문자열 [,지정문자]) SQL Server에서는 LTRIM 함수에 지정문자를 사용할 수 없다. 즉,

Row Function)와 공백만 제거할 수 있다. '


단일행 함수는 사용할 수 없다.
문자열의 마지막 문자부터 확인해서 지정 문자가 나타나는 동안 해당
다중행 함수(MultHRow 라) 단일행 함 수는 다중행 함 수 와 다르게 여러 개의 인수가 입력
RTRIM 문자를 제거한다.(지정 문자가 생략되면 공백 값이 디폴트)
Function)로 나눌 수 되어도 단일 값만을 반환한다.
(문자열 [,지정문자 ]) SQL Server에서는 LTRIM 함수에 지정문자를 사용할 수 없다. 즉,
있으며, 다중행 함수는 공백만 제거할 수 있다.
집계 함수(Aggregate 문자열에서 머리말, 꼬리말,또는 양쪽에 있는 지정 문자를 제거한다.
TRIM
① 가 (leading | trailing | both 가 생략되면 both가 디폴트)
Function), 그룹 함수 ([leading |trailing |both]
② 가,나 SQL Server에서는 TRIM 함수에 지정문자를 사용할 수 없다. 즉,
(Group Function), 지정문자 f r o m 문자열)
공백만 제거할 수 있다.
윈도우 함수(Window ③ 가,나,다
^ 주: Oracle함수/SQL Servei•함수 표시,7’ 없는 것은 공통 함수
Function) 구분된다. ④ 가,나,다,라

6 0 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 59
n . SQL 기본 및 활 용

Q— 分

42 오 라 클 환 경 에 서 날 짜 형 데 이 터 를 다 룰 경 우 , 아 래 SQL 결 과 로 가 장 44 팀별 포 지 션 별 FW,MF, DF, GK 포 지 션 의 인 원 수 와 팀별 전체 인원 수 를


핵심정리
적절한 것은? 구 하 는 SQL 을 작 성 할 때 결 과 가 다 른 것 은 ? (보 기 1은 SQL Server
DUAL 테이블의 특성
환 경 이 고 , 보 기 2 ,3 ,4 는 ORACLE 환 경 이 다 )
• 사 용 자 SYS 가 소유하며

모든 사용자가 액세스
SELECT TO_CH7VR(TO_DATE('2015.01.10 10', 'YYTY.MM.DD HH24') ① SELECT TEAM_ID,
가 능 한 테이 블 이 다 . + 1/24/(60/10), 'YYYY.MM.DD HH24: M I:
SS') FROM DUAL;
• SELECT ~ FROM ~
ISNULL(SUM(CASE WHEN POSITION = W THEN 1 END), 0) FW,

의 형 식 을 갖추기 위한 ISNULL(SUM(CASE WHEN POSITION = 'MF' THEN 1 END), 0) MF,


① 2015.01.10 l l :〇 l :〇 〇
일종의 DUMMY ISNULL(SUM(CASE WHEN POSITION = 'DF' THEN 1 END), 0) DF,
② 2015,01.10 10:05:00
테이블이 다. ISNULL(SUM(CASE WHEN POSITION = 'GK' THEN 1 END), 0) GK,
(D 2015.01.10 l 〇 :l 〇 :〇 〇
• DUMMY라는 문자열 C0UNT(*) SUM
④ 2015.01.10. 10:30:00
유 형 의 칼럼에 'X '라 는
FROM PLAYER
값이 들어 있는 행을
GROUP BY TEAMJD ;
1건 포 함 하 고 있다. 단일행 함수의 종류

종류 내용 함수의 에
② SELECT TEAMJD,
문자형 문자를 입력하면 문자나 L O W E R , U P P E R , S U B S T R /S U B S T R IN G ,

함수 숫자 값을 반환한다. L E N G T H / L E N , L T R IM , R T R IM , T R IM , A S C II, NVL(SUM(CASE POSITIONWHEN W THEN 1 END),0) FW,


A B S , M O D , R O U N D , T H U N C , S I G N ,C H R /C H A R ,
숫자형 숫자를 입력하면 숫자 값 NVL(SUM(GASE POSITIONWHEN 'MF' THEN 1 END),0) MF,
C E IL /C E IL IN G , F L O O R , E X P , L O G , L N , P O W E R ,

과목
함수 을 반환한다.
S IN , C O S , T A N NVL(SUM(CASE POSITIONWHEN 'DF' THEN 1 END),0) DF,
S Y S D A T E /G E T D A T E , E X T R A C T /D A T E P A R T ,

E
날짜형 DATE 타업의 값을 연산한 NVL(SUM(CASE POSITIONWHEN 'GK' THEN 1 END),0) GK,
T O _ N U M B E R (T O _ C H A R (d , 'Y Y Y Y ' |'M M ' |’D D ’))


함수 다. COUNTH SUM
/ Y E A R I M O N T H |D A Y

S Q L
변환형 문자, 숫자,날짜형 값의 T O _N U M B E R , TO一C H A R , T O _D A T E
FROM PLAYER
/

기본 및 활용
함수 데이터 타입을 변환한다. CAST, C O N V E RT

NULL N U L L 을 처리하기 위한 함
GROUP BY TEAMJD ;
N V L /IS N U L L , N U L L IF , C O A L E S C E
관련함수 수

③ SELECT TEAMJD,

NVL(SUM(CASE WHEN POSITION == W THEN 1 END), 0) FW,


43 아 래 는 SEARCHED _ CASE_EXPRESSION SQL 문 장 이 다 . 이때 人수용된
NVL(SUM(CASE WHEN POSITION =: 'MF' THEN 1 END), 0) MF,
SEARCHED _ CASE _ EXPRESSION 은 S 1MPLE_ CASE _ EXPRESSI0 N#
NVL(SUM(CASE WHEN POSITION == W THEN 1 END), 0) DF,
이 용 해 똑 같 은 기 능 을 표 현 할 수 있 다 . 아 래 SQL 문 장 의 [ § ] 안에
NVL(SUM(CASE WHEN POSITION == 'GK' THEN 1 END), 0) GK,
들 어 갈 표 현 을 작 성 하 시 오 . (스 칼 라 서 브 쿼 리 는 제 외 함 )
COUNT(*) SUM
FROM PLAYER

[SEARCHED_CASE_EXPRESSION 문장 사례] GROUP BY TEAM ID ;


SELECT LOG,
CASE WHEN LOC = 'NEW YORK’ THEN 'EAST'
④ SELECT TEAMJD,
ELSE ’ETC’
END as AREA NVL(SUM(CA湖 POSITION WHEN W THEN 1 ELSE 1 END),0) FW,
FROM DEPT ;
NVL(SUM(CASE POSITION WHEN ’MF,THEN 1 ELSE 1 END),0) MF,

[SIMPLE_CASE_EXPRESSION 문장 사례] NVL(SUM(CASE POSITION WHEN 'DF' THEN 1 ELSE 1 END),0) DF,
SELECT LOC, NVL(SUM(CASE POSITION WHEN 'GK' THEN 1 ELSE 1 END),0) GK,
CASE O COUNT(*) SUM
ELSE ’ETC’
FROM PLAYER
END as AREA
FROM DEPT ; GROUP BY TEAM ID ;

62 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 61
理. SQL 기본 및 활용

O 〇

45 1 다 음 중 아 래 TAB 1을 보 고 각 SQL 실 행 결 과 를 가 장 올 바 르 게 설 명 한 47 다 음 중 아래 데 이 터 를 가 지 고 있 는 티이P_Q 테 이 블 에 서 세 개 의 SQL


핵심정리 핵심정리
것을 고르시오. 결과로 가장 적절한 것은?
NUI丄 으| 특성
• 널 값 은 아직 정의되지 NULL 포 함 연산의 결과
N U LL + 2 2 + N U LL, 아 래
않은 값으로 0 또는
공 백 과 다르다. 0은 TAB1] N U LL - 2, 2 - N U LL, SELECT SAL/COMM FROM EMP_Q WHERE ENAME = ‘KING’;
숫 자 이 고 ,공 백 은 COL1 COL2 N U LL * 2, 2 * N U LL, SELECT SAL/COMM FROM EMP_Q WHERE ENAME = ‘FORD’;
하나의 문자이다. a NULL N U LL / 2, 2 / N U LL, SELECT SAL/COMM FROM EMP_Q WHERE ENAME = ‘SCOTT1;
M
• 테이블을 생성할 때 b 의 결 과 는 모 두 N U LL
c 3 ^ 단 , SCOTT의 COMM은 NULL 값 임
NOT NULL 또 는 이다.
d 4
PRIMARY KEY 로
e 3 EMP_Q
정의되지 않은 모 든
ENAME SAL COMM
데이터 유 형 은 널 값을
(문 자 타 입 ) (숫 자 타 입 ) (숫 자 타 입 )
포 함 할 수 있다. KING 0
① SELECT C0L2 FROM TAB1 WHERE COL1 = 'b' ; 300
• 널 값을 포 함 하 는 FORD 5000 0
— 실행 결과가 없다.(공집합)
연산의 경우 결 과 값도 SCOTT 1000
② SELECT ISNULL(COL2,'X') FROM TAB1 WHERE COL1 = 'a' ;
널 값이다. 모르 는
데이터에 숫 자 를 — 실행 결과로 상 를 반환한다.

과목
더 하 거 나 빼도 결고는 ③ SELECT COUNT(COLl) FROM TAB1 WHERE COL2 = NULL ; ① 0, NULL, NULL

K
마찬가지로 모르는 ᅳ 실행 결과는 1이다. ② 〇 , 에러 발 생 ,에러 발생
데 이터인 것과 같다. SELECT COUNT(COL2) FROM TAB1 WHERE COL1 IN ('b'/c ') ;

*S
® ③ 에러 발 생 , 에러 발 생 , NULL

Q L
• 결 과 값 을 N니!
丄 이 아닌
ᅳ 실행 결과는 1이다. ④ 〇 , 에 러 발 생 ,MJLL

기본 및 활용
다른 값욜 얻고자 할 때
NVL/ISNULL 함수 를
46 사 원 테 이 블 에 서 MGR의 값이 7698과 같 으 면 NULL을 표 시 하 고 , 같 지
사 용 한 다 . NULL 값의

대상이 숫 자 유형 않으 면 MGR을 표 시 하 려 고 한 다 . 아래 SQL 문 장 의 안에 들 어 갈 48 다 음 중 아 래 와 같 은 데이터 상 황 에 서 SQL 의 수 행 결 과 로 가 장 적 절 한


데이터인 경우 는 주 로 함수명을 작성하시오. 것은?
O(Zero )으 로 , 문 자
유형 데이터인 경 우 는
아 래
블랭크보다는 Y 같이

해 당 시 스 템 에 서 의미 SELECT ENAME, EMPNO, MGR, 1Q I (MGR, 7698) as NM TAB1


없는 문 자 로 바 꾸 는 FROM EMP ; C1 C2 C3 SELECT SUM(COALESCE
경 우 가 많다. 1 2 3 (Cl, C2, C3))
2 3 FROM TAB1
단 일 행 NUI丄 관련 함수의 종 류 3

일반형 함수 함수 설명
표현식1 의 결과값이 N U L L 이면^표현식2 의 값을 출력한다..
N V L ( 표현식 1, 표현식 2) /
단, 표현식1과 표현식2 의 결과 데이터 타입이 같아야 한다, ① 〇
IS N U L L (표현식 1, 표현식2)
NU LL 관련 가장 많이 사용되는 함수이므로 상당히 중요하다,
③ 1
표현식1이 표현식2 와 같으면 N U L L 을, 같지 않으면 표현식1을 리턴
N U L L IF (표현식1, 표현식 2) ③ 6
한다.
C O A L E S C E (표현식 1., 임의의 개수 표현식에서 NU LL이 아닌 최초의 표현식을 나타낸다. ④ 14
표현식2, … …) 모든 표현식이 N U L L 이라면 N U L L 을 리턴한다.

技 주: Oracle함수/SQL Server함수 표시, 7’ 없는 것은 공통 함수


64 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 ᅵ 6 3
n . SQL 기 본 및 활 용

49
핵심정리 아래의 각 함수에 대한 설명 중 S , 에 들어갈 함수I 핵심정리 1 51 | 어 느 기업의 직원 테 이 ■ 티 ^ P》
이 직급( GRADE) 별 로 사 원 5 0 0 명,대리

차례대로 작성하시오. 100명,과 장 3 0 명, 차 장 10명, 부 장 5 명 ,직급이 정 해 지 지 않은( NU1丄 )

NULL 관련 함수 사 람 25명으로 구성되어 있을 때, 다 음 중 SQL문 을 SQL 〇 부터 就 1 3 )까지


GROUP BY 문 장
• NVL<표 현 식 1, 표 현 식 2) SELECT [DISTINCT] 순차적으로 실행 한 결과 간수를 순 세 :H로 나열한 것으로 가 장 적절한 것 은?
Oracle 함수 칼럼명 [AUAS 명]
(표 현 식 1,표 현 식 2): 표 현 식 1의 결 과 값 이 NULL 이 면 표 현 식
ISNM丄 (표 현 식 1, FROM 아 래
2의 값 을 줄 력 한 다 . 테이블명
표 현 식 2) (표 현 식 1,표 현 식 2): 표 현 식 1이 표 현 식 2와 같 으 면 NULL을 , [WHERE 조건식]
SQL1) SELECT COUNT(GRADE) FROM EMP ;
• SQL Server 함수 같지 않 으 면 표 현 식 1을 리턴한다. [GROUP BY SQL2) SELECT GRADE FROM EMP WHERE GRADE IN
니1[니미표현식1, ® (표 현 식 1,표 현 식 2): 임 의 의 개 수 표 현 식 에 서 NULL이 아 닌 칼럼 (Column) 이나 (‘차 장 ’,‘부 장 ’, ‘널 ’);
표현 식 2) 최초의 표 현 식 을 나 타 낸 다 .
표현식] SQL3) SELECT GRADE, COUNT(*) FROM EMP GROUP
COALESCE (표 현 식 1, [HAVING 그 룹 조 건 식 ] ; BY GRADE ;
표 현 식 2, … …)

50 다 음 중 아 래 각 각 3 개 의 SQL 수 행 결 과 로 가 장 적 절 한 것 은 ?
① 670, 15, 5 ② 645, 40, 5

③ 645, 15, 6 ④ 670, 40, 6

SELECT AVG(COL3) FROM TAB_A;


SELECT AVG(COL3) FROM TAB_A WHERE COL1 > 0 ;

과목
SELECT AVG(COL3) FROM TAB_A WHERE COL1 IS NOT NULL ;

[TAB_A]

S Q L
GOL1 COL2 COL3

기본 및 활용
30 NULL 20
NULL 40 0
0 10 NULL

① 20, 20, 20
② 20, 10, 10
③ 10, 20, 20
④ 10, 10, 10

집계 함수의 종 류

집계 함수 사용 목적
COUNT(*) NULL 값을 포함한 행의 수를 출력한다.
COUNT(표현식) 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다.
SUM([DISTINCT | ALL] 표현식) 표현식의 NULL 값을 제외한 합계를 출력한다.
AVG([DISTINCT t ALL] 표현식) 표현식의 NULL 값을 제외한 평균을 출력한다.
표현식의 최대값을 출력한다.
MAX([DISTINCT | ALL] 표현식)
(문자,날짜 데이터 타입도 사용가능)
표현식의 최소값을 출력한다.
MIN([DISTINCT | ALL] 표현식)
(분자,날짜 데이터 타입도 사용가능)
STDDEV([DISTINCT | ALL] 표현식) 표현식의 표준 편차를 출력한다,
VARIAN([DISTINCT | ALL] 표현식) 표현식의 분산을 출력한다.
기타 통계 함수 벤더별로 다양힌: 통계식을 제공한다.

SQL 자격검 정 실전문 제 I 6 5 66 I SQL 자격검정 실전문제


n . SQL 기본 및 활 용

52 I 53 1 다 음 중 오 류 가 발 생 하 는 SQL 문 장 인 것 은 ?
핵심정리 아래는 어 느 회사의 광 고 에 대한 데이터 모 델 이 다 . 다음 중 광고매체

ID별 최 초 로 게 시 한 광 고 명 과 광 고 시 작 일 자 를 출 력 하 기 위 하 여 아래
① SELECT 회원 ID , SUM(주문금액) AS 합계
GROUP BY 절과 에 들 어 갈 SQL 로 옳 은 것 은 ?
FROM 주문
HAVING 절의 특성
GROUP BY 회원ID
• GROUP BY 절을 통해
HAVING COUNT(*) > 1;
소 그 룹 별 기준 을 정 한
광고 광고계 시 광고매체
후 ,SELECT 절에 집계 ② SELECT 금액) A日 합계
광 고 ID 광고게시번호 광 고 매 체 ID
함수툴 사용한다. FROM 주문
광고명 -j— --- 광 고 ID(FK) 往 ------- h 광 고 매 체 명
• 집계 함수의 통계 광 고 매 체 ID (FK) HAVING AVG(주문금액) > 100;
광고시작일자
정 보 는 NUI丄 값을
광고종료일자 : ③ SELECT 메뉴 ID , 사용유형코드,COUNT(*) AS CNT
가진 행 을 제 외 하 고
FROM 시스템사용이력
수행한다.
[SQL] WHERE 사용일시 BETWEEN SYSDATE - 1 AND SYSDATE
• GROUP BY 절 에 서 는 SELECT C.광고매체명, B.광고명,A .광고시작일자
GROUP BY 메뉴 ID , 사용유형코드
SELECT 절 과 는 달리 FROM 광고게시 A , 광고 B,광고매체 C,
A 니 AS 명을 사 용 할 수 HAVING 메뉴 ID = 3 AND 사용유형코드 = 100;
) D
없다. ④ SELECT 메뉴 ID , 사용유형 코 드 , AVG(COUNT(*)) AS AVGCNT
WHERE A .광고시작일자 = D.광고시작일자
• 집계 함 수 는 WHERE AND A . 광고매체 ID = D . 광고매체 ID FROM 시스템사용이력

과목
절 에 는 올 수 없다. AND A . 광고 ID = B. 광고 ID GROUP BY 메뉴ID, 사용유형코드;
AND A . 광고매체 ID = C. 광고매체 ID

n
(집계 함수를 사 용 할 수
ORDER BY ◦.광 고 매 체 명 ;


있는 GROUP BY

S Q L
절 보 다 WHERE 절이

기본 및 활용
먼저 수 행 된 다 ) ① SELECT D .광고매체 ID , MIN(D.광고시작일자) AS 광고시작일자
• WHERE 절은 전체
FROM 광고게시 D
데 이 터 를 GROUP으 로
WHERE D. 광고매체 ID = C. 광고매체 ID
나누기 전에 행 들 을
GROUP BY D. 광고매체 ID
미리 제 거 시 킨 다 .
• HAVING 절은 GROUP ② SELECT 광고매체 ID , MIN(광고시작일자) AS 광고시작일자

BY 절의 기준 항 목이나 FROM 광고게시


소 그 룹 의 집계 함 수 를 GROUP BY 광고매체 ID
이용한 조건을 표시할 ③ SELECT MIN(광고매체 ID) AS 광고매체 ID , MIN(광고시작일자)
수 있다. AS 광고시작일자
• GROUP BY 절에 의 한
FROM 광고게시
소 그 룹 별 로 만 들어진
GROUP BY 광고ID
집계 데이터 중,
④ SELECT MIN(광고매체 ID) AS 광고매체 ID , MIN(광고시작일자)
HAVING 절에서 제 한
조 건 욜 두어 조 건 을
AS 광고시작일자

만 족 하 는 내용만 FROM 광고게시

출력한다.
• HAVING 절은
일반적으로 GROUP BY

절 뒤에 위치 한 다 .

SQL 자격검정 실전문제 I 6 7 68 I SQL 자격검정 실전문제


n . SQL 기 본 및 활 용

o G

54 다음 중 아 래 와 같 은 테이 블 A 에 대해서 SQL을 수 행 하 였 을 때의 결과 로 다음 중 아래 SQL의 실행결과로 가장 적절한 것은?


핵심정리
가장 적절한 것은?

O RDER BY 문 장
아 래 SELECT 칼럼명 TBL
CREATE TABLE A [AUAS 명] ID
( FROM 테이블명 100 SELECT ID FROM TBL
가 VARCHAR(5) PRIMARY KEY, [WHERE 조건식] 100 GROUP BY ID
나 VARCHAR(5) NOT NULL, [GROUP BY 200 HAVING COUNT(*) = 2
다 INT NOT NULL 200 ORDER BY (CASE WHEN ID 999 THEN 0 ELSE
칼럼 (Column〉
이나
); 200 ID END)
표현식]
[테이블 :A] 999
[HAVING 그 룹 조건식]
999
가 나 다 [ORDER BY
001 A001 100
칼럼 (Column) 이나
002 A001 200
표 현 식 [ASC 또 는
003 A002 100 ID ② ID
004 A002 200 DESC ]] ; 100 999
005 A002 200 999 100
006 A003 100 • ASC (Ascending ) :
007 A003 200 ID ④ ID
조 회 한 데이터를
008 A003 100 100 999
오름차순으로
009 A003 200 200 200
정렬 한 다 . 999 100
010 A004 200
(기 본 값 이 므 로

K3 L
기본
생략 가 팅
[SQL]
• DESC (Descending ) :

및 활용
SELECT MAX(가 ) AS 가 , 나 , SUM(다 ) AS 다
FROM A 조 회 한 데 이터를 56 다음 SQ L 중 오 류 가 발생하는 것 은 ?
GROUP BY 나 내림차순으로
HAVING COUNT(*) > 1 정렬한다. ① SELECT 지역,SUM(매출금액) AS 매출금액
ORDER BY 다 DESC;
FROM 지역별매출
GROUP BY 지역

① 가 나 다 ORDER BY 매출금액 DESC;


009 A003 600 ② SELECT 지역,매출금액
005 A002 500
FROM 지역별매출
ORDER BY 년 ASC;
② 가 나 다
009 A003 600 ③ SELECT 지역, SUM(매출금액) AS 매출금액
005 A002 500 FROM 지역별매출
002 A001 300
GROUP BY 지역

③ 가 나 다 ORDER BY 년 DESC;
009 A003 600 ④ SELECT 지역, SUM(매출금액) AS 매출금액
005 A002 500 FROM 지역별매출
002 A001 300
GROUP BY 지역
010 A004 200
HAVING SUM(매출금액) > 1000
④ 위의 SQL은 SELECT 절에 COUNTi 사 ^하 지 않 았 0-13-무,HAVING
ORDER BY COUNT(*) ASC;
절에서 오류가 발생한다.

O

70 I SQL 자격검정 실전문제


SQL 자격검 정 실전문 제 I 6 9
n . SQL 기본 및 활용

57 다음 중 ORDER BY 절에 대한 설명으로 가장 부적절한 것은? 的 I 다음 중 SB_ECT 문장의 실행 순서를 올바르게 나열한 것은?
핵심정리 핵심정리 I

S E L E C T 문 장 실행 순서
① SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 컬럼을 ① SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
O RDER B Y 절 특징 ① 발췌 대상 테이블을
기준으로 정렬하는데 사용한다. ② FROM - SELECT - WHERE - GROUP BY - HAVING - ORDER BY
• 기 본 적 인 정렬 순 서 는 참조한다. ( FROM)
② DBMS마다 NULL 값에 대한 정렬 순서가 다를 수 있으므로 주의하여야 ③ FROM - WHERE _ GROUP BY _ HAVING - ORDER BY - SELECT
오 름 차 순 (ASC ) 이다. ② 발췌 대상 데이터가
^다 . ④ FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
• 숫자 형 데이터 타입은 아닌 것은 제거한다.
오름차순으로 정렬했 ③ ORDER BY 절에서 렇럼명 대신 Alias 명이나 컬럼 순서를 나타내는 (WHERE)

을 경우에 가장 작은 값 정수도 사용이 가능하나, 이들을 혼용하여 사용할 수 없다. ③ 행들을 소그룹화 한다.
부터 출 력 된 다 . @ GROUP BY 절을 乂h용-하^ 경우 ORDER BY 절에 집계 함 ^ !• 4 •욤할 (GROUP BY )
• 날짜형 데이터 타입은 ④ 그룹핑된 값의 조건에
수도 있다.
오름차순으로 정렬했 맞는 것만을
1 60 | 아래의 팀 별 성 적 테이 블 에 서 승 리 건 수 가 높 은 순 으 로 3위 까 지 출 력 하 되
을 경우 날짜 값이 가장 출력한다. ( HAVING)
빠른 값이 먼저 출 력 된 ⑤ 데이터 값을 3위의 승 리 건 수 가 동 일 한 팀이 있다면 함 께 출력하기 위 한 SQL 문 장 으 로

다. 예를 들어 출력/계산한다. 올바른 것은?


‘01-JAN -2012’는 ‘ 58 다음 S Q L의 실행 결 과 로 가 장 적 절 한 것 은 ? (SELECT )

01-3티丄 -2012’보 다 먼 ⑥ 데이터를 정렬한다. 아 래


저 출력된다. (ORDER BY )
[테이블 : 팀별성적]

과목
• Oracle에서는 NULL 값
을 가장 큰 값으로 간주 TBL 팀명 승리건수 패배건수

I
A팀 120 80

,
하여 오 름 차 순 으 로 정
ID AM T
[TOP ( )예제] 사원
B팀 20

S Q L
A 50 180
렬했을 경우에는 가장 테이블에서 급여가 높은
A 200 C팀 10 190

기본 및 활용
마지 막 에 , 내림차순으 2명을 내림차순으로
B 300 D팀 100 100
로 정렬했을 경우에는
c 100 출력하는데 같은 급여를 E팀 110 90
가 장 먼저 위 치 한 다 . 받는 사원이 있으면 같이 F팀 100 100
• 반면, SQL Server 에서 [SQL] 출력한다. G팀 70 130
는 NULL 값을 가 장 작 SELECT ID, AMT
은 값으로 간주하여 오 FROM TBL
SELECT T 0 P{2) WITH
ORDER BY (CASE WHEN ID 'A' THEN 1 ELSE 2 END), ① SELECT TOP(3) 팀명,승리건수
름차순으로 정렬했을 TIES ENAME, SAL
AMT DESC
경 우에는 가장 먼저, 내 FROM EMP FROM 팀별성적
림차순으로 정렬했을 ORDER BY SAL DESC ; ORDER BY 승리건수 DESC;
경 우 에 는 가장 마지막 ① AMT ② ID AM T ② SELECT TOP(3) 팀명,승리건수
ID
에 위치한 다 . B 300 A 200 FROM 팀별성적;
A 200 A 50
③ SELECT 팀명, 승리건수
c 100 B 300
FROM 팀별성적
A 50 c 100
WHERE ROWNUM <- 3
③ ID AM T ④ ID AMT
ORDER BY 승근!건수 DESC;
A 50 B 300
c 100 A 200 ④ SELECT TOP(3) WITH TIES 팀명,승리건수
A 200 A 50 FROM 팀별성적
B 300 c 100 ORDER BY 승근]건수 DESC;

SQL 자격검정 실전문제 I 71 72 I SQL 자격검정 실전문제


n . SQL 기본 및 활 용

61 다음 중 아래에서 Jo in 에 대한 설명으로 가장 적절한 것은?


핵심정리 다음 중 5개의 테 이 블 로 부 터 필 요 한 칼 럼 을 조 회 하 려 고 할 때, 최 소 핵심정리
몇 개 의 JOIN 조 건 이 필 요 한 가 ?

두 개 이상의 테이 블 들 을 아 래
① 2개 ② 3개 연결 또 는 결합하여 기-) 일반적으로 Jo in 은 PK와 FK 값의 연관성에 의해 성립된다.
③ 4개 ④ 5개 데 이 터 를 출 력 하 는 것을 나) DBMS 옵티마이져는 From 절에 나열된 테이블들을 임의로 3개
JOIN 이 라 고 하며, 정도씩 묶어서 Join 을 처리한다.
일 반적인 경우 행 들 은 다) EQUI Join은 Join에 관여하는 테이블 간의 컬럼 값들이 정확하게
PRIMARY KEY ( PK )나 일치하는 경우에 사용되는 방법이다.
라) EQUI Join은 ’느 연산자에 의해서만 수행되며, 그 이외의 비교
FOR티GN KEY (FK ) 값의
62 아래의 영 화 데 이터베이스 테이블의 일부에서 밑 줄 친 속 성 들 은 테이블의 연산자를 사용하는 경우에는 모두 Non EQUI Jo in 이다.
EQUI JOIN 문 장 연관에 의해 JOIN 이
마) 대부분 Non EQUI Join을 수행할 수 있지만,때로는 설계상의
SELECT 테이블 1. 칼럼명, 기 본 키 이 며 출 연 료 가 8 8 8 8 이 상 인 영 화 명 , 배 우 명 ,출 연 료 를 구 하 는 성 립 된 다 . 하 지 만 어떤 이유로 수행이 불가능한 경우도 있다.
테 이 블 2 .칼 럼 명 , ... SQL 로 가 장 적 절 한 것 은 ? 경 우 에 는 이 러 한 PK ,
FROM 테 이 블 1, 테 이 블 2 FK 의 관 계 가 없 어 도
① 가,다,라
WHERE 테이 블 1. 칼 럼 명 1 논 리 적 인 값들의

= 테이 블 2. 칼 럼 명 2; 연 관 만 으 로 JOIN 이 성립 透) 가,나,다
배우(배우번호. 배우명,성별)
— WHERE 절에 JOIN 가능 하 다 . ③ 가,나,다,라
영화(영화번호. 영화명, 제작년도)
조 건 을 넣는다. ④ 가,다,라, 마
춤연(배우번호. 영화변호. 출연료)

과목
A N SI/ISO SQ L 표준

n

EQUI JOIN 문 장 ① SELECT 출연. 영화명,영화. 배우명, 출연.출연료

S Q L
SELECT 테이블 1. 칼 럼 명 , FROM 배우,영화, 출연
WHERE 출 연 료 〉= 8888

기본 및 활용
테 이 블 2 .칼럼명, ...
FROM 테 이 블 1 INNER AND 출연, 영화번호 = 영화.영화번호
JOIN 테이 블 2 1 64 1 다 음 SQ L 의 실 행 결 과 로 맞 는 것 은 ?
AND 출연.배우번호 = 배우.배우번호;
ON 테 이 블 1.칼 럼 명 1 =
② SELECT 영화.영화명,배우.배우명, 출연료
테 이 블 2. 칼럼 명2;
아 래
FROM 영회-,배우, 출연
ᅳ ON 절에 JOIN 조 건 을 EMP_TBL]
; [RULE_TBL]
WHERE 출 연 .출 연 료 〉 8888
넣 는다. EMPNO ENAME RULE NO RULE
AND 출연. 영화번호 = 영화. 영화번호
1000 SMITH 1 S%
AND 영화.영화번호 = 배우. 배우번호; 1050 ALLEN 2 %T%

③ SELECT 영화명, 배우명,출연료 1100 SCOTT

FROM 배우,영화,출연
[SQL]
WHERE 출 연 료 〉= 8888 SELECT GOUNT(*) GNT
AND 영화번호 = 영화. 영화번호 FROM EMP_TBL A, RULE_TBL B
AND 배우번호 = 배우.배우번호; WHERE A.ENAME LIKE B.RULE

(4) SELECT 영화. 영화명,배우.배우명,출연료


FROM 배우, 영화, 출연 ① 0 ② 2
WHERE 출연료 >= 8888 ③ 4 ④ 6
AND 출연. 영화번호 = 영화. 영화번호
AND 출연.배우번호 = 배우.배우번호;

74 I SQL 자격검정 실전문제


SQL 자 격 검 정 실 전 문 제 I 7 3
,Wk\
성 :

?
■ .^i f c f -',:
:-

:r 적

i:
a S il
i에
나‘”K
;

公V I

..公..'

다음 중 순수 관계 연산자에 해당하지 않는 것 은 ?
핵심정리
① SELECT

SQL 활용
순수 관계 연산자와
© UPDATE
SQ L 문 장 비교
@ JOIN
• SELECT 연 산 온
@ DIVIDE
WHERE 절 로 구현
• PROJECT 연 산 은
SELECT 절로 구현
• (NATURAL) JOIN
1 的 | 다 음 중 아래 데이 터 모 델 을 참 고 하 여 설 명 에 맞 게 올 바 르 게 작 성 한
연 산 은 다 양 한 JOIN
SQL 문 장 을 2 개 고 르 시 오 .
기 능 으 로 구현
• DIVIDE 연 산 은 현재

사 용 되 지 않음

[데이터 모델]
제1절 표준 조인 추천컨텐츠
편 ___________
제2절 집합 연산자 고객 ID 그2 객 ID(FK) "
컨 텐 츠 ID (FK)
제3절 계층형 질의와 셀프 조인 고객명 1---------------더속
나이 추천대삼일자
제4절 서브쿼리 ------------- d

제5절 그룹 함수
제6절 윈도우 함수
제7절 DCL 비선호컨"!! 츠 컨텐츠

제8 절 절차형 SQL ''고객ID(FK) " 컨 텐 츠 ID


컨 텐 츠 ID (FK)
a 덴츠명
등록일시 뇌日--------------- h

[설명]
우리는 매일 배치작업을 통하여 고객에게 추천할 컨텐츠를 생성하고
고객에게 추천서비스를 제공한다.
추천 컨텐츠 엔터티에서 언제 추천을 해야 하는지를 정의하는 추천
대상일자가 있어 해당일자에만 컨텐츠를 추천해야 한다. 또한 고객
이 컨텐츠를 추천 받았을 때 선호하는 컨텐츠가 아닌 경우에는 고객
이 비선호 컨텐츠로 분류하여 더 이상 추천 받기를 원하지 않는다.
그러므로 우리는 비선호 컨텐츠 엔터티에 등록된 데이터에 대해서는
추천을 수행하지 않아야 한다.

^ 배치작업이란? 어떤 처리를 연속적으로 하는 것이 아니고 일정량


씩 나누어 처리하는 경우 그 일정량을 배치(batch) 라고 한다.
배치의 원뜻은 한 묶음이라는 의미다. [기계공학용어사전]
예) 상품을 주문하는 로직은 그당시에 발생하는 트랜잭션에 대한
처리이므로 배치작업이라 표현하지는 않는다. 하지만 상품별 주
문량을 집계하는 로직의 경우 특정조건(기간등)으로 일괄처리를
해야함으로 배치작업이라 표현할 수 있다.

78 I SQL 자 격 검 정 실전 문 제
n . SQL 기 본 및 활용

o 〇

① SELECT C. 컨텐츠[D, C. 컨텐츠명


핵심정리 핵심정리 67 아 래 는 어느 하사의 생 산설비를 위 한 데이터 모델의 일부에 대한 설명 으 로
FROM 고객 A INNER JOIN 추천컨텐츠 B
가장 적절한 것을 2개 고르시오.
ON (人고객ID = B.고객ED) INNER JOIN 컨텐츠 C
A N SI/ISO S Q L 에서 INNER JOIN
ON (B. 컨텐츠ID = C. 컨텐츠[D)
표 시 하 는 FROM 절의 INNER JOIN은 OUTER
WHERE A. 고객ID = #custld#
JOIN 형태 (외부) JOIN과 대비하여
AND B.추천대상일자 = TO_CHAR(SYSDATE,’YYYY.MM.DD’)
• INNER JOIN 내부 JOIN이라고 하며
• NATURAL JOIN AMD NOT EXISIS (SELECT X, 츠ID JON 조건에서 동일한 값이
• USING 조 건 절 FROM 비^호컨텐츠 X 있는 행만 반환한다.
• ON 조 건 절 WHERE X.고객ID = B.고객ID);
• CROSS JOIN

• OUTER JOIN( LEFT , ① 제품,생산제품, 생산라인 엔터 티를 Inner Join 하기 위해서 생산제품


② SELECT C, 컨텐찬D, C. 컨텐츠명
RIGHT, FULL ) 엔터티는 WHERE절에 최소 2번이 나타나야 한다.
FROM 고객 A INNER JOIN 추천컨텐츠 B
(2) 제품과 생산라인 엔터티를 Join시 적절한 Join조건이 없으므로 카티시
ON (A. 고객ID - #custld# AND A.고객ID = B.고객ID) INNER JOIN 컨텐츠 C
안 곱 (Cartesian Product) 이 발생한다.
ON (B. 컨텐S D = C. 컨텐츠ID) RIGHT OUIER JOIN 비선호컨텐츠 D
③ 제품과 생산라인 엔터티에는 생산제품과 대응되지 않는 레코드는 없다.
ON (B.고객ID = D. 고객ID AND B. 컨텐츠ID - D 컨텐츠ID)
④ 특정 생산라인번호에서 생산되는 제품의 제품명을 알기위해서는 제품,
WHERE B.추천대상일자 = TO_GHAR(SYSDATE, 'YYYY.MM.DD')
생산계품,생산라인까지 3개 엔터티의 Inner Join 인 필요하다.

과목
AND B. 컨텐츠© IS NOT NULL;

I
*
③ SEIECT C. 컨텐츠ID, C. 컨텐츠명

S Q L
1 的 | 아래의 테이 블 스 키 마 정 보 를 참 고 하 여 , [ᅡ음 중 ‘구 매 이력이 있 는 고객
FROM 고객 A INNER JOIN 추천컨텐츠 B
중 구 매 횟 수 가 3 회 이 상 인 고 객 의 이 름 과 등 급 을 출 력 하 시 오 .’라 는

기본 및 활용
ON (A. 고객ID - B. 고객ID) INNER JOIN 컨텐츠 C
질 의 에 대해 아래 SQL 문 장 의 [ ^ ,® 에 들어 갈 구 문 으 로 가 장
ON (B. 컨텐친D = C. 현텐츠ID) LEFT OUTER JOIN 비선호컨텐츠 D
적절한 것은?
ON (B 고객ID - D, 고객ID AND B. 컨텐츠ID - D. 관덴츠ID) ’
WHERE A. 고객江) = #custld#
아 래
AND = TO_GHAR(SYSDATE, 'YYYY.MMDD')
AND D. 컨텐츠ID IS NULK [테 이 블 ]
고객(고객번호(PK), 이름, 등급)
구매정보(구매 번호 (PK) , 구매금액, 고객 번호 (FK))
④ SELECT C. 컨텐츠ID, C. 컨텐츠명 * 구매정보 테이블의 고객번호는 고객 테이블의 고객번호를 참조하
FROM 고객 A INNER JOIN 추천컨텐츠 B 는 외래키 (Foreign Key) 이다.

ON (A, 고객[D = #custld# AND A. 고객ID : B. 고객ID) INNER JOIN 컨텐츠 公


[SQL 문장]
ON (B. 컨텐츠ID = C. 컨텐츠ID) SELECT A . 이름, A . 등급
WHERE 디}상^자 = TO_CHAR(SYSDATE, 'YYYY.MM.DD') FROM 고詞 A
AND NOT EXISTS (SELECT X. 컨텐츠ID Q)
GROUP BY A . 이름,A . 등급
FROM 비선호컨텐츠 X
[ S
WHERE X, 고객ID = B 고객ID
AND X, 컨텐츠[D = B. 컨텐츠ID) ;
① @ :INNER JOIN 구매정보 B ON A.고객번호= B. 고객번호
© :HAVING SUM(B. 구매번호) >=3
② © :INNER JOIN 구매정보 B ON A.고객번호= B,고객번호
© :HAVING COUNT(B.구매번호) >-3

o o

SQL 자 격 검 정 실 전 문 제 I 7 9 80 I SQL 자격검정 실전문제


n . SQL 기본 및 활용

③ @ :LEFT OUTER JOIN 구매정보 B ON A .고객번호 =B 고객번호


70 다 음 중 팀 ( TEAM ) 테 이 블 과 구 장 (STADIUM) 테 이 블 의 관 계 를 이 용 해
© :HAVING SUM(B.구 매 번 호 )〉=3
핵심정리
서 소 속 팀 이 가 지 고 있 는 전용 구 장 의 정 보 를 팀의 정보오ᅡ 함 께 출 력 하 는
④ 石) :INNER JOIN 구매정보 B ON A .고객번호=B.고객번호
SQL 을 작 성 할 때 결 과 가 다 른 것 은 ?
© : WHERE B. 구 매 번 호 〉=3

① SELECT T.REGION_NAME, T.TEAM_NAME, T. STADIUM一ID,

69 __ 아래 는 어 느 하사의 장 산 데이터 모델의 일부이며 고객이 서 비 스 를 사 용 한 S,STADIUM_NAME

시간대에 따라 차등 단가를 적용하려고 한다. 다음 중 시 간 대 별 사 용 량 FROM TEAM T INNER JOIN STADIUM S


USING (T.STADIUMJD = S, STADIUM_ID) ;
테 이 블 을 기 반 으 로 고 객 별 사 용 금 액 을 추 출 하 는 SQL 으 로 가 장 적 절 한
② SELECT TEAM. REGION_NAME ,TEAM.TEAM_NAME,
것은?
TEAM.STADIUM_ID, STADIUM, STADIUM_NAME
FROM TEAM INNER JOIN STADIUM
ON (TEAM. STADIUMJD -
STADIUM. STADIUM_ID) ;
③ SELECT T.REGION 一NAME, T.TEAM—NAME, T.STADIUMJD,

S.STADIUM_NAME
FROM TEAM T, STADIUM S

과목
WHERE T.STADIUMJD = S, STADIUM_ID ;
① 湖 LECT A. 고객ID, A.고객명,SUM(B. 사용량 * C.단가) AS 사^금액

n
④ SELECT TEAM.REGION__NAME, TEAM.TEAM_NAME,

*
FROM 고객 A INNER JOIN 시간대별사용량 B TEAM. STADIUM—ID, STADIUM. STADIUM_NAME

S Q L
’ ON (A. 고객ID = B, 고객ID) INNER JOIN 시간대구간 C FROM TEAM, STADIUM

기본 및 활용
ON (B. 사용시간대 <= C. 시작시간대 AND B. 사용시간대、: C.종료시간대) WHERE TEAM.STADIUMJD - STADIUM. STADIUM_ID ;
GROUP BY A. 고객ID,A. 고객명
ORDER BY A.고객ID, A. 고객명;
② 湖 LECT A. 고객ID, A. 고객명,SUM(B.사용량 * 〔단가) AS 사용금액
FROM 고객 A INNER JOIN 시간대별사용량 B INNER JOIN 시간대구간 C
71__ 아 래 의 사 례 1은 Cartesian Product를 만 들 기 위 한 SQL 문 장 이 며 사 례
ON (A. 고객ID = B, 고객ID AND B. 사용시간대 C R O S S JOIN
테 이 블 간 JOIN 조건이 1과 같은 결 과 를 얻기 위해 사레2 SQL 문장의 [ @ ] 안에 들 어 갈 내용을
BETWEEN C. 시작시간대 AND C.종료시간대;)
없는 경우 생길 수 있는 작성하시오,
GROUP BY A.고객ID, A. 고객명
모 든 데이터의 조 합 을
ORDER BY A.고객ID, A.고객명;
말한다. 결고[는 양 쪽 아 래
③ 湖 LECT A.고객ID, A.고객명, SUM(B.사용량 * C.단가) AS 사용금액 집합의 M*N 건의 데이터
PROM 고객 A INNER JOIN 시간대별사용량 B 조 합 이 발생 한 다 . [사례 1]
SELECT ENAME, DNAME
ON (A, 고객ID = B. 고객ID) INNER JOIN 시간대구간 C
FROM EMP, DEPT
ON B. 사용시간대 BETWEEN C. 시작시간대 AND C. 종료시간대 ORDER BY ENAME ;
GROUP BY A. 고객ID, A. 고객명
ORDER BY A.고객ID, A,고객명; [사례到
SELECT ENAME, DNAME
④ 獨 LECT A.고객ID, A. 고객명,SUM(B,사용량 * C.단가) AS 사용금액
FROM 瓦MP 1 Q 1 DEPT
FROM 고객 A INNER JOIN 시간대별사용량 B ORDER BY ENAME ;
ON (A.고객ID = B. 고객ID) BETWEEN JOIN 시간대구간 C
GROUP BY A. 고객ID, A. 고객명
ORDER BY A. 고객ID, A.고객명;

o 公

SQL 자격검정 실전문제 I 8 1 82 I SQL 자격검정 실전문제


n . SQL 기 본 및 활 용

72 고객번호 고객명 단말기 I D 단말기명 O S ID OS 명


핵심정리 다음 중 아래 테 이 블 들 을 대 상 으 로 SQ L 문 장 을 수 행 한 결과 로 가장
핵심정리 11000 홍길동 1 0 00 ■ 0 0 100 A n d r o id
적절한 것은?

L E F T O U TER JOIN
고객번호 고객명 단말기 I D 단말기명 O S ID os 명
11000 홍길동 1 0 00 ■ 0 0 100 A n d r o id
조인 수행 시 먼저 표 기 된
12000 강감찬 NULL NULL NULL NULL
좌 측 테이블에 해 당 하 는
[테이블 :0 S ]
13000 이순신 NULL NULL NULL NULL
데 이 터 를 먼저 읽은 후,
OSID(PK) os 명 14000 안중근 3000 C3000 200 iO S
나중 표 기 된 우 측
100 Android
15000 고길동 4000 D 4000 300 B ada
테이블에서 JOIN 대상 200 iOS
16000 이대로 4000 D 4000 300 B ada
데 이 터 를 읽어 온 다 . 즉 , 300 Bada
Table A 와 B 가 있 을 때
[테이블 : 단말기]
(Table TV가 기준이 됨 ),
단말기 ID(PK) 단말기명 OSID(FK)
A 와 B 를 비교해서 B 의
1000 A1000 100
JOIN 칼럼에서 같 은 2000 B2000 100 FULL OUTER JOIN
1 73 1 다 음 중 아래 (1 ),(2 ), (3 )의 S Q L에서 실 행 결 과 가 같 은 것 은 ?
값이 있을 때 그 해당 3000 ◦3000 200 조인 수 행 시 좌 측 , 우 측
데 이 터 를 가 져 오 고 , B의 4000 D3000 300 테이블의 모 든 데 이 터 를
JOIN 칼럼에서 같은 값이 아 래
테이블 : 고객] 읽어 … …하여 결과 를
없는 경 우 에 는 B 생 성 한 다 . 즉 , TABLE
고객번호(PK) 고객명 단말기ID(FK) (1) SELECT A .ID , B J D

과목
테이블에서 가 져 오 는 A와 B 가 있 을 때 F R O M TBL1 A FU LL OUTER J O IN TBL2 B
11000 홍길동 1000
칼 럼 들 은 NULL 값으로 12000 NULL ON A. ID = B .ID

E
강감찬 (TABLE '公 , ' B ' 모 두

*
채운다. 13000 이순신 NULL 기준이 됨), RIGHT (2) SELECT A .ID , B .ID

S Q L
14000 안중근 3000 OUTER JC ■ 라 LEFT F R O M TBL1 A LEFT OU T ER J O IN TBL2 B
15000 고길동 4000

기본 및 활용
OUTER JOIN 의 결과 를 O N A .ID = B .ID
16000 이대로 4000 U N IO N
합집합으로 처리한
SELECT A .ID , B .ID
결과와 동일하다.
[SQL] FROM TBL1 A R IG H T OUT ER JO IN TBL2 B

SELECT A.고 객 번 호 ,A.고 객 명 ,B.단 말 기 ID, B.단 말 기 명 ,C.OSID, ON A .ID = B .ID

◦.O S 명
(3) SELECT A .ID , B .ID
FROM 고 객 A LEFT OUTER JOIN 단 말 기 B
F R O M TBL1 A ,TBL2 B
ON (A. 고 객 번 호 IN (11000, 12000) AND A. 단 말 기 ID =
W H E R E A .ID = B .ID
B. 단 말 기 ID) LEFT OUTER JOIN OS C
U N IO N ALL
ON (B.OSID = C.OSID)
SELECT A. ID , N ULL
ORDER BY A, 고 객 번 호 ;
F R O M TBL1 A
WHERE NOT EXISTS (SELECT 1 FROM TBL2 B WHERE A .ID = B.ID)
U N IO N ALL
고객번호 고객명 단말기 ID 단말기명 O S ID os 명 SELECT NU LL, B .ID
11000 홍길동 1000 A1000 100 Android F R O M TBL2 B

12000 강감찬 NULL NULL NULL NULL WHERE NOT EXISTS (SELECT 1 PROM TBL1 A WHERE B .ID = A ,ID)

13000 이순신 NULL NULL NULL NULL


14000 안중근 NULL NULL NULL NULL
15000 고길동 NULL NULL NULL NULL ① 1,2
16000 이대로 NULL NULL NULL NULL
② 1, 3

② 고객번호 고객명 단말기 ID 단말기명 OSID os 명 ③ 2, 3

11000 홍길동 1000 A1000 100 Android ④ 1, 2, 3


12000 강감찬 NULL NULL NULL NULL

SQL 자격 검정 실전문 제 I 8 3 84 I SQL 자격검정 실전문제


n . SQL 기 본 및 활 용

핵심정리
74 아 래 의 티여P 테 이 블 과 CEPT 테 이 블 에 서 밑 줄 친 속 성 은 주 키 이 며 I 중 〇m ^ 데이터 ^ m 〇\
\Msql° i 로^
티, . C 는 DEPT 오유 연 결 된 외 래 키 이 다 , EMP 테 이 블 과 DEPT 테 이 블 을

LEFT , FULL,RIGHT 외 부 조 인 (outer join )하 면 생 성 되 는 결 과 건 수 로 아 래


OUTER JOIN 문 장 예시
• LEFT OUTER JOIN 가장 적절한 것은? TABl TAB2
S E L E C T X . K E Y 1, Cl C2 Cl C2
Y .K E Y 2 A 1 B 2
FROM TA B 1 X LE F T B 2 C 3
EMP 테이블
OUTER JOIN C 3 D 4
A B c D 4
TA B 2 Y
1 b W
E 5
ON (X . K E Y 1= Y . K E Y 2》
3 d W
• RIGHT OUTER JOIN 5 y y SELECT *
S E L E C T X . K E Y 1, FROM TABl A LEFT OUTER JOIN TAB2 B
Y .K E Y 2 DEPT 테이블 ON ( A,C l = B.C1 AND B.C2 BETWEEN 1 AND 3)
FROM TA B 1 X RIGHT c D E
OUTER JOIN W 1 10

TA B 2 Y z 4 11 ① C1 C2 Cl C2
ON (X . K E Y 1= Y . K E Y 2) v 2 22 A 1
B 2 B 2

4목
• FULL OUTER JOIN
C 3 C 3
S E L E C T X . K E Y 1,

I
① 3건,5건,4건 D 4 D 4


Y.KEY2
E 5

S Q L
FROM TA B 1 父 FU LL ② 4건,5건,3건
OUTER JOIN ③ 3건, 4건,4건 ② Cl C2 Cl ◦2

기본 및 활용
A 1
TA B 2 Y ④ 3건,4건,5건
B 2 B 2
ON ( X . K E Y 1= Y . K E Y 2)
C 3 C 3
D . 4
E 5

③ Cl C2 Cl C2
75 A 1
신규 부서의 경우 일시적으로 사원이 없는 경우도 있다고 가정하고
B 2 B 2
[班 PT 와 티V1P를 조 인 하 되 사 원 이 없 는 부 서 정 보 도 같 이 출 력 하 도 록 3 C 3
C
할 때 ,아래 SQL 문 장 의 @J 안에 들 어 갈 내용을 기 술 하 시 오 .
④ Cl G2 Cl C2
A 1
B 2 B 2
C 3 C 3
SELECT E.ENAME, D.DEPTNO, D.DNAME
D 4 D 4
FROM DEPT D Q EMP E
ON D.DEPTNO E.DEPTNO;

86 I SQL 자격검정 실전문제


SQL 자 격 검 정 실 전 문 제 I 8 5
n . SQL 기본 및 활 용

o o

④ SELECT A . 게시판 ID , A . 게시판명,COUNT(B. 게시글 ID) AS CNT


77 I 아 래 와 같 은 데이터 모 델 에 서 ORACLE을 기 준 으 로 SQL 을 작 성 하 였 다 .
FROM 게시판 A RIGHT OUTER JOIN 게시글 B
그 러 나 SQL Server 에 서 도 동 일 한 결 과 를 보 장 할 수 있 도 록 ANSI 구 문
ON (A . 게시판 ID = B. 게시판 ID AND A .사용여부 = 'Y ' AND
으 로 SQL 을 변 경 하 려 고 한 다 . 다 음 중 아 래 의 SQL 을 ANSI 표 준 구 문
B. 삭제여부 = 'N')
으로 변경한 것으로 가장 적철한 것은?
GROUP BY A. 게시판 ID , A . 게시판명
ORDER BY A . 게시판 ID ;

게시판 게시글

1 78 I 다 음 과 같 은 2 개 의 릴 레 이 션 이 있 다 고 가 정 하 자 . student의 기 본 키 는

st_ num이 고 ,department의 기 본 키 는 dept_ num이 다 . 또 한 student〇 .|


d_ num은 department으| dept_ num을 참 조 히 '는 외 래 키 이 다 , 아래
[SQL]
SQL 문 의 실 행 결 과 건 수 는 ?
SELECT A . 게시판 ID , A . 게시판명, COUNT(B. 게시글 ID) AS CNT
FROM 게시판 A ,게시글 B
WHERE A . 게시 판ID = B. 게시 판 ID (+) 아 래
AND B. 삭제여부 (+) = ’N’ 과
목 SELECT count (st_ name)
AND A . 사용여부 = 'Y ' n FROM student s
GROUP BY A. 게시판 ID , A . 게시판명
WHERE not exists
ORDER BY A . 게시판 ID ; s (SELECT *
Q
L FROM department d
기 WHERE s. d_num = d . dept_num

① SELECT A. 게시판 ID , A . 게시판명, COUNT(B. 게시글 ID) AS CNT and dept_name = ‘전자계산학과’);

FROM 게시판 A LEFT OUTER JOIN 게시글 B 활
용 StiMent Department
ON (A . 게시판 ID = B. 게시판 ID AND B.삭제여부 = 'N')
st_nui sL n a膽e d e p tjw i dept」任,
WHERE A. 사용여부 = 'Y '
GROUP BY A . 게시판 ID , A . 게시판명 1Q01 Voo 10 10 컴퓨터공학과 !

ORDER BY A . 게시판 ID ; 1GD2 KiEB 30 20 원XI픽공학과 ;

② SELECT A. 게시판 ID , A. 게시판명,COUNT(B. 게시글 ID) AS CNT 1G03 Lee 20 30 전자계산학과


FROM 게시판 A LEFT OUTER JOIN 게시글 B
■ Park 10
ON (A . 게시판 ID = B. 게시판 ID AND A .사용여부 = 'Y ')
10D5 Choi 20
WHERE '삭 제 여 부 = 'N'
1006 Jeong 10
GROUP BY A . 게시판 ID , A . 게시판명
ORDER BY A. 게시판 ID ;
③ SELECT A . 게시판 ID , A . 게시판명, COUNT(B. 게시글 ID) AS CNT
FROM 게시판 A LEFT OUTER JOIN 게시글 B
ON (A . 게시판 ID - B. 게시판 ID)
WHERE A . 사용여부 = 'Y '
AND B. 삭제여부 = 'N『
GROUP BY A. 게시판 ID , A .게시판명
ORDER BY A . 게시판 ID ;

〇 O

SQL 자 격 검 정 실 전 문 제 I 8 7 88 | SQL 자격검정 실전문제


n . SQL 기본 및 활 용

79 (SQL Server ) 다음 중 아 래 의 就 IL과 동 일 한 결 과 를 추 출 하 는 SQL 은 ? 80 아 래 와 같 은 데 이 터 모 델 에 대해 SQL 을 수 행 하 였 다 . 다 음 중 수 행 된

(단 , 테 이 블 TAB 1, TAB 2 의 PK 컬 럼 은 A , B 이 다 ) SQL 과 동 일 한 결 고 도 출 ᄒ SQL 은 ?

[SQL]
SELECT A, B
FROM TAB1
EXCEPT
SELECT A, B
FROM TAB2;

① SELECT TAB2.A , TAB2.B


FROM TAB1, TAB2
WHERE TAB1.A 〇 TAB2.A
AND TAB1.B ◊ TAB2.B
CD SELECT TAB1.A , TAB1.B
FROM TAB1
WHERE TAB1.A NOT IN (SELECT TAB2 .A
① SELECT B. 서비스 ID , A. 서비스명,A 서비스 URL

과목
FROM TAB2)
FROM 서비스 A, 서비스이용 B

I
AND TAB1.B NOT IN (SELECT TAB2.B

.
WHERE A. 서비스 ID = B. 서비스 ID ;
FROM TAB2);

S Q L
(D SELECT TAB2.A, TAB2 .B ② SELECT X . 서비스 ID , X 서비스명,X 씨 비 스 UR느

기본 및 « 용
FROM TAB1, TAB2 FROM 서비스 X
WHERE TAB1.A - TAB2.A WHERE NOT EXISTS (SELECT 1
AND TAB1.B = TAB2.B FROM (SELECT 서비스 ID
④ SELECT TAB1.A , TAB1.B
FROM 서비스
FROM TAB1
MINUS
WHERE NOT EXISTS (SELECT 'X'
SELECT 서비스]:D
FROM TAB2
WHERE TAB1.A = TAB2.A FROM 서비스이용) Y

AND TAB1.B = TAB2.B) ; . WHERE X .서비스 ID : Y .서비스 ID);


③ SELECT B. 서비스 ID , A. 서비스명,A. 서비스 URL

집 합 연산자의 종류
FROM 서비스 A LEFT OUTER JOIN 서비스이용 B

연 산 자 의 의미
ON (A. 서비스 ID = B. 서비스 ID)
집합 연산자
여러 개의 SQL 문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 WHERE B. 서비스 ID IS NULL
U N IO N
하나의 행으로 만든다. GROUP BY B, 서비스 ID , A . 서비스명, A, 서비스 URL;
여러 개의 SQL 문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로
④ SELECT A .서비스 ID , A 서비스명,A .서비스 URL
표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 질의
U N IO N ALL 결과가 상호 배타적 인(E xclusive) 일 때 많이 사용한다, 개별 SQ L 문의 FROM 서비스 A
결과가 서로 중복되지 않는 경우,U N IO N 과 결과가 동일하다. (결과의 WHERE 서비스 ID IN (SELECT 서비스 ID ■
정렬 순서에는 차이가 있을 수 있음) FROM 서비스이용
여러 개의 SQL 문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로
IN TERSECT MINUS
만돈다.
앞의 SQ L 문의 결과에서 뒤의 SQ L 문의 결과에 대한 차집합이다. 중복된 SELECT 서비스 ID
EXCEPT
행은 하나의 행으로 만든다. (일부 데이터베이스는 M IN U S 를 사용함) FROM 서비스);

o

90 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 8 9
n . SQL 기본 및 활용

81 I 83 ] 다 음 중 아래 TBL 1, TBL 2 테 이 블 에 대해 SQL 을 수 행 한 결 과 인 것 은 ?


핵심정리 S E T O P ER A T O R 중 에 서 수 학 의 교 집 합 과 같 은 기 능 을 하 는 연 산 자 로

가장 적절한 것은?
아 래
① UNION
卷) INTERSECT [테이블 : TBL1] [테이블 : TBL到

(受) MINUS COLl OOL2 COLl COL2


AA A1 AA A1
@ EXCEPT
AB A2 AB A2
SELECT 칼 럼 명 1, AC A3
82 AD A4
칼 럼 명 2, ... 다음 중 래 의 티네3 테이블의 데 이 터 를 참조하여 실 행 한 S Q L 의 결 과 로
FROM 테 이 블 명 1 가장 적절한 것은?
[WHERE 조건 식 ] [SQL]
SELECT C0L1, COL2, COUNT(*) AS CNT
[[GROUP BY
FROM (SELECT COL1, COL2
칼럼 (Column) 이나
SELECT ENAME AAA, JOB AAB FROM TBL1
표현식 FROM EMP UNION ALL
[HAVING 그 룹 조 건 식 ] ] WHERE EMPNO - 7369 SELECT COL1, COL2
집합 연산자 UNION ALL FROM TBL2
SELECT 칼 럼 명 1, SELECT ENAME BBA, JOB BBB UNION

과목
FROM EMP SELECT COL1, COL2
칼 럼 명 2, ...
WHERE EMPNO = 7566 FROM TBL1)

I
FROM 테 이 블 명 2
ORDER BY 1, 2 ; GROUP BY COL1,COL2 ;
[WHERE 조건 식 ]

•S
Q L
[[GROUP BY EMP

기본 및 활용
칼럼 (Column) 이나 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO COLl COL2 CNT
표현식 7369 SMITH CLERK 7902 1980-12-17 800 20 AA A1 1
[HAVING 그 룹 조 건 식 ] ] 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 AB A2 1
7521 WARD . SALESMAN 7698 1981-02-22 1250 500 30 AC A3
[ORDER BY 1, 2 1
7566 JONES MANAGER 7839 1981-04-02 2975 20
[ASC 또 는 DESC ] ; AD A4 1
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
ORDER BY는 집합 7839 1981-05-01 2850 30
7698 BLAKE MANAGER
연산을 적용한 최종 7782 CLARK MANAGER 7839 1981-06-09 2450 10
결과에 대한 정렬 7788 SCOTT ANALYST 7566 1987-07-13 3000 20
처리이므로 가장 7839 KING PRESIDENT 1981-11-17 5000 10
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
마지막 줄에 한번만
7876 ADAMS CLERK 7788 1987-07-13 1100 20
기술한다.
7900 JAMES CLERK 7698 1981-12-03 950 30
7902 FORD ANALYST 7566 1981-12-03 3000 20
7934 MILLER CLERK 7782 1982-01-23 1300 10

AAA AAB AAA AAB


① ②
SMITH CLERK MANAG
JONES
MANAG ER
JONES
ER SMITH CLERK

BBA BBB BBA BBB


③ ④
SMITH CLERK MANAG
JONES
MANAG ER
JONES
ER SMITH CLERK

SQL 자격검정 실전문제 I 91 92 I SQL 자격검정 실전문제


n . SQL 기본 및 활용

-公-

핵심정리
84 다음 중 아래에서 테아블 T 1, T2에 대한 가, 나 두 개의 쿼리 결과 조회되는
핵심정리 86 아 래 와 같 은 데이터 모 델 에 대 한 설 명 으 로 가 장 적 절 한 것 은 ?

행의 수 로 가 장 적 절 한 것 은 ? (단 ,시 스 템 적 으 로 회 원 기 본 정 보 와 회 원 상 세 정 보 는 1:1, 양 쪽 필 수 관 계

임 을 보 장 한 다 .)
아 래

T1(A,B, 幻 T2(A,B, 幻
A B C A B C
A3 B2 C3 A1 B1 Cl
A1 B1 Cl A3 B2 G3
A2 B1 ◦2

가. SELECT A, B, C FROM R1
UNION ALL
SELECT A, B, C FROM R2
① 회원ID 컬럼을 대상으로 (회원기본정보 EXCEPT 회원상세정보) 연산을

나. SELECT A, B, C FROM R1 수행하면 회원상세정보가 등록되지 않은 회원 ID 가 추출된다.


UNION ② 회원ID 컬럼을 대상으로 (회원기본정보 UNION ALL 회원상세정보)
SELECT A, B, C FROM R2
연산을 수행한 결과의 건수는 회원기본정보의 전체건수와 동일하다.

과목
③ 회원 ID 컬럼을 대상으로 (회원기본정보 INTERSECT 회원상세정보)

① 가: 5개,나 3개 연산을 수행한 결과의 건수악 두 테이블을 회원ID로 JOIN 연산을 수행한

n
,
② 가: 5개,나 5개 결과의 건수는 동일하다.

S Q L
③ 가: 3개,나 3개 ④ 회원ID 컬럼을 대상으로 (회원기본정보 INTERSECT 회원상세정보)

기본 및 활용
④ 가: 3개,나 5개 연산을 수행한 결과와 (회원기본정보 UNION 회원상세정보) 연산을
수행한 결과는 다르다.

일반 집합 연산자를 85 다음 중 아래 와 같 은 집협이 존 재 할 때 ,집 합 A 와 B에 대하여 집합연산을


PRIOR :CONNECT 87 I 아 래 와 같 은 데이터 상 황 에 서 아 래 의 SQL 을 수 행 할 경 우 정 렬 순 서 상
SQL과 비교 BY 절에 사 용 되 며 , 현재 2 번째 표 시 될 값 을 적 으 시 오 .
수 행 한 결 과 집 합 C가 되 는 경우 이 용 되 는 데 이 터 베 이 스 집 합 연 산 은 ?
• UNION 연 산 은 UMION 읽은 칼럼 을 지 정 한 다 .
PRIOR 자식 = 부 모
기능으로, 아 래
아 래
• INTERSECTION 형태를 사용하면
나 ’라 ,래
다> ’

한! 함
집 집 집

7
1K TAB1

계층구조에서 부모
-I =

연 산 은 INTERSECT
SELECT C3
B
!합

-}1 데이터에서 자식 Cl C2 C3
C

W
기능으로, FROM TAB1

-I

• DIFFERENCE 연 산 은 데 이 터 (부 모 ᅳ 자식) 1 A START WITH C2 IS NULL


EXC 티〕T(Oracle 은 방향으로 전 개 하 는 순방향 2 1 B CONNECT BY PRIOR Cl = C2
MINUS) 기 능 으 로 , 전개를 한다. 그 리고 3 1 C ORDER SIBLINGS B Y ^ D E S C
① Union
• PRODUCT 연 산 은 PRIOR 부 모 = 자식 4 2 D
② Difference
CROSS JOIN 기능으로 형 태 를 사 용 하 면 반대로
③ Intersection 자식 데이터에서 부 모
구현되었다.
@ Product 데 이 터 (자 식 ᅳ 부 모)

방향으로 전 개하는 역방향

전 개 를 한다.

SQL 자 격 검 정 실 전 문 제 I 9 3 94 I SQL 자 격 검 정 실 전 문 제
n . SQL 기본 및 활 용

o o

88 다음 중 O racle 계층형 질의에 대한 설명 으 로 가 장 부 적 절 한 것 은 ? 핵심정리 9〇 다음 중 계층형 질의문에 대한 설명으로 가장 부 적 절 한 것 은 ?


렉심정리
• STA RT WITH 절 은 ① START WITH절은 계층 구조의 시작점을 지정하는 구문이다.
① SQL Server에서의 계층형 질의문은 CTE(Connnori Table Expression)를
계층 구조 전개의 © ORDER SIBLINGS BY절은 형제 노드 사이에서 정렬을 지정하는 구문이다. 테이블에 계층형 데이터가

시작 위치를 존 재 하 는 경우 데 이터를 재귀 호줄함으로써 계증 구조를 전개한다.


③ 순방향전개란 부모 노드로부터 자식 노드 방향2로 전개하는 것을 말한다.
지정하는 구문이다. 조 회 하 기 위해서 계층형 ② SQL Server에서의 계층형 질의문은 앵커 멤버를 실행하여 기본 결과
④ 루트 노드의 LEVEL 값은 0이다,
즉, 루트 데이터를 질의 (Hierarchical
집합을 만들고 이후 재귀 멤버를 지속적으로 실행한다.
지 정 한 다 .(액 세 스 ) Query )를 사 용 한 다 .
89 ③ 오라클의 계층형 질의문에서 WHERE 절은 모든 전개를 진행한 이후
• ORDER S 旧 니 NGS 다 음 중 아 래 와 같 은 사 원 테 이 블 에 대 해 서 SQL 을 수 행 하 였 을 때의 계층형 데 이 터 란 동일

BY :형 제 노 드 (동 일 테이블에 계 층 적 으 로 필터 조건으로서 조건을 만족하는 데이터만을 추출하는데 활용된다.


결과로 가 장 적절한 것 은 ?
LEVEL) 사 이 에 서 상 위 와 하위 데 이 터 가 ④ 오라클의 계층형 질의문에서 PRIOR 키워드는 CONNECT BY 절에만
정렬욜 수행한다. 아 래 포 함 된 데 이 터 를 말한다.
사용할 수 있으며 ’PRIOR 자식 = 부모’ 형태로 사용하면 순방향 전개로
[테이블 :사원] 예를 들 어 , 사원 테 이 블
수행 된다.
사원번호 (PK) 사원명 입사일자 매니저사원번호 (FK) 에 서 는 사 원 들 사이 에
001 홍길동 2012-01-01 NULL 상위 사 원 (관 리 자 )과 하위
002 강감찬 2012- 01- 01 001 사원 관 계 가 존 재 하 고
91 아래 [부 세 와 [매출] 테이블에 대해서 就 IL 문장 을 실행하여 아래 [결과]와
003 이순신 2013 - 01- 01 001 조직 테이블에서는 조 직 들
004 이민정 2013-01-01 001 같이 데이터가 추 출 되었다. 다음 중 동 일 한 결과를 추 출 하 는 SQL 문 장 은 ?
사 이 에 상위 조 직 과 하위
005 이병헌 2013-01-01 NULL
조직 관 계 가 존 재 한 다 .
006 안성기 2014-01-01 005
007 이수근 2014-01-01 005
[테이블 : 부 세 [테이블 : 매출]
008 김병만 2014-01-01 005

S Q L
부서코드 상위
부서명 부서코드 매출액
(PK) 부서 코드 (FK)
[SQL]

기본 및
100 아시아부 NULL 111 1000
SELECT 사원번호, 사원명,입사일자,매니저사원번호
110 한국지사 100 112 2000
FROM 사원

■용
111 서울지점 110 121 1500
START WITH 매니저사원번호 IS NULL
112 부산지 점 110 122 1000
CONNECT BY PRIOR 사원번호 = 매니저사원번호
120 일본지사 100 131 1500
AND 입사•일자 BETWEEN '2013-01—01. AND '2013-12-31'
121 도쿄지 점 120 132 2000
ORDER SIBLINGS BY 사■원번호;
122 오사카지 점 120 211 2000

사원번호 (PK) 매니저사원번호 (FK) 130 중국지사 100 212 1500


사원명 입사일자
001 홍길동 2012-01-01 NULL 131 베이징지점 130 221 1000
003 이순신 2013 - 01- 01 001 132 상하이지점 130 222 2000
004 이민정 2013-01-01 001 200 남유럽지부 NULL
005 이병헌 2013-01-01 NULL 210 스페인지 사 200
매니저사원번호 (FK) 211 마드리드지점 210
사원번호 (PK) 사원명 입사일자
212 그라나다지점 210
003 이순신 2013-01-01 001
220 포르투갈지사 200
004 이민정 2013-01-01 001
221 리스본지 점 220
005 이병헌 2013-01-01 NULL
222 포르투지 점 220
사원번호 (PK) 사원명 입사일자 매니저사원번호 (FK)
001 흥길동 2012-01-01 NULL [결과]

사원번호 (PK) 사원명 입사일자 매니저사원번호 (FK) 부서코드 부서명 상위부서코드 1때 # ,


객 LVL
001 홍길동 2012-01-01 NULL 100 아시아지 부 NULL NULL 2
005 이병헌 2013-01-01 NULL 120 일본지사 100 NULL 1
006 안성기 2014-01-01 005 121 도쿄지 점 120 1500 2
007 이수근 2014-01-01 005 122 오사카지 점 120 1000 2
008 김 병만 2014-01-01 005

96 I SQL 자 격 검 정 실전문제
SQL 자 격 검 정 실 전 문 제 1 9 5
n . SQL 기본 및 활 용

① SELECT A . 부서 코 드 ,A . 부서명,A . 상위부서 코 드 , B . 매출액, L V L


U 다음 중 SE나^ JOIN 을 수 행 해 야 할 경우로 가 장 적절 한 것 은 ?
FROM {:沒E L E C T 부서 코 드 ,부서명,상위부서 코 드 ,L E V E L AS LVL
핵심정리
FROM 부서 셀프 조인(Self Join )이란
① 한 테이블 내에서 두 칼럼이 연관 관계가 있다.
S T A R T W IT H 부서코드 = '120' 동일 테이블 사이의
② 두 테이블에 연관된 칼럼은 없으나 JOIN 을 해야 한다.
C O N N E C T B Y P R IO R 상위부서코드 = 부서코드 조인을 말한다. 따라서
U N IO N FROM 절에 동일 ③ 두 테이블에 공통 칼럼이 존재하고 두 테이블이 연관 관계가 있다.

SELECT 부서 코 드 ,부서명,상위부서 코 드 ,L E V E L AS LVL 테이블이 두 번 이상 ④ 한 테이블 내에서 연관된 칼럼은 없으나 JOIN 을 해야 한다.
FROM 부서 나타난다. 동일 테이블
S T A R T W IT H 부서코드 = '120' 사이의 조인을 수행하면
93 아 래 와 같이 일 자 별 매 출 테이블이 존 재 할 때 아래 결과처럼 일자별 누적
CONNECT BY 상위부서 코 드 = P R IO R 부서 코 드 ) A LEFT 테이블과 칼럼 이름이
매 출 액 을 SQL로 구 하 려 고 한 다 . WINDOW FUNCTION을 사 용 하 지 않고
O U T ER JO IN 매출 B 모두 동일하기 때문에
ON (A . 부서 코 드 = B . 부서 코 드 ) 일 자 별 누 적 매 출 액 을 구 하 는 SQL 로 옳 은 것 은 ?
식별을 위해 반드시
O R D E R B Y A. 부서코드; 테이블 별칭(Alias )를
아 래
② SELECT A . 부서 코 드 ,A . 부서명, A . 상위부서 코 드 , B . 매 출 액 , L V L 사용해야 한다.
[테 이 블 : 일 자 별 매 출 ] [결과 : 일자별 누 적 매 출 액 ]
FROM (S E L E C T 부서 코 드 , 부서명, 상위부서 코 드 ,L E V E L AS LVL

FROM 부서 일자 매출액 일자 누적매출액


셀프 조인(Self Join) 문장
2 0 1 5 .1 1 .0 1 1 0 00 2 0 1 5 .1 1 .0 1 1 0 00
S T A R T W IT H 부서코드 = '100'
SELECT
2 0 1 5 .1 1 .0 2 1 0 00 2 0 1 5 .1 1 .0 2 2000
CONNECT BY 상위부서코드 - P R IO R 부서코드) A LEFT
A 니AS 명1. 칼럼명, 2 0 1 5 .1 1 .0 3 1 0 00 2 0 1 5 .1 1 .0 3 3000

과목 표 ■
OU TER JO IN 매출 B
A 니AS 명2.칼럼명, ... 20 15 그1 .0 4 1 0 00 2 0 1 5 )1 ,0 4 4000
ON (A . 부서코드 = '부 서 코 드 ) 2 0 1 5 .1 1 ,0 5
FROM 1 0 00 2 0 1 5 .1 1 ,0 5 5000
O R D E R B Y A. 부서코드; 2 0 1 5 .1 1 .0 6 1 0 00 2 0 1 5 .1 1 .0 6 6000
테이블 A 니AS 명1,

S Q L
③ SELECT A . 부서 코 드 ,A . 부서명,A 상위부서 코 드 , B 매출액, LVL 2 0 1 5 .1 1 .0 7 1 0 00 2 0 1 5 .1 1 .0 7 7000
테이블 A U A S 명2
FROM (S E L E C T 부서 코 드 ,부서명,상위부서 코 드 ,L E V E L AS LVL 2 0 1 5 .1 1 .0 8 1 0 00 2015고 08 8000

기본 및
WHERE
FROM 부서 2 0 1 5 .1 1 .0 9 1 0 00 2015고 09 9000
A 니AS 명1. 칼럼명2 =
2015고 10 1 0 00 2 0 1 5 .1 1 .1 0 10000
S T A R T W IT H 부서코드 - ’121’
A 니AS 명2. 칼럼 명1;

■용
C O N N E C T B Y P R IO R 상위부서 코 드 = 부서 코 드 ) A LEFT

O U T E R JO IN 매출 B ① SELECT A. 일자,S U M ( A , 매출액) AS 누적매출액

ON (A . 부서 코 드 - B. 부서 코드 ) FROM 일자별매출 A

O R D E R B Y A . 부서 코 드 ; G R O U P B Y A. 일자
④ SELECT A . 부서 코 드 ,A . 부서명,A . 상위부서 코 드 ,B . 매출액,L V L ORD ER BY A. 일자;
FROM (S E L E C T 부서 코 드 ,부서 명, 싱-위부서코 드 , LEVEL AS LVL ② S E L E C T B. 일자,S U M (B . 매출액) AS 누적매출액
FROM 부서 FROM 일자별매출 A JO IN 일자별매출 B O N (A . 일 자 〉= B. 일자)
S T A R T W IT H 부서코드 = (S E L E C T 부서코드 G R O U P B Y B, 일자
FROM 부서 O R D E R B Y B. 일자;
WHERE 상위부서코드 IS ③ SELECT A. 일자,S U M (B . 매출액) AS 누적매출액
NULL , FROM 일자별매출 A JO IN 일자별매출 B O N (A , 일 자 〉= B. 일자)
START WITH ^ 서코드 G R O U P B Y A. 일자
= '120' ORDER BY A. 일자;
C O N N E C T B Y P R IO R ④ SELECT A. 일자
상위부서코드 - 부서 ,(S E L E C T S U M (B . 매출액)
FROM 일자별매출 B W H E R E B. 일 자 〉= A. 일자) AS 누적
CONNECT BY 상위부서 코 드 - P R IO R 부서 코 드 ) A LEFT
매출액
O U T E R JO IN 매출 B
FROM 일자별매출 A
ON (A . 부서 코 드 : B. 부서 코드 ) G RO U P BY A. 일자
O R D E R B Y A. 부서코드; O R D E R B Y A. 일자;


o

SQL 자 격 검 정 실 전 문 제 ᅵ 9 7 98 I SQL 자 격 검 정 실전문제


n . SQL 기본 및 활용

94 다 음 중 아 래 의 SQL 수 행 결 과 로 가 장 적 절 한 것 은 ? 95 아 래 는 서 브 쿼 리 에 대 한 설 명 이 다 . 다 음 중 올 바 른 것끼 리 묶 인 것 은 ?

아 래 아 래

SELECT COUNT(DISTINCT A| |B) 가 ) 서 브 쿼 리 는 단일 행 (S in g le R o w ) 또 는 복 수 행 ( M u lt i R o w ) 비교


FROM EMP 연 산 자 와 함께 사 용 할 수 있 다 .
WHERE D = (SELECT D FROM DEPT WHERE E = T) ; 나 ) 서브 쿼 리 는 S E L E C T 절 ,F R O M 절 ,H A V IN G 절 , O R D E R B Y 절
등에서 사용이 가 능 하 다 .
EMP 테이블 다 ) 서브쿼리의 결과가 복 수 행 (M u lti R ow ) 결과를 반환하는 경우에는
A B C D '= > ' 등의 연 산 자 와 함께 사용이 가 능 하 다 .
1 a 1 X 라 ) 연 관 (C o r r e la te d ) 서 브 쿼 리 는 서 브 쿼 리 가 메인쿼리 컬럼 을 포 함
2 a 1 X 하 고 있는 형태의 서 브 쿼 리 이 다 .
3 b 2 y 마 ) 다 중 컬럼 서 브 쿼 리 는 서브쿼리의 결과로 여러 개의 컬럼이 반 환
되 어 메 인쿼 리의 조 건 과 동시 에 비교 되 는 것을 의미하며 O r a c le
및 S Q L S e r v e r 등의 D B M S 에서 사 용 할 수 있 다 .
DEPT 테이블
D E p
X i 5
① 나 ,라 ,마
y m 6
② 가 , 나 ,라

과목
③ 나 ,다 ,라

① 〇 © ᅪ, ᅪ ,〇 }■

I

② 1

S Q L
③2

기본 및 활용
④ 3 I 96 I 아래 테이블은 어느 화사의 사 원 들 과 이들이 부양하는 가족에 대한 것으로
밑 줄 친 칼 럼 은 기 본 키 (Primary Key )를 표 시 한 것 이 다 . 다 음 중 ‘현 재

메인쿼리와 서브쿼리 부 양 하 는 가 족 들 이 없 는 사 원 들 의 이 름 을 구 하 라 는 질 의 에 대해 아 래

SQL 문 장 의 _ , [ © ] 에 들어 갈 내 용 으 로 가 장 적 절 한 것 은 ?

아 래

[테이블]
사 원 凶 넷 , 이 름 ,나 이 )
가족 (으l f i ,나 이 ,부 양 사 번 )

반환되는 데이터의 형태에 따른 서브쿼리 분류 졌 가 족 테이블의 부 양 사 번 은 사 원 테이블의 사 번 을 참 조 하 는 외래


키 ( F o r e ig n K e y ) 이 다 .
서며
서브쿼리 종류 5 O
Single Row 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리를 의미한다. [SQ L 문 장 ]

서브쿼리 단일 행 서브쿼리는 단일 행 비교 연산자와 함께 사용된다. SE LE C T 이름

(단일 행 서브쿼리) 단일 행 비교 연산자에는 =, <, <=, >, >=, ◊이 있다, FROM 사원、

Multi Row 서브쿼리의 실행 결과가 여러 건인 서브쿼리를 의미한다. 다중 W HERE |Q | (S E L E C T * F R O M 가족 W H E R E |© |)

서브쿼리 행 서브쿼리는 다중 행 비교 연산자와 함께 사용된다. 다중 행


(다중 행 서브쿼리) 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS가 있다.
① 石) : :E X IS T S ◦ : 사번 = 부양사번
Multi Column 서브쿼리의 실행 결과로 여러 킬-럼을반환한다. 메인쿼리의 조건절에
서브쿼리 여러 칼럼을 동시에 비교할수 있다. 서브쿼리와 메인쿼리에서 비교
(D O : E X IS T S © : 사번 ◊ 부양사번

(다중칼럼 서브쿼리) 하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야 한다. ③ 活) : N O T E X IS T S © : 사번 = 부양사번

④ 色 > : N O T E X IS T S © : 사번 ◊ 부양사번

SQL 자 격 검 정 실 전 문 제 I 9 9 1〇 〇 I SQL 자 격 검 정 실전 문제
n . SQL 기본 및 활용

o o

97 다 음 중 아 래 의 대 D를 참 조 하 여 아래 SQL 과 동 일 한 결 과 를 출 력 하 는 98 아 래 의 데이 터 모 델 을 기 준 으 로 SQL 을 작 성 하 였 다 . 다 음 중 아 래 의
핵심정리
SQL 로 가 장 부 적 절 한 것 은 ? SQ L 에 대해 가 장 바 르 게 설 명 한 것 은 ?

서 브 쿼 리 를 사용시

주의 사 항
① 서브쿼리를 괄호로
감싸서 사용한다.

② 서 브 쿼 리 는 단일
행 (Single Row) 또 는
복 수 행 (Multiple
Row) 비교 연 산 자 와
함께 사 용 가능 하 다 .

단일 행 비교

연산자는 서브쿼리의
결 과 가 반드시 1건
이하이어야 하고 복수
행 비교 연 산 자 는

서 브 쿼 리 의 결과

과목
건수와 상관없다.

I
③ 서브쿼리에서는 ① S E L E C T A . 회 원 번 호 , A . 회원명
O R D ER B Y 를

■S
FROM 회원 A

Q L
사용하지 못한다.
WHERE E X IS T S (S E L E C T 1 F R O M 동 의 항 목 B

기본 및 활용
O R D ER B Y 절은
W HERE A. 회원번호 = B. 회 원 번 호 A N D
S H _ E C T 절에서 오직
B. 동 의여부 = ’N 〇
한 개 만 올 수 있기
O R D E R B Y A. 회원번호; ① 이벤트 시작일자가 ‘2014.10.01’과 같거나 큰 이벤트를 대상으로 이메
때문에 O R D 타?
BY 절은 메인쿼리의 ② 況 ]L E C T A . 회 원 번 호 , A . 회원명 일이 발송된 기록이 있는 모든 회원을 추출하는 SQL이다.
마 지 막 문장에 FROM 회원 A ② © 을 제거하고 活)의 EXISTS 연산자를 IN 연산자로 변경해도 결과는
위 치 해 야 한다. W HERE A . 회 원 번 호 I N (S E L E C T B 회 원 번 호 F R O M 동 의 항 목 B 동일하다.
W HERE B. 동 의 여 부 = 'N ') ③ (닻은 이벤트 시작일자가 ‘2014.10.01,
과 같거나 큰 이벤트건수와 그
O R D E R B Y A. 회원번호; 이벤트들을 기준으로 회원별 이메일 발송건수를 비교하는 것이다.
③ SELECT A . 회 원 번 호 ,A . 회원명 ④ GROUP BY 및 집계함수를 사용하지 않고 HAVING절을 사용하였으므로
FROM 회원 A SQL이 실행되지 못하고 오류가 발생한다.
W HERE 0 < (S E L E C T C O U N T (* )

FROM 동 의 항 목 B W H E R E B .동 의 여 부 = 'N ')

ORD ER BY A. 회원번호;

④ S E L E C T A . 회 원 번 호 , A 회원명

FROM 회원 A , 동 의 항 목 B

W HERE A. 회원번호 = B . 회 원 번 호 A N D B. 동 의 여 부 = 'N'

G R O U P B Y A . 회 원 번 호 ,A . 회원명

O RD ER BY A 회원번호;


o

102 I SQL 자격 검정 실전 문 제
SQL 자 격 검 정 실전 문 제 I 1 〇 1
n . SQL 기본 및 활 용

다음 중 서브쿼리에 대한 설 명 으 로 가 장 적절한 것 은 ? 핵심정리 101 아 래 와 같 은 데이터 모델에서 평 가 대 상 상 품 에 대 한 품 질 평 가 항 목 별 최 종

평 가 결 과 를 추 출 하 는 SQL 문 장 으 로 옳 은 것 은 ?(단 , 평 가 항 목 에 대 한
① 단일 행 서브쿼리는 서브쿼리의 실행 결과가 항상 한 건 이하인 서브쿼
FROM 절에서 사 용 되 는 평 가 {평 가 등 급 )가 기 대 수 준 에 미 치 지 못 할 경 우 해 당 평 가 항 목 에 대해
리로서 IN, ALL 등의 비교 연산자를 사용하여야 한다.
서 브 쿼 리 를 인라 인 뷰 서만 재평가를 수행한다)
② 다중 행 서브쿼리 비교 연산자는 단일 행 서브쿼리의 비교 연산자로도 (Inline View )라 고 한다.
사용할 수 있다. 서 브 쿼 리 의 결 과 가 마치

③ 연관 서브쿼리는 주로 메인쿼리에 값을 제공하기 위한 목적으로 사용 실행 시에 동 적 으 로

한다. 생 성 된 테 이블인 것처럼

④ 서브 쿼리는 항상 메인쿼리에서 읽혀진 데이터에 대해 서브쿼리에서 사 용 할 수 있다. 인라인


뷰 는 SQL 문이 실행될
해당 조건이 만족하는지를 확인히는 방식으로 수행된다.
때만 임 시 적 으 로 생 성되는

동 적 인 뷰 이 기 때문에
데 이 터 베 이 스 에 해당

정 보 가 저 장 되 지 않 는다.
서 브 쿼 리 의 결 과 가 마치
실행 시에 동 적 으 로
100 다 음 중 아 래 SQL 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ? ① SELECT B.상품ID, B.상품명, C.평가항목ID, C.평가항목명, A. 평가회차,
생 성 된 테 이 블 인 것처럼
A. 평가등급, A. 평가일자

과목
사 용 할 수 있다. 인라인
FROM 평가결과 A, 평가대상상품 B, 품질평가항목 C,
뷰 는 SQL 문이 실행될

I
(SELECT MAX(평가회차) AS 평가회차 FROM 평가결과) D


[SQL] 때만 임시적으로 생 성되는

S Q L
SELECT B. 사원번호, B.사원명, A .부서번호, A .부서명 동 적 인 뷰 이 기 때문에 WHERE A. 상품ID = B. 상품ID
, (SELECT COUNT(*) FROM 부양가족 Y WHERE 데이터베이스에 해당 AND A. 평가항목ID = C. 평가항목ID

기본 및 활용
'사 원 번 호 = B. 사원번호) AS 부양가족수
정 보 가 저 장 되 지 않 는다. AND A. 평가회차 = D. 평가회차;
FROM 부서 A, (SELECT *
FROM 사원
WHERE 입사년도 = '2014') B ② 湖 LECTB.상품ID, 보상품명, C.평가항목ID, ◦.평가항목명,A. 평가회차,
WHERE A. 부서번호 = B. 부서번호
A. 평가등급,A. 평가일자
AND EXISTS (SELECT 1 FROM 사원 X WHERE X. 부서번호 =
A. 부서 번호); FROM 평가결과 A, 평가대상상품 B, 품질평가항목 C
WHERE A. 상품ID = 표상품®
AND A. 평가항목ID = C. 평가항목ID
① 위 SQL에는 다중 행 연관 서브쿼리, 단일 행 연관 서브쿼리,M in e
AND A. 평가회차 = (SELECT MAX好.평가회차)
View 기- 사병*되었다.
FROM 평가결과 X
② SELECT절에 사용된 서브쿼리는 수칼라쇠브쿼과라고도하며, 이러한
WHERE X. 상품ID = B. 상품ID
형태의 서브쿼리는 JOIN 으로 동일한 결과를 추출할 수도 있다.
AND X.평가항목ID - C.평가항목ID);
③ WHERE 절의 서브쿼리에 사원 테이블 검색 조건으로 입사년도 조건을
FROM절의 서브쿼리와 동일하게 추가해야 원하는 결과를 추출할 수

있다.
④ FROM 절의 서브쿼리는 동적 뷰 (Dynamic View)라고도 히-며,SQL

문장 중 테이블 명이 올 수 있는 곳에서 사용할 수 있다.

o

104 | SQL 자 격검 정 실전문제


SQL 자격 검 정 실전문 제 I 1 0 3
n . SQL 기 본 및 활 용

③ SELECT B.상품ID, B.상품명,C.평가항목ID , C.평가항목명


102 아래 부서 테이블의 담 당 자 변 경 을 위해 부 서 임 시 테이블에 입력된 데이
, MAX(A. 평가회차) AS 평가회차
터 를 활 용 하 여 주 기 적 으 로 부 서 테 이 블 을 아래 결 과 와 같이 반 영 하 기
, MAX(A. 평7]등급) AS 평가등급
위 한 SQL 으 로 가 장 적 절 한 것 은 ?(단 ,부 서 임 시 테 이 블 에 서 변 경 일 자 를
MAX(A, 평가일자) AS 평가일자

기 준 으 로 가 장 최 근 에 변경된 데 이 터 를 기 준 으 로 부서 테이블에 반영되
FROM 평가결과 A, 평가대상상품 B, 품질평가항목 C
어야 한다)
WHERE A. 상품ID - B. 상품ID
AND A. 평'가항목ID = C. 평가항목ID 아 래
GROUP BY B.상품ID, B.상품명,C. 평가항목ID, C. 평가항목명;
[테이블 : 부 세
부서 코드 (PK) 부서명 상위부서코드 담당자
④ SELECT B.상품ID , B.상품명, C. 평가항목ID, C. 평가항목명, A.평가회차,
A001 대표이사 NULL 김대표
A. 평가등급,A.평가일자 A002 영업본부 A001 홍길동
FROM (SELECT 상품ID, 평가항목ID A003 경영지원본부 A001 이순신
MAX(평가회차) AS 평가회차

A004 마케팅본부 A001 강감찬
A005 해외영업팀 A002 이청용
,MAX(평가등급) AS 평가등급
A006 국내영업 팀 A002 박지성

■방평가일자) AS 평가일자 A007 총무팀 A003 차두리
FROM 평가결과 A 008 인사팀 A003 이민정
A 009

과목
해외마케팅팀 A004 이병헌
GROUP BY 상품四 ,평가항목四 ;
! A, 평가대상상품 B, 품질평가항목。
A 010 국내마케팅팀 A004 차승원

I
WHERE A. 상품ID = B. 상품ID


AND A. 평가항목ID = C. 평가항목ID;

S Q L
[테이블 :부서임시]
변경일자 (PK) 부서 코드 (PK) 담당자

기본 및 활용
2014.01.23 A007 이달자
2015.01,25 A 007 홍경민
2015,01,25 A008 유재석

[결과]
부서 코드 (PK) 부서명 상위부서코드 담당자
A001 대표이사 NULL 김대표
A002 영업본부 A001 흥길동
A003 경영지원본부 A001 이순신
A004 마케팅본부 A001 강감찬
A005 해외영업팀 A002 이청용
A006 국내영업팀 A002 박지성
A007 총무팀 A003 홍경민
A008 인사팀 A003 유재석
A009 해외마케팅팀 A 004 이병헌
A010 국내마케팅팀 A004 치숭원

o 〇

106 I SQL 자격검 정 실전문제


SQL 자격검 정 실전문제 I 105
n . SQL 기 본 및 활 용

"~0"

① UPDATE 부서 A SET 담당자 = (SELECT C. 부서코드


104 아래 테이 블 에 대 한 [뷰 생 성 스 크 립 트 ]를 실 행 한 후 ,조회 SQL 의 실행
핵심정리
FROM (SELECT 부서코드,MAX(변경일자) AS 변경일자
결과로 맞는 것 은 ?
FROM 부서임시
아 래
GROUP BY 부서코드) B, 부서임시 C

TBL]
WHERE B. 부서코드 = C. 부서코드
C1 C2
AND B. 변경일자 = C. 변경일자 A 100
AND A . 부서코드 = C. 부서코드) B 200

② UPDATE 부서 A SET 담당자 = (SELECT C. 부서코드 B 100


B
FROM (SELECT 부서코드,MAX(변경일자) AS 변경일자
200
FROM 부서임시
GROUP BY 부서코드) B, 부서임시 C [뷰 생성 스 크 립 트 ]
C R E A T E V IE W V _T B L
WHERE B. 부서코드 = C. 부서코드
AS
AND B. 변경일자 = C. 변경일자
SELECT *
AND A . 부서코드 = C. 부서코드) F R O M TBL

WHERE EXISTS (SELECT 1 FROM 부서 X WHERE A . 부서코드 = W H E R E C l = ’B ’ O R C l I S N U L L

X . 부서코드);
[조회 S Q L ]

과목
③ UPDATE 부서 A SET 담당자 = (SELECT B. 담당자 S E L E C T S U M ( C 2 ) C2

n
FROM 부서임시 B F R O M V _T B L


W H E R E C 2 > = 2 0 0 A N D C l = 'B'
WHERE B. 부서코드 - A . 부서코드

S Q L
AND B. 변경 일자 = (SELECT MAX.{0 . 변경 일자) ① 0 ② 200

기본 및 활용
뷰 사용의 장점
FROM 부서임시 C WHERE ③ 300 ④ 400
• 독립성: 테이블 구조가
C. 부서코드 = B 부서코드))
변경되어도 뷰를
WHERE 부서코드 IN (SELECT 부서코드 FROM 부서임시);
사용하는 응용 l 105 I 다음 중 아래의 테이블에서 SQL을 실 행 할 때 결 과 로 가 장 적 절 한 것 은 ?
④ UPDATE 부서 A SET 담당자 = (SELECT B. 담당자
프로그램은 변경하지
아 래
않아도 된다. FROM 부서임시 B
• 편리성: 복잡한 질의를 WHERE B. 부서코드 = A. 부서코드 [테이블 : 서비스]

뷰로 생성함으로써 AND B. 변경일지- = ’2015.01.25:’); 서 비 스 ID ( P K ) 서비 스 명


관련 질의를 단순하게 001 서비스1

작성할 수 있다. 또한 002 서비스2


003 서비스3
해당 형태의 SQL문을
103 004 서비스4
자주 사용할 때 뷰를 다 음 중 뷰 ( View ) 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ?

이용하면 편리하게
[테이블 :서비스가입]
사용할 수 있다. ① 뷰는 단지 정의만을 가지고 있으며, 실행 시점에 질의를 재작성하여
회 워 변호 (PK) 서비스 ID (PK) 가입일자
• 보안성 : 직원의 수행한다.
1 001 2013-01-01
급여정보와 같이 ② 뷰는 복잡한 SQL 문장을 단순화 시켜주는 장점이 있는 반면, 테이블 1 002 2013-01-02
숨기고 싶은 정보가 구조가 변경되면 응용 프로그램을 변경해 주어야 한다. 2 001 2013-01-01
존재한다면, 뷰를 2 002 2 0 13 - 01 - 0 2
③ 뷰는 보안을 강화하기 위한 목적으로도 활용할 수 있다.
생성할 때 해당 칼럼을 2 003 2013-01-03
④ 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도
빼고 생성함으로써 3 001 2013-01-01
있다. 3 002 2 0 1 3 - 0 1 - 02
사용자에게 정보를
3 003 2 0 13 - 01 - 0 3
감출 수 있다.

108 I SQL 자격검 정 실전문제


SQL 자 격 검 정 실전 문 제 I 1 0 7
n . SQL 기본 및 활용

[SQL] 1〇 6 아래 의 데이터 모 델 에 서 S Q L을 이 용하여 표(지 역 별 월 별 이 용 량 )와


SELECT CASE W H E N G R O U P IN G (A . 서 비스ID ) = 0 T H EN A. 서비스ID
같은 형식의 데이터를 추출 하 려 고 할 때 올 바 른 SQ L 문 장 은 ?
E LSE '합계 ’ E N D AS 서비스ID
.C A SE W H E N G R O U P IN G ® . 가입일자) = 0
THEN N V L (B . 가입일자, 소계’ E N D AS 가입일자
ELS E ■ 아 래
,C O U N T (B . 회원번호) AS 가입건수
FROM 서비스 A LEFT OU T E R J O IN 서비스가입 B 지역 이용내역
ON ( A. 서비스ID - B. 서비스ID 지 역 ID 이용자D I
A N D B. 가입 일자 BETW EEN '2013-01-01' A N D '2013-01-31') 이용일시 I
G R O U P BY R O L L U P (A . 서비스 ID , B . 가입일자);
지 역명 H---------名K
이용람
지 역 O (FK)

① 서 비 스 ID 가입일자 가입건수
001 2013-01-01 3
[표 : 지역별 월별 이용량]
001 소계 3
지역명 이용월 이용량
002 2013-01-02 3
서울 2014.01 1,000
002 소계 3 2014.02 1,000
서울
003 2013-01-03 2 서울 월별합계 2,000
003 소계 2 경기 2아 4.01 1,000
8 경기 2014.03 2,000

과목
합계 소계
경기 월별합계 3,000

I
대전 2014.05 1,500


서 비 스 ID 가입일자 가입건수 대전 2014,06 1,000

S Q L
001 2013-01-01 3 대전 월별합계 2,500
7,500

기본 및 활용
002 2013-01-02 3 지역전체 월별합계
003 2013- 01-03 2
합계 소계 8
① 湖 LECT (CASE GROUPING® .지역명) WHEN 0 THEN '지역전체’
ELSE B. 지역명 END) AS 지역명

서 비 스 ID 가입일자 가입건수
,(CASE GROUPING(T〇 _CHA及(A 이용일시, ’YYYY.M내))
001 2013-01-01 3
WHEN 0 THEN '월별합계’
001 소계 3
002 2013-01-02 3 ELSE TO_CHAR(A. 이용일시, 'YYYY.MM') END) AS 이용월

002 소계 3 孤 M(A. 이용량) AS 이용량



003 2013-01-03 2 FROM 이용내역 A INNER JOIN 지역 B ON (A.지역ID = B 지역I 的
003 소계 2 GROUP BY ROLLlff(B.지역명, TO_CHAR(A.이용일시, ’YYYY. MM,
))
004 - 0
004 소계 0
② SELECT (CASE GROUPING®. 지역ID) WHEN 1 THEN ’지역전체,
합계 소계 8
ELSE MIN(B.지역명) END) AS 지역명
,(CASE GROUPING(TO_CHAR(A.이용일시, 'YYYY.MM'))

서 비 스 ID 가입일자 가입건수 WHEN 1 THEN '월별합계’


001 2013-01-01 3
四고E TO_CHAR(A.이용일시,’YYYY.MM) END) AS 이용월
002 2013-01-02 3
孤 M(A. 이용랑^ AS 이용량

003 2013-01-03 t 2
FROM 이용내역 A INNER JOIN 지역 B ON (A,지역ID = B.지역ID)
004 - 0
8 GROUP BY ROLLUP(B.지역ID, TO_ CHAR(A. 이용일사 'YYYY. MM’))
합계 소계

〇 公

SQL 자 격 검 정 실전문 제 I 1 〇 9 1 10 I SQL 자격검정 실전 문 제


n . SQL 기본 및 활용

.
卜.
.
』 —
—.
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
...
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..

③ 細]LECT (CASE GROUPING(B. 지역명) WHEN 1 THEN '지역전체’


핵심정리 1 108 I 다음 설명 중 가 장 적 절 한 것 은 ?
ELSE B.지역명 _ AS 지역명
.(CASE GROUPING(TO_CHAR(A. 이용일시, 'YYYY. MM')) ① 일반 그룹 함수를 사용•하여 CUBE, GROUPING SETS와 같은 그룹
Grouping Columns이
WHEN 1 THEN '월별합계’ 함수와 동일한 결과를 추출할 수 있으나,ROLLUP 그룹 함수와 동일한
가질 수 있는 모 든 경우에
ELSE TO_C四AR(A. 이용일시, 'YYYY.MM:
) END) AS 이용월 결과는 추출할 수 없다.
대하여 Subtotal을
,SUM(A. 이용량) AS 이용량 ② GROUPING SKI'S 함수의 경우에는 함수의 인자로 주어진 컬럼의 순서에
생성해야 하는 경우에는
FROM 이용내역 A INNER JOIN 지역 B ON (A.지역ID = B 지역ID) CUBE 를 사 용 하 는 것이 따라 결과가 달라지므로 컬럼의 순서가 중요하다.
GROUP BY CUBE(B.지역명, TO_CHAR(A.이용일시, ’YYYY.Mrf》 바 람 직 하 나 ,ROLLUP 에 ③ CUBE, ROLLUP, GROUPING SETS 함수들의 대상 컬럼 중 집계된
비해 시 스 템 에 많은
컬럼 이외의 대상 컬럼 값은 해당 컬럼의 데이터 중 가장 작은 값을
부 담 을 주 므로 사용에
④ SELECT (CASE GR〇 UPING(B. 지역ID) WHEN 1 THEN ’지역전체’ ^■환한다.
주 의 해 야 한다.
ELSE MIN(B. 지역명) _ AS 지역명 (4) CUBE 그룹 함수는 인자로 주어진 컬럼의 결합 가능한 모든 조합에
,(CASE GROUPING(TO_CHAR(A.이용일시, 'YYYY.MM)) 대해서 집계를 수행하므로 다른 그룹 함수에 비해 시스템에 대한 부하가
WHEN 1 THEN ’월별합계’ 크다.
ELSE TO_CHAR(A. 이용일사 YYYY.MM1) END) AS 이용월
SUM(A. 이용량) AS 이용량
, CUBE는 결합 가능한 모든 109 아 래 와 같 이 설 비 와 에 너 지 사 용 테 이 블 을 이 용 하 여 결고■ 나타내려할
FROM 이용내역 A INNER JOIN 지역 B ON (A.지역ID = B.지역ID) 값에 대하여 다차원
때 SQL 으 로 가 장 적 절 한 것 을 2 개 고 르 시 오 .

과목
GROUP BY GROUPING SEI1S(B.지역ID, TO_CHAR(A. 이용일시, ’YYYY.MM*)) 집계를 생성한다.
CUBE도 결과에 대한

I
아 래


정렬이 필 요 한 경 우 는

S Q L
ORDER BY 절에 :테이블 : 설비] [테이블 : 에너지사용]
1〇 7 아래 결 과 를 얻기 위 한 就 JL문 에 서 [ 而 ] 에 들 어 갈 함 수 를 작 성 하 시 오 .
설비 ID 설비 ID 에너지코드

기본 및 활용
명 시 적 으 로 정렬 칼럼이 설비명 사용량
표 시 가 되 어 야 한다. 1 설비 1 1 전기 100
1 래
2 설비 2 1 용수 200
구매이 력 3 설비 3 1 바람 300
2 전기 200
구매고객 구매월 총 구매건 총 구매 액
2 용수 300
AAA 2 0 10 01 1 10 00
201002 2 3000
3 전기 300
AAA
AAA 201003 1 10 00 [결과]
AAA 4 5000 설비 ID 에너지코드 사용량합계
BBB 2 0 10 01 3 2000
1 바람 300
BBB 201002 5 3000
1 용수 200
BBB 201003 1 2000
1 전기 100
BBB 9 7000
1 NULL 600
CCC 201101 1 2000
1 5000
2 용수 300
CCC 20 11 02

CGC 20 11 03 1 10 00 2 전기 200
CCC 3 8000 2 NULL 500
16 20000 3 전기 300
3 NULL 300
[SQL문] NULL 바람 300
湖 LECT 구매고객,구매월,GOUNT(*) "# 구매건' SUM(구매금액) "총 구매액" NULL 용수 500
FROM 구매이력 NULL 전기 600
GROUP BY 1 Q (구매고객, 구매월) NULL NULL 1400

SQL 자 격 검 정 실 전 문 제 I 1 1 1 112 I SQL 자 격 검 정 실전 문 제


n . SQL 기 본 및 활용

① SELECT A .설비 ID ’ B. 에너지코드,SUM(B,사용량) AS 사용량합계


핵심정리 11 ᄋ 자 재 발 주 테이블에 SQ L을 수 행 하 여 아 래 와 같은 결 과 를 얻 었 다 . 다음
FROM 설비 A INNER JOIN 에너지사용량 B
중 © 에 들어갈 문장으로 옳은 것은?
ON (A . 설비 ID = B. 설비 ID )
GROUPING SETS 은
GROUP BY CUBE ((A .설비 ID ), (B. 에너지코드),(A.설비 ID , 아 래
다 양 한 소계 집 합 을 만들
B. 에너지코드))
수 있 는 데 , GROUPING
[테이블 : 자재발주]
ORDER BY A . 설비 ID , B. 에너지코드; SFTS 에 표 시 된 인 수들에
자재 번호 체 D 발주일자 ^주 수 량
② SELECT A .설비 ID , B. 에너지 코 드 , SUM(B.사용량) AS 사용량합계 대한 개별 집계 룹 구 할 수
1 001 20150102 100
FROM 설비 A INNER JOIN 에너지사용량 B 있 으며, 이때 표 시 된
1 001 20150103 200
ON (A. 설비 ID = B. 설비 ID) 인 수 들 간 에 는 계층
구조인 ROLLUP과 는 달리 2 001 20150102 200
GROUP BY CUBE (A .설비 ID , B. 에너지코드)
평 등 한 관 계 이 므 로 인수의 2 002 20150102 100
ORDER BY A . 설비 ID , B‘ 에너지코드;
순서가 바뀌어도 결과는 3 001 20150103 100
③ SELECT A. 설비 ID , B. 에너지 코 드 , SUM(B. 사용량) AS 사용량합계
같다. 3 002 20150103 200
FROM 설비 A INNER JOIN 에너지사용량 B
그 리 고 GROUPING SETS
ON (A . 설비 ID = B. 설비 ID) 함 수 도 결과에 대한
[SQL]
GROUP BY GROUPING SETS((A .설비 ID ), (B. 에너지 S H ) , 정렬이 필 요 한 경우 는 SELECT CASE WHEN GROUPING(자재 번호) = 1 THEN '자재 전체’
(A .설비 ID , B. 에너지코드),〇 ) ORDER BY 절에 ELSE 자재번호 END AS 자재번호

과목
ORDER BY A. 설비 ID , B. 에너지코드; 명 시 적 으 로 정렬 칼럼이 .CASE WHEN GROUPING(발주체D) - 1 THEN _발주처전체1
표 시 가 되 어 야 한다. ELSE 발주체!) END AS 발주체D

n
④ SELECT A . 설비 ID , B. 에너지코드,SUM(B.사용량) AS 사용량합계
.CASE WHEN GROUPING(발주일자) = 1 THEN『
발주일자전체1

.
FROM 설비 A INNER JOIN 에너지사용량 B ELSE 발주일자 END AS 발주일자

S Q L
ON (A . 설비 ID = B. 설비 ID) , SUM(발주수량) AS 발주수량합계

기본 및 활용
FROM 자재발주
GROUP BY GROUPING SETS((A .설비 ID), (B. 에너지 S H ) ,

(A. 설비 ID , B. 에너지코드))
ORDER BY 자재번호,발주체D, 발주일자
ORDER BY A . 설비 ID , B. 에너지코드;

[결과]

자재 번호 발주체D 발주일자 발주수량합계


1 발주처 전체 발주일자전체 300
2 발주처 전체 발주일자전체 300
3 발주처 전체 발주일자전체 300

자재 전체 001 20150102 300

자재 전체 001 20150103 300

자재 전체 002 20150102 100


자재 전체 002 20150103 200

① GROUP BY CUBE (자재번호,(발 주 체 D,발주일자))


② GROUP BY CUBE (자재번호,발 주 체 D,발주일자)
③ GROUP BY GROUPING SETS (자재번호,발 주 체 D , 발주일자)
④ GROUP BY GROUPING SETS (자재번호, (발 주 체 D, 발주일자))

o
1 14 I SQL 자격 검 정 실전문 제
SQL 자 격 검 정 실 전 문 제 I 1 1 3
n . SQL 기 본 및 활용

111 다음 중 월 별 매 출 테 이 블 을 대 상 으 로 아 래 S Q L 을 수 행 한 결 과 인 것 은 ?
핵심정리
다 음 중 원 도 우 함 수 (Window Function , Analytic Function ) 에 대 한

설명으로 가장 부적절한 것은?


아 래
① Partition과 Group By 구문은 의미적으로 유사하다.
[테 이 블 : 월 별 매 출 ] ② Partition 구문이 없으면 전체 집합을 하나의 Partition으로 정의한
상 품 ID 월 매출액 것과 동일하다.
P001 2 0 14 그0 1500
③ 윈도우 함수 처리로 인해 결과 건수가 줄어든다.
P001 2 0 14 .11 1500
④ 윈도우 함수 적용 범위는 Partition을 넘을 수 없다.
P001 2 0 1 4 .1 2 2500
P002 2 0 1 4 .1 0 1 0 00
P002 2 0 14 ,11 2000
RANK ORDER ” 3 | 다 음 중 아 래 와 같 은 테 이 블 에 서 SQL 을 실 행 할 때 결 과 로 가 장 적 절 한
P002 2 0 1 4 .1 2 1500
P003 2000
BY를 포함한 QLERY 것은?
2 0 1 4 .1 0
P003 2 0 14 .11 1 0 00 문에서 특정 항목(칼럼)에
P003 2 0 1 4 .1 2 1 0 00 대한 순위를 구하는 아 래

함수이며 동일한 값에 [테이블 : 고객]


[SQ L] 대해서는 동일한 순위를 고객번호 (PK) 고객명
S E L E C T 상 품 ID , 월 , S U M ( 매 출 액 ) A S 매출액 부여하게 된다. 001 홍길동
FROM 월별매출 002 이순신
W HERE 월 BETW EEN『
2 0 1 4 .1 0 ' A N D ’2 0 1 4 .1 2 ’ 003 강감찬
G R O U P B Y G R O U P I N G S E T S (( 상 품 ID , 월 ) ); 004 이상화
005 이규혁

S Q L
상 품 ID 월 매출액 상 품 ID 월 매출액
[테이블 : 월별미 출]
NULL 2 0 1 4 .1 0 4500 P001 2 0 1 4 .1 0 1500

기본 몇 활용
월 (PK) 고객번호 (PK) 매출액
NULL 2 0 1 (1 1 4500 P001 2 0 14 .11 1500
201301 001 200
NULL 2 0 1 4 .1 2 5000 P001 2 0 1 4 .1 2 2500
201301 002 300
P001 NULL 5500 P002 2 0 1 4 .1 0 10 00
201301 003 250
P002 NULL 4500 P002 2 0 1 4 .1 1 2000
201301 004 300
POOS NULL 4000 P002 2 0 1 4 .1 2 1500
201301 005 250
P003 2 0 1 4 .1 0 2000
201302 001 150
P003 2 0 1 (1 1 1 0 00
201302 002 150
P003 2 0 1 4 .1 2 1 0 00
201302 004 200
201302 005 100
③ 상 품 ID 월 매 •액 ④ 상 품 ID 월 매■액
201303 002 100
NULL 2 0 1 4 .1 0 4500 P001 2 0 1 4 .1 0 1500
201303 003 100
NULL 2 0 14 .11 4500 P002 2 0 1 4 ,1 0 10 00
2 0 1 4 .1 0 2000
201303 004 200
NULL 2 0 1 4 .1 2 5000 POOS
4500
201303 005 350
P001 NULL 5500 NULL 2 0 1 4 .1 0
P002 NULL 4500 P001 2 0 1 4 .1 1 1500
[SQL] 少
P003 NULL 4000 P002 2 0 1 4 ,1 1 2000
고객번호,고객명, 매출액
S E LE C T 메‘
1 4 00 P003 2 0 1 4 .1 1 1 0 00 ,R A N K () O V E R (O R D E R B Y 매출액 D E S C ) AS 순휘
NULL NULL
0 NULL 2 0 1 (1 1 4500 FROM (
P001 2 0 1 4 ,1 2 2500 S E LE C T A . 고객번호
,M A X (A . 고객명) A S 고견명
P002 2 0 1 4 .1 2 1500
,S U M (B . 매출액 i A S 매출액
P003 2 0 1 4 .1 2 1000 FROM 고객 A IN N E R J O IN 월별매출 B
NULL 2 0 1 4 그2 5000 ON (A , 고객번호 = B . 고객번호)
G R O U P B Y A 고객번호
)
ORDER BY RNK ;

SQL 자 격 검 정 실 전 문 제 I 1 1 5 116 I SQL 자 격검 정 실전문제


n . SQL 기본 및 활 용

114 아래 데이터 모델에서 활 동 점 수 가 높 은 고 객 을 게임상품 iD별로 10등까지


고객번호 고객명 매출액 순위 핵심정리
005 이규혁 700 1 선별하여 사 은 행 사 를 진 행 하 려 고 한 다 . 다음 SQL 중 가 장 적 절 한 것 은 ?
004 이상화 700 1 (단 , 활 동 점 수 가 동 일 한 고 객 은 동 일 등 수 로 한 다 . 아래 결 과 예 제 참 조)
DENSE-RANK 함 수 는
002 이순신 55 0 3 RANK 함 수 와 흡 사 하 나 ,
001 홍길동 350 4 동 일 한 순 위 를 하나의 아 래

003 강감찬 35 0 4 건 수 로 취 급 하 는 것이

다른 점이다.

고객번호 고객명 매출액 순위


005 이규혁 700 1

004 이상화 700 2

002 이순신 550 3

001 35 0 4 [결과 예제 ]
홍길동
003 강감찬 350 5 게 임 상 품 ID 고객 ID 활동점수 등 수 (순 위 )
00 1 121 150 1

고객번호 고객명 매출액 순위 00 1 111 150 1

005 이규혁 700 1 001 23 4 110 3

과목
004 이상화 700 1 00 1 212 100 4

002 이순신 550 2 001 45 5 100 4

I
,
001 홍길동 350 3 001 182 90 6

S Q L
003 강감찬 350 3 001 199 80 7

기본 및 활용
001 109 70 8
고객번호 고객명 매출액 순위 001 876 70 8
003 강감찬 350 1
001 23 2 40 10
001 홍길동 35 0 1
001 901 40 10
002 이순신 55 0 2

004 이상화 700 3

005 이규혁 700 3


118 I SQL 자격검 정 실전문제


SQL 자 격 검 정 실 전 문 제 I 1 1 7
n . SQL 기본 및 활 용

① SELECT 게임상품ID, 고객ID, 활동점수,순위


1 ” 5 1 다음 중 추천내역 테이블에서 아 래 와 같 은 就 JL을 수행하였을 때의 결과로
핵심정리
FROM (SEUECT DENSE_RANK〇 OVER(ORDER BY 1 동점수 DESC) AS 순위
가장 적절한 것 은 ?
ROW-NUMBER 함 수 는

고객ID , 게임상품ID , 활동점수
RANK나 DENSE_RANK
FROM 고객활동) 아 래
함 수 가 동 일 한 값에
WHERE 순위 <= 10;
대해서는 동 일 한 순위를
[테이블 : 추천내역]
부 여 하 는 데 반해, 동 일 한
추천경로 추천인 피추천인 추천점수
② SELECT 게임상품犯,고객ID ,활동점수,순위 값이라도 고유한 순위를
SN S 나한일 강감찬 75
FROM (SELECT DENSE„RANK〇 0VER(PAKnT10N BY 게임상품ID 부여한다. SN S 이순신 、 강감찬 80
ORDER BY 활 동 ^수 DESC) AS 순^ 이벤트웅모 홍길동 ‘ 강감찬 88
이벤트응모 저 절로 이순신 78
고객ID, 게임상품四, 활동점수

홈페이지 저 절로 이대로 93
M於 M ^ 객!동)
홈페이지 홍두깨 심청이 98
WHERE 순위 <= 10;

[S Q L ]
③ SELECT 게임상품ID , 고객ID , 활동점수,순위 S E LE C T 추천경로, 추천인, 피추천인, 추천점수
FROM (SE LE C T 추천경로,추천인,피추천인,추천점수
FROM (SELECT RANK〇 OVER(ORDER BY 1 동점수 DESC) AS 순위
, ROW _ N U M B E R 〇 OV ER(PA RT IT IO N BY 추천경로

고객ID , 게임상품TO, 활동점수 O R D E R B Y 추천점수 D E S C ) A S R N U M

과목
FROM 고객활동) FROM 추천내역)
W HERE R N U M = 1; ,

K
WHERE 순위 <= 10;


S Q L
④ SELECT 게임상원 D , 고객ID , 활동점수,순위
추천경로 추천인 피추천인 추천점수

기본 및 활용
FROM (SELECT RANK〇 OVER(PARHrn 〇 N BY 게임상품江)
SN S 나한일 강감찬 75
ORDER BY 활f 점수 DESC) AS 순 ^
SN S 이순신 강감찬 80

고객ID , 게임상품ID , 활동점수
이벤트응모 흥길동 강감찬 88
FROM 고객활동)
이벤트응모 저 절로 이순신 78

홈페이지 저절로 이대로 93

홈페이지 홍두깨 심청이 98

추천경로 추천인 피추천인 추천점수


홈페이지 홍두깨 심청이 98

추천경로 추천인 피추천인 추천점수


SN S 이순신 강감찬 80
이벤트응모 홍길동 강감찬 88

홈페이지 홍두깨 심청이 98

추천경로 추천인 피추천인 주천점수


SNS 나한일 강감찬 75
이벤트응모 저 절로 이순신 78

홈페이지 저 절로 이대로 93

0
o

120 I SQL 자격 검 정 실전문제


SQL 자 격 검 정 실전문제 I 1 1 9
n . SQL 기본 및 활용

1 다 음 중 아 래 의 SQL 에 대 한 설 명 으 로 가 장 적 절 한 것 은 ? 117 다음 중 [사원] 테이블에 대하여 아래와 같은 SQL을 수행하였을 때


예상되는 결과로 가장 적절한 것은?
아 래
아 래
[SQL]
S E LE C T 상품분류코드
[테이블 : 사원]
, A V G (상품가격) AS 상품가격
, C O U N T (*) O V E R (O R D E R B Y A V G (상품가격) 사원 ID 부세 D 사원명 연봉
R A N G E B E T W E E N 10000 P R E C E D IN G 001 100 홍길동 2500
A N D 10000 F O L L O W IN G ) A S 유사개수
002 100 강감찬 3000
FROM 상품
003 200 김유신 4500
G R O U P B Y 상품분류코드;
004 200 김 선달 3000
005 200 유학생 2500
① W IN D O W FU N CT IO N 을 G R O U P B Y 절과 함께 사용하였으므로 위의
006 300 변사또 4500
S Q L 은 오류가 발생한다.
007 300 박문수 3000
② W IN D O W FUNC 明 O N 의 O R D E R B Y 절에 A V G 집 계 함수를 사용하였
[SQL]
으므로 위의 S Q L 은 오류가 발생한다. SELECT Y .사원ID, Y. 부 세 D, Y. 사원명,Y. 연봉
③ 유사개수 컬럼은 상품분류코드별 평균상품가격을 서로 비교하여 - FROM (SELECT 시■원ID, MAX(연봉) OVER(PARTITION BY

과목
부 세 D) AS 최고연봉
10000 ~ +10000 사이에 존재하는 상품분류코드의 개수를 구한 것이다.
FROM 사원) X, 사원 Y

I
④ 유사개수 컬럼은 상품전체의 평균상품가격을 서로 비교하여 -10000 WHERE X. 사원ID : Y. 사원ID . ‘

.
S Q L
~ +10000 사이에 존재하는 상품의 개수를 구한 것이다. AND X. 최고연봉 = Y. 연봉

기본 및 화
사원 ID 부세D 사원명 연봉


002 100 강감찬 3000

a
003 200 김유신 4500
006 300 변사또 4500

사원 ID 부세D 사원명 연봉
001 100 홍길동 2500
005 200 유학생 2500
007 300 박문수 3000

사원 ID 부세 D 사원명 연봉
003 200 김유신 4500
006 300 변사또 4500

사원 ID 부세D 사원명 연봉
004 200 김유신 4500

I SQL 자격 검 정 실전문 제
SQL 자격검 정 실전문 제 I 1 2 1
n . SQL 기본 및 활 용

r
118 다 음 중 아 래 SQL 의 실 행 결 과 로 가 장 적 절 한 것 은 ? 119 아래 설명 중 H ] , C S 에 해당하는 내용을 작성하시오.
핵심정리
U\G 함 수 를 이용해
파 티 션 별 윈도우 에 서

이전 몇 번째 행의 값을 CREATE TABLE TBL D B M S 에 생성된 U S E R 와 다양한 권한들 사이에서 중개 역할을 할

가져 올 수 있다. (ID VAECHAR2(10), 수 있도록 D B M S 에서는 R O L E 을 제공한다. 이러한 R O L E 을 D B M S


이후 몇 번째 행의 값을 START느VAL NUMBER, U S E R 에게 부여하기 위해서는 I 的 I 명령을 사용 하 며 ,

가 져 오 는 것은 LEAD
END—VAL NUMBER) R O L E 을 회수하기 위해서는 l © I 명령을 사용한다.
m
함 수 이 며 ,SQL

Server 에 서 는 지 원하지
ID START—
VAL END_VAL
A 10 14
않는 함수 이 다 .
A 14 15
A 15 15
A 15 18’
A 20 25 120 다음 중 B_User가 아래의 작업을 수행할 수 있도록 권한을 부여하는
A 25
DCL로 가장 적절한 것은?

SELECT ID, STAKT_VAL, END_VAL


I 아 래 1
FROM (
SELECT ID, START-VAL, NVL(END_VAL, 99) END_VAL,

과목
UPDATE A_ User. TB_A
(CASE WHEN 況 ART—VAL = LAG(END_VAL) OVER (PARTITtON BY ID
SET coll^ AAA1

n
ORDER BY STAET^VAL, NVL(END VAL, 99)) THEN 1
WHERE col2=3


ELSE 0

S Q L
END) FLAG1,
(CASE WHEN END_VAL = LEAD(況 ART_VAL) OVER (PARTITION BY ID

기본 및 활용
① GRANT SELECT, UPDATE TO B User;
ORDER BY START-VAL, N V L _ —VAL, 99)) THEN 1
ELSE 0
© REVOKE SELECT ON A_ User, TB_A FROM B_ User;
END) FLAG2 ③ DENY UPDATE ON A_ User. TB_A TO B_ User;
FROM TBL)
④ GRANT SELECT, UPDATE ON A_ User. TB_A TO B User;
WHERE FLAG1 = 0
OR FLAG2 - 0

① ID START—
VAL END_VAL
A 10 14
A 15 ia liL 아래의 I Q I 에 들어갈 내용을 쓰시오.
A 20 25,
A 25 99

② ID START—
VAL END_VAL D B M S 사용자를 생성하면 기본적으로 많은 권한을 부여해야 한다.
A 15 15 많은 D B M S 에서는 D B M S 관리 자 가 사용자별로 권한을 관 리 해 야
하는 부담과 복잡함을 줄이기 위하여 다양한 권한을 그룹으로 묶어
③ ID START_VAL END__VAL
관리 할 수 있도록 사용 자 와 권한 사이에서 중개 역할을 수행하는
A 10 14
A 15 15 l Q I을 제공한다.

A 20 99

ID START—
VAL END—
VAL
A 10 18
A 20 99

124 I SQL 자격 검정 실전문제


SQL 자격검 정 실전문 제 I 1 2 3
n . SQL 기본 및 활 용

Q'■


■ ■

핵심정리 I 122 | 사 용 자 Lee 가 릴레이션 될 생 성 한 후 , 아 래 와 같 은 권한부여 SQL문들을 124 아 래 는 임 시 부 서 ( TMP_D 티자■) 테 이 블 로 부 터 부 서 (D 타5T ) 테 이 볼 에
핵심정리
실 행 하 였 다 . 그 이 후 에 기 능 이 실 행 가 능 한 SQL 을 2 개 고 르 시 오 . 데 이 터 를 입 력 하 는 PL/SQL 이 다 . 부 서 테 이 블 에 데 이 터 를 입 력 하 기

(단 ,A , B 의 데 이 터 타 입 은 정 수 형 이 다 ) 전에 부 서 테 이 블 의 모 든 데 이 터 를 R01丄 BACK 이 불 가 능 하 도 록 삭 제

하려고 한다. 다음 중 에 들어갈 내용으로 옳은 것은?

Lee:GRANT SELECT, INSERT, DELETE ON R TO Kim WITH 아 래


GRANT OPTION;
[ P L /S Q L ]
K im :GRANT SELECT, INSERT, DELETE ON R TO P ark;
create or replace procedure insert_dept authid current user
Lee;REVOKE DELETE ON R FROM K im ;
as
Lee:REVOKE INSERT ON R FROM Kim CASCADE;
begin
l Q> ~l
INSERT /*+ APPEND * / INTO DEPT (DEPTNO, DNAME,
① Park: SELECT * FROM R WHERE A = 400 ;
PL/SQL 의 특징 LO 幻
© Park: INSERT INTO R VALUES(400, 600) ; SELECT DEPTNO, DNAME, LOC
• PL / SQL 은 Block
@ Park: DELETE FROM R WHERE B - 800 ; FROM TMP_DEPT ;
구 조 로 되어있어 각
④ Kim :INSERT INTO R VALUES(500, 600) ; com m it ;
기능별로 모듈화가
end ;
가능하다.

과목
• 변수, 상 수 듕 을

I
선 언하여 SQL 문 장 간


값을 교환한다. ① TRUNCATE TABLE DEPT;

S Q L
• IF , LOOP 등의 절차형 ② DELETE FROM DEPT;

기본 및
언 어 를 사 용하여 ③ execute immediate 'TRUNCATE TABLE DEPT';
절차적인 프로그램이 123 l 다 음 중 PL / SQ L 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ?
④ execute 'TRUNCATE TABLE DEPT' ;

■용
가 능 하 도 록 한다.
• DBMS 정의 에 러 나 ① 변수와 상수 등을 사용하여 일반 SQL 문장을 실행할 때 WHERE절의

사 용 자 정의 에 러 를 조건 등으로 대입할 수 있다.


정의하여 사 용 할 수 ② Procedure, User Defined Function, Trigger 객체를 PL/SQL로 작성
天1
i장 모■(Stored Module) I 125 I 다 음 중 절 차 형 SQL 모 듈 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ?
있다. 할 수 있다.
• PL / SQL 은 Oracle 에 SQL 문 장 을 데이터
③ PL/SQi로 작성된 Procedure, User Defined Function은 전체가 하나의
베이 스 서버 에 저 장하여 ① 저장형 프로시져는 SQL을 로직과 함께 데이터베이스 내에 저장해 놓은
내장되어 있 으 므 로
트랜잭션으로 처리되어야 한다.
◦旧 신근고느 PL / SQL 을 사용자와 애플리케이션
명령문의 집합을 의미한다.
④ Procedure 내부에 작성된 절차적 코드는 PL/SQL엔진이 처리하고 일
지 원 하 는 어떤 사이에서 공유할 수
② 저장형 함수(시용자 정의 함수)는 단독적으로 실행되기 보다는 다른
반적인 SQL 문장은 SQL실행기가 처리한다. 있도 록 만든 일종의 SQL
서버로도 프로그램을
SQL문을 통하여 호출되고 그 결과를 리턴하는 SQL의 보조적인 역할을
컴포넌트 프로그램이며,
옮길 수 있다.
독립적으로 실행되거나 한다.
• PL / SQL 은 응 용
다른 프 로 그 램 으 로 부 터 ③ 트리거는 특정한 테이블에 INSERT,UPDATE, DELETE와 같은 DML
프로그램의 성능을
실행 될 수 있는 완 전 한 문이 수행되었을 때 데이터베이스에서 자동으로 동작하도록 작성된
향상시킨다.
실행 프 로 그 램 이 다 . 프로그램이다.
• PL / SQL 은 여러 SQL
Oracle 의 저 장 모 듈 에 는
문 장 을 Block 으 로 ④ 데이터의 무결성과 일관성을 위해서 사용자 정의 함수를 사용한다.
Procedure , User
목 고 한 번에 Block
전 부 를 서 버 로 보내기 Defined Function,
Trigger가 있다.
때문에 통 신 량 을 줄일

수 있다.

SQL 자 격 검 정 실 전 문 제 I 1 2 5 126 I SQL 자 격 검 정 실전문 제


n . SQL 기본 및 활용

126 다음 중 T r ig g e r 에 대한 설명 으 로 가장 부 적 절 한 것 은 ?

① Trigger는 데이터베이스에 의해서 자-동으로 호출되고 수행된다.

② Trigger는 특정 테이블에 대해서 INSERT, UPDATE, DELETE 문이

수행되었을 때 호출되도록 정의할 수 있다.


③ Trigger는 TCL을 이용하여 트랜젝션을 제어할 수 있다.
④ Trigger는 데이터베이스에 로그인하는 작업에도 정의할 수 있다.

| 127 | [ 문 중 특정한 테이블에 IN SER T , U P D A T E , D E L E T E 오. 같은 DML 문이

수행되었을 때, 데이터베이스에서 포ᅡ동으로 동 작 하 도 록 작성된 저장


프로그램으로 가장 적절한 것 은 ?(단 , 사용자가 직접 호출하여 사용하는
것이 아니고 데이터베이스에 서 자 동 적 으 로 수행하게 된 다 .)

과목
① PROCEDURE

I
② USER DEFINED FUNCTION

■S
@ PACKAGE

Q L
④ TRIGGER

기본 및 활용
프 로 시 저 와 트리거의 차이점

프로시저 트리 거

CREATE Procedure 문 법 사 용 CREATE Trigger 문 법 사 용


EXECUTE 명 령 어 로 실행 생성 후 자 동 으 로 실행
COMMIT, ROLLBACK 실행 가능 COMMIT, ROLLBACK 실행 안됨

〇-

SQL 자격검 정 실전문제 i 1 2 7


제3장
128 아래 _ 에 해당 하 는 내용을 작성하시오.

아 래

SQL 최적화 기본 원리 테 이 블 및 인 덱 스 등의 통계 정 보 를 활 용 하 여
될 처리시간 및
SQL문 을 실 행 하 는 데 소 요
CPU, I/O 자 원 량 등 을 계 산 하 여 가 장 효 율 적 일 것 으 로
예상되는 실행계획을 선택하는 옵티마이저를 l O I 라 한
다.

129 다음 중 실 행 계획을 통해서 알 수 있는 정보로 가장 부 적 절 한 것 은 ?

① 액 세 스 기법
제 1절 옵 티 마 이 저 와 실 행 계 획
② 질 의 처리 예 상 비 용 (Cost) ■
제 2 절 인 덱 스 기본
③ 조 인 순서
제 3 절 조 인 수 행 원리
④ 실제 처리 건 수

실행계획 정보의 구성요소

Execution Plan 조인 기법
최격화 경보
SELECT STATaKripti(rizer=A 丄 _R0W3 (Cost=3 Card=2 B/tes=114)
?I NESTED LOOPSI(Cost=3 Card=2 Bytes=1l4)
'EM3 (T/QLE) |(Cost=2 Card=2 Byt於=74)1
(I1DEX) (Cost=1 Card=2) —
DPT1 (TABLE) |CDst=1 Card-1 Bytes^O)
FK_DPT (UDEX U l l 日] (公思t- O C a rd i)

1 3〇 아래 실행계획의 실 행순서에 맞게 _ , ® , [ S 을 작성하시오.

아 래

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
1G I — I Q 1 一* I © 1 — 6 구 5 — 1

130 I SQL 자 격 검 정 실전문제


n . SQL 기본 및 활 용

■公

131 다음 중 실행계획에 대한 설명으로 가장 부적절한 것은? 134 다음 중 관계형 데이터베이스의 인덱스(In d e x )에 대한 설명으로 가장

적절한 것은?
① 실행계획은 SQL 처리를 위한 실행 절차와 방법을 표현한 것이다.

② 실행계획은 조인 방법,조인 순서, 액세스 기법 등이 표현된다. ① 기본 인텍스(Primary Key Index)에 중복된 키 값들이 나타날 수 있다.
③ 동일 SQL문에 대해 실행계획이 다르면 실행 결과도 달라질 수 있다. ② 기본 인덱스에 널 값 (Null Value)들이 나타날 수 없다.
④ CBO(Cost Based Optimizer)의 실행계획에는 단계별 예상 비용 및 ③ 보조 인덱스(Secondary Index) 에는 고유한 키 값들만 나타날 수 있다.
건수 등이 표시된다. ④ 자주 변경되는 속성은 인덱스를 정의할 좋은 후보이다.

1히 1 다 음 중 아래오유 같 은 SQL 처리 흐 름 도 (Access Flow Diagram)에 대한 I 135 | 다 음 중 관 계 형 데 이 터 베 이 스 인 덱 스 ( Index) 에 대 한 설 명 으 로 가 장 부

설 명 으 로 가 장 적절한 것을 2개 고 르 시 오 . 적 절 한 것을 2개 고 르 시 오 .

① 테이블의 전체 데이터를 읽는 경우는 인덱스가 거의 불필요하다.


② 인덱스는 조회, 삽입, 삭제, 갱신 연산의 속도를 향상시킨다.
③ B 트리는 관계형 데이터베이스의 주요 인텍스 구조이다.

④ 대량의 데이터를 삽입할 때는 모든 인덱스를 생성하고 데이터를 입력

과목
하는 것이 좋다.

I
*
S Q L
136 I 아래의 |NDEX에 대한 설명에서 [ ^ ,[S , [ H I 에 들 어 갈 인덱 스

기본 및 활용
종 류 가 순서대로 바르게 나열된 것 은 ?

아 래

① SQL의 실행 시간을 알 수 있다. I (n) I 인덱스는 브랜치 블록과 리프 블록으로 구


성되며,브랜치 블록은 분기를 목적으로 하고 리프블록은 인덱스를
② 인덱스 스캔,테이블 전체 스캔 등과 같은 액세스 기법이 표현된다.
구성하는 컬럼의 값으로 정렬된다. 일반적으로 OLTP 시스템 환경에서
③ 실행계획과는 무관하다. 가장 많이 사용된다.
④ SQL의 내부적인 처리 절차를 시각적으로 표현해준다. l Q I 인덱스는 인덱스의 리프 페이지가 곧 데이터
페이지이며, 리프 페이지의 모든 데이터는 인덱스 키 컬럼 순으로
물리적으로 정렬되어 저장된디-.
I 逆 I 인덱스는 시스템에서 사용될 질의를 시스템
133 다음 중 옵 티 마 이 저 와 실 행 계획에 대한 설명으로 부 적 절 한 것을 2개 구현 시에 모두 알 수 없는 경우인 DW 및 AD-HOC 질의 환경을
위해서 설계되었으며, 하나의 인덱스 키 엔트리가 많은 행에 대한
고르시오.
포인터를 저장하고 있는 구조이다.

① SQL 처리 흐름도는 성능적인 측면의 표현은 고려하지 않는다,

② 규칙기반 옵티마이저에서 제일 높은 우선순위는 행에 대한 고유 주소를 ① B-TREE 인덱스,BITMAP 인덱스,CLUSTERED 인덱스

사용하는 방법이다. ② B-TREE 인텍스,CLUSTERED 인덱스,BITMAP 인덱스

③ SQL 처리 흐름도는 인덱스 스캔 및 전체 테이블 스캔 등의 액세스 ③ BITMAP 인덱스,CLUSTERED 인덱스,REVERSE KEY 인덱스

기법을 표현할 수 있다. ④ BITMAP 인텍스,REVERSE KEY 인텍스,CLUSTERED 인텍스

④ 인덱스 범위 스캔은 항상 여러 건의 결과가 반환된다.

SQL 자격검정 실전문제 I 1 3 1 132 I SQL 자격검정 실전문제


n . SQL 기본 및 활용

137 다음 중 인덱스에 대한 설명으로 가장 적절한 것을 2개 고르시오. 140 다음 중 아래에서 인덱스에 대한 설 명 으 로 가 장 올 바 른 것 만 묶 은 것 은 ?

① 인덱스는 인덱스 구성 칼럼으로 항상 오름차순으로 정렬된다. 아 래


② 비용기반 옵티마이저는 인덱스 스캔이 항상 유리하다고 판단한다.
가) 인텍스는 데이터 조회 목적에는 효과적이지만,INSERT, UPDATE,
③ 규칙기반 옵티마이저는 적절한 인덱스가 존재하면 항상 인덱스를 사용 DELETE 작업에는 오히 려 많은 부하를 줄 수도 있다.
하려고 한다. 나) 인덱스를 이용한 데이터 조회는 항상 테이블 전체 스캔보다 빠른
④ 인덱스 범위 스캔은 결과가 없으면 한 건도 반환하지 않 을 수 있다. 것을 보장할 수 있다.
다) SQL Server의 클러스터형 인덱스는 ORACLE의 IOT와 매우 유사
하다.
라) 인덱스는 INSERT와 DELETE 작업괴는 다르게 UPDATE 작업 에는
부하가 없을 수도 있다.
마) 인덱스를 활용하여 데이터를 조회할 때 인텍스를 구성하는 컬럼
138 다 음 중 아 래 의 내용에 대 한 설 명 으 로 가 장 적 절 한 것 을 2 개 고 르 시 오 . 들의 순서는 SQL 실행 성능과 관계가 없다.

아 래
① 가,나,다
[INDEX 생성] ② 가,다,라
CREATE INDEX IDX_EMP_01 ON EMP (REGIST_DATE, DEPTNO) ;
③ 다,라,마

과목
[SQL 실행] ④ 기-, 다,마
SELECT *


.
FROM EMP

S Q L
WHERE DEPTNO - 47
AND REGIST_DATE BETWEEN '2015.02.01' AND '2015.02.28';

기본 및 활용
14 1 아 래 의 옵 티 마 이 저 와 실 행 계 획 대 한 설명 중 에 서 옳 은 것 을 모 두 묶 은
① 실행된 SQL에 대해서 인덱스 비효율이 있어 인덱스의 컬럼을 DEPTOO
것은?
+ REGIST_DATE 순으로 변경할 필요가 있다.
② IDX_ EMP_01 인덱스를 이용하여 DEPTNO = 47 조건을 효율적으로

팀쌕할 수 있다.
③ REGI況느DATE 컬럼에 대한 조건을 범위 검색이 아닌 동등 검색 조건으 가) ORACLE의 규 칙 기 반 옵티마이저에서 가장 우선 순 위가 높은
규칙은 Single row by rowid 엑세스 기법이다.
로 변경하면 IDX_ EMP_01 인덱스를 효율적으로 활용할 수 있다,
나) 비용기반 음티마이저는 테이블, 인덱스,컬럼 등 객체의 통계정보를
④ IDX_ EMPJD1 인덱스는 테이블 내의 대량 데이터를 탐색할 때 매우 사용하여 실행계획을 수립하므로 통계정보가 변경되면 SQL의

유용하게 활용될 수 있는 인텍스 형식이다. 실행계획이 달라질 수 있다.


다) ORACLE의 실행계획에 나타나는 기본적인 Join 기법으로는 NL
Join, Hash Join, Sort Merge Join 등이 있다,
라) 다양한 Join 기법 중 NL Join은 DW 등에서 데이터를 집계하는
업무에 많이 사용된다.

139 다음 중 인덱스에 대한 설명으로 가장 부적절한 것 은 ?

① 가 ,다
① 인덱스의 목적은 조회 성능을 최적화하는 것이다. _ ② 가 ,나 ,다
② Insert, Update, Delete 등의 DML 처리 성능을 저하시킬 수도 있다. ③ 나,다
③ B- 트리 인덱스는 일치 및 범위 검색에 적절한 구조이다. ④ 나,다,라
④ 인덱스 액세스는 테이블 전체 스캔보다 항상 유리하다.

134 | SQL 자격 검 정 실전 문 제
SQL 자 격 검 정 실 전 문 제 I 1 3 3
n . SQL 기본 및 활 용

142 다음 중 Nested Loop Join에 대한 설명으로 가장 부적절한 것은? 145 해 싱 ( Hashing 》기 법 을 이 용 하 여 조 인 을 하 는 해 시 조 인 (Hash join 》

핵심정리 핵심정리
한 쪽 테이블이 주 메모리의 가용 메모리에 담길 정 도 로 충분히 작고
① 조인 칼럼에 적당한 인덱스가 있어서 자연조인 (Natural join) 이 효율적 해 시 키 속 성 에 중 복 값이 적 을 때 효 과 적 이 다 . 다 음 중 해 시 조 인 이
Hash Jo in 은 조 인
일 때 유용히-다. 칼 럼으| I건 !텍스 를 더 효과적일 수 있는 조건에 대한 설명으로 가장 부 적 절 한 것 은 ?
② Driving Table의 조인 데이터 양이 큰 영향을 주는 조인 방식ᅪ다. 사용하지 않기 때문에
③ 소트 머지 조인 (Sort Merge Join)하기에 두 테이블이 너무 커서 소트 조인 칼럼의 인덱 스 가 ① 조인 컬럼에 적당한 인덱스가 없어서 자연조인 (Natural join)이 비효율

(Sort) 부하가 심할 때 유용하다. 존재하지 않을 적일 때

④ 유니크 인덱스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 온라인 경우에도 사용할 수 ② 자연조인 (Natural join) 시 드라이 빙(driving) 집합 쪽으로 조인 액세스
있는 조인 기법이다. 량이 많아 Random 액세스 부하가 심할 때
조회하는 경우 유용하다,
Hash Jo in 은 해 쉬
⑤ 소트 머지 조인 (Sort Merge Join)을 하기에는 두 테이블이 너무 커서
함수를 이용하여
소트(Sort) 부하가 심할 때
조인을 수행하기
④ 유니크 인텍스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 온라인
143 다음 중 아 래 와 같은 就 «_에서 나타날 수 있는 Join 기법으로 가 장 적절한 때 문 에 ’= ’로 수 행 하 는
조회하는 경우
조인 즉 , 동 등
것은?
조인에서만 사용할 수

있다.

Sort Merge Join 은 조인 [DEPT 테이블 INDEX 정보]

과목
칼럼을 기준으로 데이터를 PK_DEPT :DEPTNO

n
정렬하여 조 인 을 수행한다. [EMP 테이블 INDEX 정보]
PK_EMP :EMPNO

.
146 다 음 중 j oin 기 법 에 대 한 설 명 으 로 가 장 적 절 한 것 은 ?

S Q L
NL Join 은 주 로 랜덤
IDX_ EMP_01 :DEPTNO
액 세 스 방식으로 데이터를

기본 및 활용
읽는 반면 Sort Merge ① NL Join은 선택도가 낮은(결과 행의 수가 적은) 테이블이 선행 테이블로
[SQ L ]
Join 은 주 로 스캔 SELECT * 선택되는 것이 일반적으로 유리하다.
방 식 으 로 데 이터를 FROM DEPT D ② Sort Merge Join은 동등" Join(Equi Join) 에서만 시'용■할 수 있으」3■로_
읽는다. Sort Merge WHERE D . DEPTNO = 'A001'
제약이 존재한다.
AND EXISTS (SELECT 'X ' FROM EMP E WHERE D . DEPTNO
Join 은 랜덤 액 세 스 로 NL
- E . DEPTNO) (受) Hash Join 은 결과 행의 수가 큰 테이블을 선행 테이블로 사용하는
Join 에서 부담 이 되던
것이 성능에 유리하다.
넓은 범위의 데 이터를
① HASH ANTI JOIN ④ Hash Join 은 Sort Merge Join 보다 항상 우수한 성능을 보장한다.
처 리 할 때 이용되던 조인
기 법 이 다 . 그 러 나 Sort © HASH SEMI JOIN
Merge Join 은 정 렬 할 ③ NESTED LOOP AOTI JOIN
데이터가 많아 메모리에서 ④ NESTED LOOP SEMI JOIN
모 든 정렬 작업을

수행하기 어려운 경우에는


임시 영 역 (디 스 크 )을
144 다 음 중 SMJ(Sort Merge Join )에 대 한 설 명 0 로 가 장 부 적 절 한 것은 ?
사 용 하 기 때문에 성능이

떨어질 수 있다.
① 조인 칼럼에 적당한 인덱스가 없어서 NL 조인 (Nested Loops)가 비효

율적일 때 사용할 수 있다
② Driving Table의 개념이 중요하지 않은 조인 방식이다
③ 조인 조건의 인덱스의 유무에 영향 받지 않는다
④ EQUI(=) 조인 조건에서만 동작한다.

136 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 1 3 5
11111 ■ 11...................111111
. ■'내뼈

과목 I
SQL 고급활용 및 튜닝 ,
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■

■■■■■■룰

제1장 아키텍처 기반 튜닝 원리 제4장 인덱스와 조인


제1절 데이터베이스 아키텍처 제1절 인덱스 기본 원리
제2절 SQL 파싱 부하 제2절 인덱스 튜닝
저!3절 데이터베이스 Call고
ᅡ 네트워크 부하 제3절 조인 기본 원리
제4절 데이터베이스 I/O 원리 제4절 고급 조인 기법

제 2 장 L o c k 과 트랜잭션 동시성제어 제 5 장 고급 S Q L 튜닝
제1절 Lock 제1절 고급 SQL 활용
제2절 트랜잭션 제2절 소스 튜닝
제3절 동시성 제어 제 3 절 D M L 튜닝
제4 절 파티션 활용
제3장 옵티아미저 원리 제 5 절 배치 프로그램 튜닝
제 1 절 옵티마이저
제2절 쿼리변환
핵심정리 다음 중 데이터베이스 연결(C o n n e c tio n )과 관련한 설명으로 가장 부
적절한 것은?

클 라 이 언 트 가 서버

아키텍처 기반 튜닝 원리 프 로 세 스 와 연결 하 는
Oracle 의 예
① 데이터베이스 서버와 클라이언트 간 연결상태를 유지하면 서버 자원을
낭비하게 되므로 동시 사용■자가 많은 OLTP 환경에선 SQL 수행을 마치자
마자 곧바로 연결(Connection)을 닫아주는 것이 바람직하다.
1) 전용 서버
② 연결(Connection) 요청에 대한 부하는 쓰레드(Thread) 기반 아키텍처
(Dedicated Server )
보다 프로세스 기반 아키텍처에서 더 심하게 발생한다.
방식
③ 전용 서버 (Dedicated Server) 방식으로 오라클 데이스베이스에 접속
2) 공 유 서버
(Shared Server ) 하면 사용자가 데이터베이스 서버에 연결 요청을 할 때마다 서버 프로

방식 세스(또는 쓰레드)가 생성된다.


④ 공유 서버 (Shared Server) 방식으로 오라클 데이스베이스에 접속하면
사용자 프로세스는 서버 프로세스와 직접 통신하지 않고 Dispatcher
프로세스를 거친디-.
제1절 데이터베이스 아키텍처
제2절 SQL 파싱 부하
SQL Server 에서 는 다읍 중 O r a c le 이나 S Q L S e r v e r 같은 데이터베이스의 저장 구조 를
제3절 데이터베이스 Call과 네트워크 부하
세 그 먼 트 는 테이블,
제4절 데이터베이스 I/O 원리 설명 한 것으로 가장 부 적 절 한 것 은 ?
인 덱 스 ,Undo처럼

저 장 공 간 을 필 요 로 하는 ① 데이터를 읽고 쓰는 단위는 블록(=페이지)이다.


데이 터 베 이 스 오 브 젝트다. ② 데이터파일에 공간을 할당하는 단위는 익스텐트다.
저장공간을 필요로 한다는 ③ 같은 세그먼트(테이블, 인덱스)에 속한 익스텐트끼리는 데이터파일
것은 한 개 이상의
내에서 서로 인접해 있다.
익스텐트를 사용함을
④ SQL Server에서는 한 익스텐트에 속한 페이지들을 여 러 오브젝트가
뜻한다.
나누어 시용할 수 있다.
SQL Server 에서 는
세그먼트라는 용어를

사용하지 않지만, 3 I 데이터 변경 사항을 일단 데이터 버퍼 캐시에만 기록했다가 시간 간격을


협 구조 또는 인덱스
두고 데이터 파일에 일괄 반영하려면 반드시 R e d o (또는 T ra n s a c tio n )
구조의 오 브 젝 트 가
로그의 도움이 필 요 하 다 . 그 래 야 D B M S 에 문 제가 발 생 하 더 라 도 안전
여기에 속 한 다 .
하게 복구할 수 있다. 이런 Redo 로그(또는 트랜잭션 로그) 메커니즘의

특장을 설명하는 여러 가지 용어가 있는데,다음 중 아래와 관련된 것으로


가장 적절한 것 은 ?
DB 버퍼 캐시에 가 해지는
모 든 변경사항을 기록하는
아 래
파 일 을 Oracle 은 'Redo
“버퍼 캐시 블록을 갱신하기 전에 변경사항을 먼저 로그 버퍼에 기록
로 그 ’라고 부 르 며 , SQL
해야 하며,Dirty 버퍼를 디스크에 기록하기 전에 해당 로그 엔트리를
Server 는 ‘트 랜 잭 션 먼저 로그 파일에 기록해야 한 다 .”
로 그 ’라고 부 른 다 .

① Write Ahead Logging


② Log Force at commit
(3) Fast Commit
® Delayed Block Cleanout

142 I SQL 자격검정 실전문제


m. SQL 고 급 활 용 및 튜닝

Q…

핵심정리 4 다 음 중 메모리 구 조 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ? 6 __ DB 인 스 턴 스 를 기 동 한 직 후 ,아 래 SQ 니 》
을 포함하는 프로그램을 사원
핵심정리
A 와 B 가 아래오卜 같 이 각 각 4 회 씩 연 속 적 으 로 수 행 하 였 다 . SQL 1) 에
① DB 버퍼 캐시는 데이터 파일로부터 읽어 들인 데이터 블록을 담는
대 한 Hard Parsing 은 몇 번 발 생 하 겠 는 가 ?
캐시 영역이다.
• A n e 파싱
② /*+ append * / 힌트를 사용하면 Insert 시 DB 버퍼 캐시를 거치지 아 래
(Soft Parsing) :
않고 디스크에서 직접 쓴다.
S Q L 과 실행계획을
SQL1)
③ 클러스터 링 팩터가 좋은 인덱스를 사용하면 Buffer Pinning 효과로 캐시에서 찾아 곧바로 select 고 객 명 , 전 화 번 호 ,주 소 , 최 종 방 문 일 시
I / O# 줄일 수 있다. 실행단계로 넘어가는 from 고 객
④ LRU(Least Recently Used) 알고리즘에 따라, Table Full Scan 한 경우를 말함 where 고 객 번 호 = : custno

데이터 블록이 Index Range Scan 한 데이터 블록보다 DB 버퍼 캐쉬에 시점 사원 A 시원 B


• ^ᅡ드 파싱 tl :c u s tn o 에 1000 입력 후 조회
더 오래 머무른다.
(Hard Parsing) : t2 :c u s tn o 에 2000 입력 후 조회
S Q L 과 실행계획을 t3 :c u s tn o 에 2000 입력 후 조회
캐시에서 찾지 못해 t4 :c u s tn o 에 3000 입력 후 조회
조|적화 과정을 거치고 t5 :c u stn o 에 3000 입력 후 조회
t6 :c u s tn o 에 3000 입력 후 조회
나서 실행단계로
t7 :c u s tn o 에 2000 입력 후 조회
넘어가는 경우를 말함
t8 :c u s tn o 에 7000 입력 후 조회
Response Time Analysis 5___ 다음 중 R e sp o n se Tim e A n a ly s is 성능관리 방법론을 설명할 때, 아래
방 법 론 은 Response
괄호 안에 들 어갈 가장 적 절한 용어를 2개 고 르시오.
Time을 정 의 하 고 , CPU ① 1회 ② 4회

Time고!' Wait Time을 각각 l ③ 6회 © 8회


I 아 래
break down 하면서
서버 의 일 량 과 대기 Response Time = ( ) Time + ( ) Time
SQL* Plus나 TOAD 같 은 쿼리 툴 로 오 라 클 데이 터 베 이 스 ORD대 계정에
시 간 을 분석 해 나간다.
접 속 해 서 아래 SQL 을 각 각 한 번 씩 순 차 적 으 로 실 행 했 다 . [ 程 중 SQL
CPU Time은 파싱 작업에
소 비 한 시 간 인 지 아니면 ① CPU 파싱에 대한 설명 으 로 가장 적 절 한 것 은 ?

쿼리 본 연 의 오 퍼 레 이 션 ② Elapsed
수 행 을 위해 소 비 한 ® Idle 아 래
시간인지를 분석한다. ④ Queue (1) select 고 객 번 호 , 고 객 명 ,휴 대 폰 번 호 from 고 객 where
Wait Time은 각 각 발 생 한 고 객 명 like '010% ';
대기 이 벤 트 들 을 분석해 ⑵ SELECT 고 객 번 호 ,고 객 명 ,휴 대 폰 번 호 FROM 고 객 WHERE 고
가 장 시 간 을 많이 소 비 한 객 명 LIKE '010% ';

이벤트 중심으로 ⑶ SELECT /* 고 객 조 회 */ 고 객 번 호 ,고 객 명 ,휴 대 폰 번 호 FROM


고 객 WHERE 고 객 명 LIKE '0!0 % ';
해결방안을 모색한다.

① 첫 번째 수행될 때 각각 하드파싱을 일으키고,다른 캐시 공간올 사용할


것이다.
② 1번과 3번 SQL은 하드파싱이 일어나지만, 2번은 하드파싱이 일어나지
않는다. 즉, 1번 SQL과 공유된다.
③ 1번과 2번 SQL은 하드파심이 일어나지만,3번은 하드파싱이 일어나지
않는다. 즉 ,2 번 SQL과 공유된다.
④ 실행계획이 서로 다를 수 있다.


O

144 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 143
m. SQL 고급활용 및 튜닝

〇 o

핵심정리 8 __ 공 통 기 술 팀 에 서 개 발 표 준 업 무 를 담 당 하 는 고 성 능 씨 는 개 발 팀 에 SQL 10 다음 중 SQL 작성 방식에 대해 설명으 로 가 장 부 적 절 한 것 은 ?


핵심정리
작 성 을 위 한 표 준 가 이 드 라 인 을 제 시 했 다 . OLTP 환 경 의 시 스 템 인 점 을
① Static SQL이란, String형 변수에 담지 않고 코드 사이에 직접 기술한
고 려 해 가 급 적 바 인 드 변 수 를 사 용 하 도 록 권 고 하 지 만 , “Literal 상 수
바인드 변수 SQL문을 ^한 다 .
(Bind Variable ) : 조건 을 사 용 하 는 것이 더 낫거 나 바인드 변수를 사용 하 려 고 애쓰지 않아도
② 效3L이란,String형 변수에 담아서 실행하는 SQL문을 말한다.
파 라 미 터 Driven 되 는 경 우 ”를 보 기 와 같 이 제 시 했 다 . 다 음 중 가 장 부 적 절 한 것 은 ?
③ Static SQL을 지원하는 개발환경에선 가급적 Static SQL로 작성하는
방식으로 SQL을 작 성하는
것이 바람직하다.
방법이 제공되는데 SQL 과 ① 수행빈도가 낮고 한 번 수행할 때 수십 초 이상 수행되는 SQL일 때
실 행 계 획 을 여러 개 ② 조건절 칼럼의 값 종류 (Distinct Value)가 소수이고, 값 분포가 균일 ④ 루프(Loop) 내에서 반복적으로 수행되는 SQL에 Dynamic SQL을 사용

캐 싱 하 지 않고 하 나 를 하면, 공유 메모리에 캐싱된 SQL을 공유하지 못해 하드파싱이 반복적


하지 때
반복 재 사 용 하 므 로 파싱
③ 사용자가 선택적으로 입력할 수 있는 조회 항목이 다양해서 조건절이 으로 일어난다.
소 요 시 간 과 메모리
동적으로 바뀔 때
사용량을 줄여준다. SQ L 커서에 대한 다음 중 데이터베이스 C a ll 에 대한 설명으 로 가장 부 적 절 한 것을 2개
④ 사용자가 입력할수 있는 조회 항목이 아니어서 해당 조건절이 불변일 때
작업 요청에 따른
고르시 오 .
데이터베이스
C a ll 의 구분 ① SELECT 문장을 수행할 땐 Execute, Parse, Fetch 순으로 Call 이 발생

9 __ 다 음 중 프 로 그 램 을 아 래 와 같이 작 성 할 때 의 문 제 점 과 가 장 거 리 가 1) Parse Call :SQL 한다.

먼 것을 2개 고 르 시 오 . 파 싱 을 요 청 하 는 Call ② SELECT 문장에선 대부분 I 八D가 Fetch Call 단계에서 일어난다.


2) Execute Call : ③ Group By를 포함한 SELECT 문장에서 Group By 결과집합을 만들기
아 래 SQL 실 행 을 요 청 하 는 까지의 I 八3는 Execute Call 단계에서, 이후 결과집합을 전송할 때의
Call
I / O는 Fetch Call 단계에서 일어난다.
create function get_count(p_table varchar2, p_column varchar2t 3) Fetch Call :
p_value varchar2) ④ INSERT, UPDATE, DELETE 문장어j선 Fetch Call이 전혀 발생하지
SELECT 문으| 결고느
return number ^는 다 .
is 데이터 전 송 을
l_sql long; 요 청 하 는 Call
l_count number; 12 다음 중 SQL 트레이스에서 얻은 아래 Call Statistics 를 통해 얻을 수
begin
1一sql := 'select count(*) from ' || p_table ; 있는 정 보와 가장 거리가 먼 것 은 ?

if p_column is not null and p_value is not null then


l_sql :
= l_sql || f where 1 I I p_column || ’ = :1’; call count cpa elapsed disk query current
execute immediate l_sql
into Lcount- — 쿼리 결과 값을 저장한다, Fkrse 1 aoo 0.00 0 0 0
using p_value; -- 바인드 변수(:1)에 값을 입력한다. Execute3 1000 0.18 0.14 0 0 0
else Fetch 5000 1.21 4.25 0 200000 0
execute immediate l_sql into l_count;
total 6001 139 4.期
end if;
Msses in libraiy cache during parse:
return l_count;

end get_count; ① SQL 파싱 부하가 최소화되도록 프로그램을 효과적으로 작성하였다.


② Order By, Group By 등 데이터 정렬이 필요한 연산을 포함하지 않는
① 불필요한 하드파싱을 많이 일으킨다.
SQL 이다.
② 테이블 통계정보를 활용하지 못한다.
③ 실행할 때마다 평균적으로 200개 블록을 읽 었고,필요한 블록을 모두
③ 인덱스 전략 수립이 어렵다.
버퍼캐시에서 찾았다.
④ 실행계획을 제어하기 어렵다.
④ 매번 실행할 때마다 비슷한 양의 결과집합을 반환했다면, Array
(= Fetch) Size는 100 정도로 설정한 상태였을 것이다.


SQL 자격검정 실전문제 1 145 146 I SQL 자격검정 실전문제


m. SQL 고 급 활 용 및 튜닝

13 다음 중 부분범위처리에 대한 설명으로 가장 부적절한 것은? 16 다음 중 아래 두 SQL의 수행 성능을 비교한 설명으로 가장 적절한 것은?
핵심정리 핵심정리
① 부분범위처리가 가능하도록 SQL을 작성하면 출력 대상 레코드가 많을 아 래
수록 쿼리 응답 속도도 그만큼 빨라진다.
가) select 고객명
② IN湖 RT INTO … 湖 LECT」문장에서도 인덱스를 잘 활용하면 부분

from 고객
범위처리에 의한 성능 개선 효과를 얻을 수 있디-. where 가입일자 = to_ char(sysdate, yyyymmdd1)
③ Array 크기를 증가시키면 데이터베이스 Call 횟수가 감소한다. order by 고객명;
나) select *
④ Array 크기를 증가시키면 블록 I/O 횟수가 감소한다.
from 고객
where 가입일자 = to_ char(sysdate, yyyymmdd')
order by 고객명;

① 클라이언트에게 데이터를 전송할 때 발생하는 네트워크 트래픽은 두

사 용 자 정의 14__ 다음 중 사 용 자 정의 함 수 (User Defined Function 》


으I 성능 특성에 SQL 이 똑같다.
함 수 /프 로 시 저 는 대한 설명으로 가장 부적 절 한 것을 2개 고르시오. ② 가입일자만으로 구성된 단일 컬럼 인덱스를 사용한다면,두 SQL의
내 장 함 수 처 럼 Native 소트 공간 사용량은 똑같다.
코 드 로 완 전 컴파일된 ① SQL을 포함하는 형태의 사용자 정의 함수라면, 대용량 쿼리에 그것을
③ 가입일자만으로 구성된 단일 컬럼 인텍스를 사용한다면 ’나'보다 ’가’
형 태 가 아니어서
사용하는 순간 성능이 크게 저하된다. SQL에 블록 I 八D가 더 많이 발생한다.
가 상 머 신 (Virtual
② SQL을 포함하지 않는 형태의 사용자 정의 함수라면,대용량 쿼리에
④ {가입일자 + 고객명}을 선두로 갖는 인덱스를 乂!용한다면 가 1보다 '나’
Machine) 같은 별도의
그것을 사용해도 성능에 큰 영향은 없다. SQL에 블록 I/O 가 더 많이 발생한다.
실 행 엔 진 을 통해
③ 작은 코드 테이블로부터 코드명을 가져오는 정도의 사용자 정의 함수
실행 된 다 .
라면,코드명을 가져오기 위해 매번 조인하는 것보다 오히려 성능상
실 행 될 때마다
유리 다.
컨 텍 스 트 스위칭

(Context Switching)이 ④ 성능이 중요하다면,함수 안에서 또다른 함수를 Recursive하게 호 줄


17 I
다음 중 八) 효율화 튜닝 방안으로 가장 부적절한 것은?

일 어 나 며 , 이 때문에 하는 형태는 지양해야 한다. ① 필요한 최소 블록만 읽도록 쿼리를 작성한다.


내 장 함 수 ( Built- In)를
② 전략적인 인덱스 구성은 물론 DBMS가 제공하는 다양한 기능을 활 g힌다.
호 출 할 때 와 비교해
③ 옵티마이저 행동에 영향을 미치는 가장 중요한 요소는 통계정보이므로
성 능 을 상당히
떨어뜨린다.
변경이 거의 없는 테이블일지라도 통계정보를 매일 수집해 준다.
④ 필요하다면,옵 티 마 ^저 힌트를 사용해 최적의 액세스 경로로 유도한다.
15 다음 중 오라클에서 DB 저장형 함 수 (사 용 자 정의 함 수 )를 사 용 할 때

성능이 저하되는 원 인과 거리가 가장 먼 것 은 ?

① 함수를 실행할 때마다 컴파일하는 부하


Single Block I/ O는
한번의 I/O Call 〇 || 하나의
I 18 I i
다음 중 블록 八3에 대한 설명으로 가장 부적절한 것은?

② 가상머신(VM) 상에서 실행되므로 매번 바이트 코드를 해석하는 부하 데이터 블 록 만 읽어


① Random " 0 는 인덱스를 통해 테이블을 액세스할 때 주로 발생한다.
③ 쿼리 문장의 조회 건수만큼 함수를 반복적으로 호출하는 부하 메모리에 적 재 하 는
② Direct Path I / O는 병 렬로 인덱스를 통해 테이블을 액세스할 때 주로
방식이다.
④ 함수에 내장된 쿼리가 있다면,해당 문장을 Recursive하게 반복 수행 발생한다.
MultiBlock I八)는 I/O
하는 부하 ③ Single Block I/O는 인덱스를 통해 테이블을 액세스할 때 주로 발생한다.
Call이 필 요 한 시 점 에 ,
인 접 한 블 록 들 을 같이 ④ Multiblock I 八)는 인덱스를 이용하지 않고 테이블 전체를 스캔할 때
읽어 메모리에 적 재 하 는 주로 발생한다.
방식 이 다 .

SQL 자격검정 실전문제 I 147 148 I SQL 자격검정 실전문제


m . SQL 고 급 활 용 및 튜닝

핵심정리 19 다음 중 데이터베이스 I/O 원리를 설명한 것으로 가장 부적절한 것은?

① 한 쿼리 내에서 같은 블록을 반복적으로 액세스하면 버퍼 캐시 히트율


버퍼 캐시 히트 율
(BCHR) 은 높아진다.
(Buffer Cache Hit Ratio) :
버퍼 캐시 효 율 을
② MultMock I/O는 한번의 V〇 Call로 여러 데이터 블록을 읽어 메모리에

측 정 하 는 지 표 로 서 ,전체 적재하는 방식이다.


읽은 블 록 중 에 서 메모리 ③ 테이블을 Full Scan할 때, 테이블이 작은 Extent로 구성되어 있을수록
버퍼 캐 시에서 찾은 더 많은 I/O C all이 발생한다.
비 율 을 나타낸다.
④ 인덱스를 통해 테이블을 액세스할 때,테이블이 큰 Extent로 구성돼
물 리 적 인 디스 크 읽기를
있으면 더 적은 "〇 Call이 발생한다.
수 반 하 지 않고 곧 바 로
메 모 리 에 서 블 록 을 찾은

비 율 을 말 한다.

I/O 튜닝의 핵심 원리
I 20 I 다 음 중 데 이 터 베 이 스 I八) 원 리 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ?
■ Sequential 액 세스에

의한 선택 비중을 ① 단 히나의 레코드를 읽더라도 해당 레코드가 속한 블록을 통째로 읽는다.


높인다. ② I/O를 수행할 때 익스텐트 내에 인접한 블록을 같이 읽어들이는 것을
■ Random 액 세 스
'Multiblock I/O ,라고 한다.
발생량을 줄인다.
③ 테이블 블록을 스캔(Scan)할 때는 Sequential I/O 방식을,인덱스 블록을
스캔(Scan)할 때는 Random I/O 방식을 사용한다.
④ MPP(Massively Parallel Processing) 방식의 데이터베이스 계품에선
각 프로세스가 독립적인 메모리 공간을 사용하며, 데이터를 저장할
때도 각각의 디스크를 사용한다. 읽을 때도 동시에 각각의 디스크를
액세스하기 때문에 병렬 " 0 효과가 극대화된다.

SQL 자격검정 실전문제 I 149


_________________________ 제2장
21 공 통 기 술 팀 에 서 개 발 표 준 업 무 를 담 당 하 는 고 성 능 씨 가 Lock 경 합 에
핵심정리
의한 성능 저하를 최소화하기 위해 개발팀에 제시한 가이드라인으로
Lock에 의한 성능 저하를
가장 부적절한 것은?

Lock 과 트랜잭션 동시성제어


최소하하는 방안
① 트랜잭션의 원자성을
① 트랜잭션의 원자성을 훼손하지 않는 선에서 트랜잭션을 기능한 짧게
훼손하지 않는 선에서
트랜잭션을 가능한 정의할 것

짧게 정의할 것 ② 같은 데이터를 갱신하는 프로그램이 가급적 동시에 수행되지 않도록

② 같은 데이터를 트랜잭션을 설계할 것

갱신하는 트랜잭션이 ③ select 문장에 for update 문장을 사용하지 말 것


동시에 수행되지 ④ 온라인 트랜잭션을 처 리하는 DML 문장을 1순위로 튜닝함으로써 조건
않도록 설계할 것 절에 맞는 최적의 인덱스를 제공할 것
③ 주간에 대용량 갱신
작업이 불가피하다면 ,
블로킹 현상에 의해
제1절 Lock 사용자가 무한정
제2절 트랜잭션 기다리지 않도록

제3절 동시성 제어 적절한 프로그래밍


기법을 도입할 것
④ 트랜잭션 격리성 수준을
22__ M S-SQL Server 에 서 아 래 UPDATE 문 과 블 록 킹 없 이 동 시 수 행 이
불필요하게 상향
가 능 한 SQL 문 을 보 기 에 서 고 르 시 오 . (단 ,Transaction Isolation
조정하지 않을 것
⑤ 트랜잭션을 잘 Level 을 조 정 하 지 않 았 고 , Snapshot 관 련 데 이 터 베 이 스 설 정 도 초 기
설계하고 대기 현상을 값 그 대 로 인 상 황 이 다 .)
피하는 프로그래밍
기법을 적용하기에 아 래
앞서 , SQL 문장이
E M P 테이블
가장 빠른 시간 내에
E M P N O (P K ) ENAM E DEPTNO SAL
처리를 완료할 것
7788 김철수 10 3000

블로킹 (B lo c k in g ) 은 , 7900 이정훈 20 5000

Lock 경합이 발생해 특정 7903 정명훈 20 2000

세션이 작업을 진행하지 8012 홍길동 30 6000


못하고 멈춰 선 상태를 update emp set sal = sal * 1.1 where deptno = 20
말한다 . 공유 Lock 끼리는
호환되기 때문에 블로킹이
발생하지 않는다 . 공유 ① select * from emp where empno = 7900
Lock 과 배타적 Lock 은 ② update emp set sal = sal * 1.1 where empno = 7900
호환되지 않아 블로킹이 ③ delete from emp where empno = 7903
발생할 수 있다 . ④ insert into emp(empno, ename, deptno, sal)
values(8014, 1이정훈,
,40, 4000)

152 I SQL 자격검정 실전문제


m . SQL 고 급 활 용 및 튜닝

-分

2 5 _ 아 래 는 두 세 션 에 서 각 각 UPDATE 문 을 수 행 한 후 의 오 라 클 Lock 관 련
핵심정리 I 23 I 다 음 중 오 라 률 PL / SQL 로 작 성 한 아래 프 로 그 램 을 MSᅳSQL Server

SQL S e rv e r의 공유
T-SQL tfCK 아래 FOR UPDATE 대신하기 조회 결과이다. 다음 중 ® ] , [g ] 에 들어갈 용어로 가장 적절한

Lo ck은 트랜잭션이나 위해 사 용 할 SQL Server 힌 트 로 가 장 적 절 한 것 을 2 개 고 르 시 오 . 것은?


쿼리 수행이 완료될
때까지 유지되는 것이 아 래 아 래
아니라 다음 레코드가
s e le ct 적립포인트 , 구매 실 적 , 방문횟수 , 최근방문일자 [SID:31]
읽히면 곧바로 해제된다 .
in t o v _ 적립포인트 , 구매 실 적 , v _ 방문 횟 수 ,v _ 최근방문일자 UPDATE 상품 a SET 상품명 = ,
상품 1’ WHERE a. 상품코드 = 'A00011;
단, 기본 트랜잭션 격리성 fr o m 고객
수준(Read Committed) w h e re 고객번호 = 100 [SID:267]
에서만 그렇다 . 격리성 FOR UPDATE; UPDATE 상품 a SET 상품명 : '상품2’ WHERE a. 상품코드 = 'A0001';
수준을 변경하지 않고도
— do a n y t h in g [오라클 Lock 관련 조회 결과]
트랜잭션 내에서 공유
SIDTPNAME HELD REQUESTED BLOCKING BLOCKED OBJ/XID STATUS
L o c k 이 유지되도록
u p d a te 고객 se t 적립포인트 = 적립포인트 w h e re 고객번호 = 1 0 0 ;
하려면 테이블 힌트로 c o m m it ; 31 TM DML 6) 1 None 상품 INACTIVE
holdlock을 지정하면 31 TX Transaction INACTIVE
© 1 None 1,267 21,3349
된다. 또한 , 두 트랜잭션은 267 TM DML e) 1 None 상품 ACTIVE
상대편 트랜잭션에 의한 ① from 고객 WITH (HOLDLOCK)
267 TX Transaction None i © i 1,31 3,21,3349 ACTIVE
공유 L o c k 이 해제되기 ② from 고객 WITH (UPDLOCK)
만을 기다리는 교착상태를 ③ from 고객 WITH (READPAST)
방지하려고 SQL Server는 ① @ Row-X (SX),
© S/Row-X (SSX)
④ from 고객 "WITH (TABLOCK)
갱신(Update) Lo ck을 ② Q ) Row-X (S X ),© Exclusive
두게 되었고 , 이 기능을 ③ © Row-S (SS), © S/Row-X (SSX)
사용하려면 updlock ④ Row-S (SS), © Exclusive
힌트를 지정하면 된다 . 24 다 음 중 아 래 와 같 은 락( Lock ) 모 니 터 링 결 과 가 발 생 할 수 있 는 SQL로

가장 적절한 것은?

I 26 | 다음 중 아래는 트랜잭션의 특징을 연결한 것으로 가장 적절한 것 은 ?


아 래

테이블 Lock 종 류 로 는 SELECT a.SE SSIO N JD , a.LOCK_TYPE, a.MODE_HELD,


아 래
아래 5가 지 가 있다. a. MODE_REQUESTED, a.L O C K JD l, a ‘LOCK_ID2
■ Row Share(RS) FROM DBA_LOGK a, V$SESSION b 기-. 더 이상 분해가 불가능한 업무의 최소단위를 말한다.
■ Row Exclusive(RX) WHERE a.S E SS IO N JD = b.SID 나. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는
AND a,LOCK_TYPE IN ( 'Transaction', 'DML') 데 이 터 베 이 스 상태로 변환한다. 즉, 트랜잭션 실행의 결과로
■ Share(S)
AND b. USERNAME = USER ; 데이터베이스 상태가 모순되지 않는다.
■ Share Row
S E S S IO N LOCK MODE MODE LOCK LOCK 다. 트랜잭션이 실행 중에 생성하는 연산의 중간 결과는 다른 트랜잭
Exclu sive(SR X)
_ ID _T YPE —H E LD ^R E Q U E S T E D JD 1 JD 2 션이 접근할 수 없다.
■ Exclusive(X) 라. 트랜잭션이 일단 그 실행을 성공적으로 완료하면 그 결과는 데이
135 T ra n s a c tio n E xclu siv e None 131074 3098
터베이스에 영속적으로 저장된다.
135 DM L E xclusive None 92614 0

① 원자성 가 . ,격리성 - 나.
① INSERT INTO EMP (EMPNO, ENAME) VALUES (1000, 'SQLP') ;
② 일관성 가 . ,격리성 - 다.
② UPDATE EMP SET SAL = 1000 WHERE EMPNO = 7369;
③ 영속성 나. , 일관성 - 다.
③ INSERT /*+ APPEND */ INTO EMP SELECT * FROM SCOTT.EMP;
④ 영속성 라. , 일관성 - 나.
④ SELECT * FROM EMP WHERE EMPNO = 7369 FOR UPDATE;

B致I,酸 效 緣 激 然 淨 '
O

I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 1 53
m . SQL 고 급 활 용 및 튜닝

27 __ 아 래 와 같이 1〇 〇 번 세 션 (SID=100)과 2 0 0 번 세 션 ( SID= 2 0 0 )에서 쿼 리 를 29 다음 중 트랜잭션 동시성 제어에 대한 설명으로 가 장 부 적 절 한 것 은 ?


핵심정리 핵심정리
순 차 적 으 로 실 행 했 을 때 (가 》,(나 》
의 결과로 가장 적절한 것 은 ? 트랜잭션 격리성 수준
낮은 단계의 격리성 ① 비관적 동시성 제어 (Pessimistic Concurrency Control)는 두 트랜잭
수준에서 발생할 수 있는 ■ Read Uncommitted :
아 래 션이 같은 데이터를 동시에 수정할 것이라고 가정하고 데이터를 읽는
트 랜 잭 션 에 서 처리
현상들
시점에 Lock을 설정하는 방식을 말한다.
1) Dirty Read : 중인 아직 커밋되지
[테이블]
CREATE TABLE tl 않 은 데 이 터 를 다른
② 낙관적 동시성 제어 (Optimistic Concurrency Control)는 두 트랜잭션
다른 트 랜 잭 션 에 의해
AS 트 랜 잭 션 이 읽는 것을 이 같은 데이터를 동시에 수정하지 않을 것이라고 가정하고 데이터를
수 정 됐 지 만 아직
SELECT LEVEL AS cl
커 밋되지 않은 허용한다. 읽는 시점에 Lock을 설정하지 않는 방식을 말한다. 이 방식에선 데이터를
FROM DUAL
■ Read Committed : 수정하는 시점어j,앞서 읽은 데이터가 다른 트랜잭션에 의해 변경되었
데 이 터 를 읽는 것을 CONNECT BY LEVEL <= 10;
트 랜 잭 션 이 커밋되어
말 한다. 는지 반드시 확인해야 데이터 정합성을 유지할 수 있다.
2) Non-Repeatable [실행] 확정된 데이터만 다른
③ 트랜잭션 격 리성 수준(Transaction Isolation Level)을 Serializable로
트랜잭션이 읽도록
Read : I 세션 : 100 | 세션 : 200 상향 조정하면 일반적으로 동시성과 일관성이 같이 높아진다.
한 트 랜 잭 션 내에서 허 용 함 으 로 써 Dirty
SET TRANSACTION ISOLATION LEVEL SERIAUZABLE; | ④ 트랜잭션 격 리성 수준(Transaction Isolation Level)을 Serializable로
Read 를 방 지 해 준 다 .
같은 쿼리를 두 번 I INSERT tl VALUES (11);
■ Repeatable Read :
상향 조정하면 프로그램에서 별도의 동시성 제어를 하지 않아도 DBMS가
수행했는데, 그 I UPDATE tl SET cl = 1 WHERE cl >= 6;
I 트 랜 잭 션 내에서 트랜잭션 단위 일관성을 보장해 준다.
사이 에 다른
| COMMIT;
쿼 리 를 두 번 이상
트 랜 잭 션 이 값을 수정 SELECT COUNT (*) FROM tl WHERE cl >= 6;— (가) I
INSERT INTO tl VALUES (12); | 수 행 할 때, 첫 번째
또 는 삭 제 하 는 바람에
COMMIT; | 쿼리에 있던 레코드가
두 쿼리 결과가
SELECT ① TJNT (*) FROM tl WHERE cl >= 6;— (나) |
사 라 지 거 나 값이
다르게 나 타나는

현 상 을 말한다. 바뀌는 현상을 방지해

3) Phantom Read : 준다.

① (가) 〇 , (나) 5 ■ Serializable Read : 3〇 EM P 테이블 7788번 사원의 S A L 값이 현재 1,000인 상황에서 아래


한 트 랜 잭 션 내에서
② (가) 〇 , (나) 6 트 랜 잭 션 내에서 T X 1, T X 2 두 개의 트랜잭션이 동시에 수 행 되 었 다 . 양쪽 트랜잭션이
같은 쿼 리 를 두 번
쿼리를 두 번 이상
수 행 했 는 데 , 첫 번째 ③ (가) 5, (나) 0 모두 완료된 시점에 77期 번 사원의 S A L 값은 O ra cle 과 SQ L S e rv e r 에서
수 행 할 때, 첫 번째
쿼 리 에 서 없던 ④ (가) 5, (나) 1 각각 얼마인지 작 성하시오. ( O r a c le 과 S Q L S e r v e r 순 으로 적으시오.
유령 ( Phantom) 쿼리에 있던 레코드가
단, T ra n sa ctio n Isolation L e v e l 을 조정하지 않았고, S n ap sh o t 관련
사 라 지 거 나 값이
레 코 드 가 두 번째
데이터베이스 설정도 초 기값 그대로인 상 황 이 다 .)
쿼 리 에 서 나타나는 바뀌지 않 음 은 물 론
새로운 레코드가
현 상 을 말한다. 1mm
나 타 나 지 도 않 는다. 1■y따

< TX 1 > < TX 2 >


28 다 음 중 대 부 분 DBMS가 채 택 하 고 있 는 기 본 트 랜 잭 션 격 리 성 수 준 update emp set sal = 2000 ti
where empno = 7788
(T ra n s a c tio n Iso la tio n L e v e l ) 인 것 은 ?
and sal = 1000 ;
t2 update emp set sal = 3000
① Read Uncommitted where empno = 7788
② Read Committed and sal = 2000 ;
③ Repeatable Read
commit; t3
t4 commit;
@ Serializable

156 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 155
m . SQL 고 급 활 용 및 튜닝

핵심정리 다중버전 동시성 제 어 (Multiversion Concurrency Control , 이 하

MVCC) 모 델 을 채 택 하 는 DBMS가 늘 고 있 다 . 다 음 중 DBMS의 읽기


다중버전 동시성 제어
(Multiversion 일 관 성 메 커 니 즘 을 설 명 한 것 으 로 가 장 부적절한 것 은 ?

Concurrency Control,
① 읽기 일관성을 위해 Undo 세그먼트 (또 는 버전 저장소)에 저장된 Undo
이하 MVCC)
(또 는 Snapshot) 데이터를 활용한다.
■ 데 이 터 를 변경할
때마다 그 변경사항을 ② MVCC 모델은 기본적으로 완벽한 문장 수준 읽기 일관성을 보장한다.

Undo 영역에 저장해 ③ MVOC 모델은 기본적으로 완벽한 트랜잭션 수준 읽기 일관성을 보장한다

둔다. ④ 트랜잭션 수준 읽기 일관성이란, 트랜잭션이 시작된 시점을 기준으로


■ 데이터를 읽다가 일관성 있게 데이터를 읽어들이는 것을 말한다.
쿼 리 (또 는 트 랜 잭 션 )

시 작 시점 이후에
변 경 된 (변 경 이 진행
중 이 거 나 이미

커밋된) 값을
발견하면, Undo

영역에 저장된 정보를

이용해 쿼 리 (또 는

트랜잭션)

시 작 시점의 일관성
있는 버 전 (CR
Copy)을 생 성 하 고
그 것 을 읽 는 다 ..

SQL 자격검정 실전문제 I 1 5 7


_________________________ 제3장
32 CBO (비 용 기 반 옵 티 마 이 저 )는 쿼리 최 적 화 과 정 에 비 용 ( Cost )를 계 산
핵심정리
I 한 다 . 다 음 중 비 용 ( Cost )과 가 장 거 리 가 먼 것 은 ?
1
::

옵티아미저 원리
규칙기반 옵티마이저
① 비용이란 기본적으로, SQL 수행 과정에 수반될 것으로 예상되는 V0
(Rule-Based Optimizer,
일랑을 계산한 것이다.
이하 RBO)는 다른 말로
---- ------ *
^

‘휴 리 스 틱 ( Heuristic)
© 데이터베이스 C a ll 발생량도 옵티마이저의 중요한 비용 요소다.
세 ③ 옵티마이저가 비용을 계산할 때, CPU 속도, 디스크 I/O 속도 등도
몹 티 마 이 저 ’라고 불 리 며 ,

미리 정해 놓 은 규칙에 고려할 수 있다.


따라 액 세 스 경 로 를 ④ 최신 옵티마이저는 1/ ◦에 C P U 연산 비용을 더해서 비용을 계산?]:다.
평가하고 실행계획을
선 택 한 다 . 여기서
규 칙 이 란 액 세 스 경로별

우 선 순 위 로 서 ,인 덱 스
구 조 ,연산자, 조 건 절
제1절 옵티마이저 형태가 순위를 결정짓는
제2절 쿼리변환 주요인이다. 다음 중 규칙 기반 옵티마이저 ( R B O )가 사용하는 규칙으로 가장 부적절한 것은?

① 고객유형코드에 인덱스가 있으면,아래 SQL에 인덱스를 요]용한다.


s e le c t * fro m 고객 w here 고객유형코드 = 'C C 01 23 '

② 고객명에 인텍스가 있으면, 아래 SQL에 인덱스를 사용해 order by

소트 연산을 대체한다.
s e le c t * f r o m 고객 o rd e r by 고객명

③ 연령과 연봉에 인텍스가 하나씩 있으면,아래 SQL에 연봉 인덱스를


사'용한다. b e tw e e n 조건(닫힌 조건)이 부등호 조건(열린 조건)보다 아
무래도 스캔 범위가 작을 가능성이 높기 때문이다.
select * from 사원 where 연령〉= 60 and 연봉 between 3000 and 6000

④ 직급에 인덱스가 있고,직급의 종류 개수가 5개 이상이면 인덱스를


사용한다.
s e le c t * f r o m 사원 w here 직급 = '대리’

160 l SQL 자 격검 정 실전문제


m. SQL 고 급 활 용 및 튜닝

핵심정리 1 34 I 다 음 중 전 체 범 위 최 적 화 <ALL _ ROWS) 방 식 의 옵 티 마 이 저 모 드 에 대 한 37 다 음 중 동 일 결 과 를 반 환 하 는 SQL 에 서 가 장 효 율 적 인 것 은 ? (단 ,

설명으로 가장 거리가 먼 것 은? ItemAmtFunc는 저 장 형 함 수 이 고 , 상 품 테 이 블 의 PK 는 상 품 코 드 임 》

① 쿼리의 최종 결과 집합을 끝까지 F e tc h 하는 것을 전제로,시스템 리소 ① SELECT 상 # 코 드 ’

스를 가장 적게 사용하는 실행계획을 선택한다. I t e m A m t F u n c ( 상 품 코 드 ,S Y S D A T E ) 당 일 매 출 ,

② 부분범위 최적화 ( F IR 況느R O W 到와 비교할 때, In d e x S c a n 보다 T a b le I t e m A m t F u n c (상 품 코 드 , S Y S D A T E - 1) 전 일 매 출 ,

F u l l S c a n 하는 실행계획을 더 많이 생성한다. ( I t e m A m t F u n c (상 품 코 드 , S Y S D A T E ) -

③ DML 문장은 옵티마이저 모드와 상관없이 항상 전체범위 최적화 방식 I t e m A m t F u n c (상 품 코 드 , S Y S D A T E - 1)) * 1 0 0 /

으로 최적화된다. Ite m A m tF X in c (상품 코 드 ,S Y S D A T E ) 증 감 율

④ 가장 빠른 응답속도 ( R e s p o n s e T im e ) 를 목표로 한다. FROM 상품

WHERE 상품분 류 코 드 =110’

② S E L E C T 상 품 코 드 ,당 일 매 출 , 전 일 매 출 ,

( 당 일 매 출 - 전 일 매 출 ) * 10 0 / 당 일 매 출 증 감 율

FROM (S E L E C T R O W N U M , 상 품 코 드 ,

■ 선 택 도 ᅳ 카 디 널리티 I t e m A m t F u n c (상 품 코 드 , S Y S D A T E ) 당 일 매 출 ,
[ 35 I 다음 중 비용기반 옵티마〇 I저 (Cos卜 Based Optimizer) 가 사용하는 H|용
_ 비용 一 액세스 I t e m A m t F u n c (상 품 코 드 , S Y S D A T E - 1 ) 전 일 매 출 ,
계산식으로 가장 적절한 것을 2개 고르시오.
방식, 조인 순 서 , 조인 FROM 상품
NDV = Number Of Distinct Value )
방법 등 결정 W HERE 상 품 분 류 코 드 = ’110’)
■ 카디널 리 티
① 선택도 ( S e le c t iv it y ) : 1 / NDV
= 총 로우 수 、 선택도
② 선택도 ( S e le c tiv ity ) = NDV / 총 로우 수 ③ SELECT 상품코 드 , 당일매출, 전일매출,
= num_rows /
③ 카디널리티 ( C a r d i n a l i t y ) = NDV ( 당 일 매 출 - 전 일 매 출 ) * 1〇 〇 / 당일매출 증감율
num_distinct
④ 카디널리티(Cardinality ) = 총 로우 수 / NDVI FROM (S E L E C T 상 품 코 드 ,

I t e m A m t F u n c ( 4 v# S H , SYSDATE) 일 매 #,

I t e m A m t F u n c (상 품 코 드 ,S Y S D A T E - 1 ) 전 일 매 출 ,

FROM 상품

WHERE 상 # 분 류 코 드 ='110')

④ SELECT 상품코 드 ,
I 36 1 다음 중 통 계 정 보 수집 시 고 려 사 항 을 설 명 한 것 으 로 가 장 부 적 절 한
(S E L E C T It e r n A in t F u n c (상 품 코 드 , S Y S D A T E )
것은?
F R O M DUAL) 당일매출,

① 시간/주기 : 부하가 없는 시간대에 가능한 한 빠르게 수집을 완료해야 함 (S E L E C T I t e m A m t F u n c (상 품 코 드 , S Y S D A T E - 1 )

② 표본 ( S a m p le ) 크기 : 가능한 한 많은 양의 데이터를 읽도록 해야 함 F R O M DUAL) 전일매출,

③ 정확성 : 표본 (S a m p le ) 검사하더라도 전수 검사할 때의 통계치에 근접 (S E L E C T ( I t e m A m t F u n c (상 품 코 드 , S Y S D A T E ) -

I t e m A m t F u n c (상 품 코 드 , S Y S D A T E - 1 ))* 1 0 0 /
해야 함
I t e m A m t F u n c (상 품 코 드 , S Y S D A T E )
④ 안정성 : 데이터에 큰 변화가 없는데도 매번 통계치가 비-뀌지 않아야 함
F R O M DUAL) 증감율

FROM 상품

W HERE 상 품 분 류 코 드 = ’110’

SQL 자격검 정 실 전문 제 I 1 6 1 162 I SQL 자격검정 실전문제


m. SQL 고 급 활 용 및 튜닝

38
핵심정리 O ra c le 에서 no_m erge 힌트를 사용하지 않고도 아래 S Q L 문에 뷰 머징 4〇 다음 중 아래 S Q 니게 대한 설명으로 가 장 적 절한 것 은 ? (단 ,쿼리 변 환

(V ie w M erg in g ) 이 발생하지 않게 하 려고 한다. 다음 중 _ 안에 (Q u e ry T ra n s fo rm a tio n ) 이 동작 히 는 것으로 가정함)

힌트를 사용하지 않고 들 어 갈 키워드로 가 장 적 절한 것 은 ? 아 래


뷰 머징(View Merging ) select *
from (select deptno, empno, ename, job, sal, sal * 1.1 sal2, hiredate
방지하는 방법
from emp
■ 집 합 (set ) 연 산 자
SELECT * where job = ’CLERK1
( union, union all , u nio n all
FROM (SELECT 的 EMP_NAME, HIRE_DATE, SAL,
intersect, minus) DEPT_N0 select deptno, empno, enam er jo b ,sal, sal * 1.2 sal2,hiredate

■ connect by 절 FROM EMP from emp


where job = 'SALESMAN1 ) v
■ ROWNUM pseudo WHERE DEPTNO = 30) X
where y .deptno : 30
WHERE HIRE_DATE BETWEEN TO_DATE('201001〇 r , 'YYYYMMDD') AND
칼럼
TO_DATE('2010123r, 'YYYYMMDD') ① emp 테이블에 job + deptno로 구성된 인덱스를 만들면, job 조건만
■ select—lisKHI 집계
함 수 (avg , count, 인덱스 액세스 조건으로 사용되고,deptno 조건은 필터로 처리된다.
max, min, sum) A|-g ① TO_ DATE(SYSDATE,'YYYYMMDD') ② emp 테이블 job에 단일 컬럼 인덱스를 만들면, 이 인덱스를 정상적으로
■ 분석 함 수 (Analytic 사용할 수 없다. 즉, Index Range Scan할 수 없다.
② ROWNUM
Function) ③ emp 테이블에 deptno + job 으로 구성된 인텍스를 만들면, jc)b과
③ EMPNO
® ROWID deptno에 대한 조건 모두를 인덱스 액세스 조건으로 사용할 수 있다.
④ emp 테이블 deptno에 단일 컬럼 인덱스를 만들면,이 인덱스를 정상적
으로 사용할 수 없다. 즉 ,Index Range Scan할 수 없다.

1 41 | 다음 중 아래 SQL을 처리하는 데 있어 옵 티 마 이 저 가 선택할 수 있는

옵션 으 로 가장 부 적 절 한 것 은 ?

| 다음 중 뷰 머징(V iew M erging 信 불가능하게 하는 경우가 아닌 것은? 아 래


alter table 과금 add constraint 과금_p k prim ary key( 고객번호, 과금월);
① 뷰 안에 ROWNUM을 사용한 경우 alter table 수납 add constraint 수납_p k prim ary key (고객 번호,수납일자);.

과목
② 뷰 안에 Group By를 사용한 경우
select e l. 고객번호,e l. 과금액,e2. 수납액, e l . 과금액- e2.수납액 미수금액

I
,
③ 뷰 안에 원도우 함수 (Window Function)를 사용한 경우 from (select 고객번호,su m (과금액) 과금액 from 과금 group by 고객번호)

S Q L
el
④ 뷰 안에 UNION 연신-자를 사용한 경우
, (select 고객번호, su m (수납액) 수납액

고급활용 및 튜닝
from 수납
where 고객번호 = 10
group by 고객번호) e2
where e l .고객번호 = e2. 고객번호
and e2. 수납액 > 0

① 두 인라인 뷰 (Inline View)를 풀어 (View Merging) 고객번호 조인을


먼저 처리한 후에,고객번호로 group by하면서 과금액과 수납액을 구한다.
② 인라인 뷰 e2에 있 는 「
고객번호 = 10」 조건을 el에 전달해 중으로써
과금 _pk 인덱스를 사용해 처리한다,
수납액 > 〇 」 조건을 인라인 뷰 e2에 제공함으로써
③ 메인 쿼리에 있 는 「
조인 연산 전에 필터링이 일어나도록 한다.
④ 사용자가 작성한 SQL 형태 그대로,각 인라인 뷰를 따로 최적화한
후에 조인한다.

SQL 자 격 검 정 실전문제 I 1 6 3
164 | SQL 자 격 검 정 실전문 제
M. SQL 고 급 활 용 및 튜닝

42 아래 S Q 1J 라 트 레 이 스 결과를 보 고 ,최적의 튜닝 방안을 선택하시오.

아래

4 문 고객
고섹 번 ,

4 문번요 S
고 객 번 立 ( FS ) 고객«

r
4 문일 치 연 탁처
4 문금액 푸소

select 〇 , 주 문 번 호 ,〇 . 주 문 일 시 , 〇 . 고 객 번 호 ,〇 .주 문 금 액
from 주 문 〇 inner jo in 고 객 c on c. 고 객 번 호 = o . 고 객 번 호

where 〇 . 주 문 일시 = !ord_dt

Call Count CPU Time Elapsed Time Disk Query Current Rows

Parse 1 0.000 0,028 0 0 0 0


Execute 1 0.000 0.000 0 0 0 0
Fetch 45939 9.234 12.642 13563 149480 0 459379

Total 45941 9.234 12,670 13563 149480 0 459379

Rows Row Source Operation

459379 NESTED LOOPS (or=149480 pr=13563 pw=0 time=19337719 us)


459379 TABLE ACCESS BY INDEX ROWID 주문(cr=103541 pr=13562 pw=0 time=8766716 us)
459379 INDEX RANGE SCAN 주문_주문일시-]:DX (cr=的902 pr=968 pw=0 time=187抑09 us)
459379 INDEX UNIQUE SCAN 고객_PK (cr=459期 pr=l pw=0 time=5375998 us)

① 힌트를 이용해 고객 테이블을 먼저 드라이빙하도록 유도한다.


select / * +leading(c)use_ nl(o)*/ o.주문번호,〇 ,주문일시, 〇 .고객번호,
〇 . 주문금액

과목
from 주문 〇 inner join 고객 c on c.고객번호 = o.고객번호

I
where o.주문일시 = :ord_dt


S Q L
② 힌트를 이용해 해시 조인으로 유도한다.
select / * +use_ hash(oc)*/ 〇 ,주문번호, 〇 .주문일시,〇 .고객번호,

고급■용 및 튜닝
〇 .주문금액
from 주문 〇 inner join 고객 c on c.고객번호 =그〇 ,고객번호
where 〇 .주문일시 = I〇 rd_dt
③ 고객과의 조인문을 Exists 서브쿼리로 변환한다.
select 〇 .주문번호,〇 .주문일시,〇 .고객번호,〇 .주문금액
from 주문 〇
where 〇 . 주문일시 = :ord_dt
and exists (select 'x' from고객 where 고객번호 = o. 고객번호)
④ 고객과의 조인을 제거한다,
select 주문번호,주문일시,고객번호,주문금액
from 주문
where 주문일시 = :ord_dt

SQL 자격검 정 실전문 제 I 1 6 5


o

43 인 덱 스 탐색 과 정 은 수 직 적 탐 색 과 수 평 적 탐 색 으 로 나눠 서 설 명 할 수
핵심정리
있다. 수 평 적 탐 색 은 인덱 스 리프 블 록 에 저장된 레코드 끼 리 연결된
순서 에 따라 좌에서 우 ,또 는 우에서 조!
■로 스캔하기 때문에 •수평적’이라고

인덱스오ᅡ 조 인
........... ■ mmmmmm 【■■■
표 현 한 다 . 수직적 탐색은 수평적 탐색을 위한 시작 지점을 찾는 과정

이 라 고 말 할 수 있 다 . 다음 중 아래 SQL에서 EMPJDX 인덱스의 수 평 적


탐색 시 작 지점의 값을 보기에서 고 르 시 오 .

아 래
< 인 텍 스 구 성 )、
emp_idx I deptno + sal + comm

select /*+ index_asc(e emp_idx) */


empno, ename, sal, comm, hiredate
from emp e
where deptno = 20
제 1절 인덱스 기본 원리 and sal between 2000 and 3000
and com m 〈 = 100
제 2절 인 덱 스 튜 닝
제 3절 조 인 기본 원리 ① 인텍스 정렬 순서 상 deptno = 20 조 건 을 만 족 하 는 첫 번 째 레 코 드
제 4절 고 급 조 인 기법 ② 인덱 스 정렬 순서 상 deptno = 20 and sal = 2000 조 건 을 만 족 하 는
첫 번째 레 코 드

③ 인텍스 정렬 순서 상 deptno = 20 and sal = 2000 and comm -


100 조 건 을 만 족 하 는 첫 번 째 레 코 드
④ 인덱스 정렬 순서 상 deptno - 20 and sal = 3000 and comm =
100 조 건 을 만 족 하 는 첫 번 째

Index Range Scan 은 44 다 음 중 아 래 와 같 은 인 덱 스 상 황 에 서 Index Range Scan 이 불 가 능 한


인덱스 루트 블록에서
SQL 은 ?
리프 블록까지 수직적으로
탐색한 후에 리프 블록을 아 래
필요한 범위(R an g e) 만 create index emp_idx on emp( deptno, job, ename ) ;
스캔하는 방식이다.
① select empno, ename, job, hiredate
from emp
where deptno = :deptno
and ename = !ename;
② select empno, ename, job, hiredate
from emp
where deptno = :deptno
and job is null ;
③ select empno, ename, job, hiredate
from emp
where deptno is null
and job = :job;
④ select empno, ename, job, hiredate
from emp
where job = :job
and ename = :ename;

168 I SQL 자격검정 실전문제


m . SQL 고급활용 및 튜닝

45 다 음 중 힌 트 를 사 용 하 더 라 도 index Skip Scan 방 식 으 로 실 행 되 지 핵심정리 47 다음 중 비트맵 인덱스에 대한 설 명 으 로 가 장 부 적 절 한 것 은 ?


핵심정리
않 는 SQL 인 것 은 ?
① B*Tree 인덱스에 비해 테이블 Random 액세스를 획기적으로 줄여주므로
비트맵 인 덱 스 는 Lock 에
Index Skip Scan 은 루트
아 래 성별처 럼 Distinct Value 개수가 적은 컬럼에도 좋은 성능을 나타낸다.
의 한 DML 부 하 가 심 한
또는 브랜치 블록에서
것이 단 점 이 다 . 레코드 ② 고객번호처 럼 Distinct Value 개수가 아주 많을 때 ,B*Tree 인덱스
읽은 칼럼 값 정보를 create index 고 객 _x01 on 고 객 (거 주 지 역 , 성 별 , 가 입 일 자 );
하나만 변경되더라도 해당 보다 훨씬 많은 공간을 차지한다.
이용해 조건에 부합하는 create index 고 객 _x02 on 고 객 (고 객 등 급 , 생 일 );
레코드를 포함할 비트맵 범위에 속 한 모든 ③ 여러 비트맵 인덱스를 동시에 사용 가능하고,Bitwise Not 연산도 가능
레코드에 Lock 이 걸 린 다 . 하다.
“가능성이 있는” 하위
블록(브랜치 또는 리프 ① select *from 고 객 OLTP성 환경 에 비트맵
④ Lock에 의한 DML 부하가 심각해서 OLTP성 환경에는 부적합하다.
where 거주지역 = 중청1 인 덱 스 를 쓸 수 없는
블록)만 골라서
and 가입일자 between '20110201' and ,20110228, 이 유 가 여기에 있 다 .
액세스하는 방식이다.
비트맵 인 덱 스 는 읽기
② select *from 고 객
위주의 대용 량 DW (특 히 ,
Index Full Scan 은 수직적 where 가입일자 between ,20110201,and ’20110228’
O LA P ) 환경 에 아주
탐색없이 인덱스 리프 ③ select *from 고 객
적합하다.
블록을 처음부터 끝까지
where 고객등급 between ’A' and '0'
수평적으로 탐색하는 48 다 음 중 SQL을 처 리 하 기 에 가 장 효 율 적 인 인 덱 스 구 성 을 고 르 시 오 .(단 ,
and 생일 = ,
0326,
방식으로서, 대개는 클 러 스 터 링 팩 터 는 고 려 하 지 않 는 다 .)
④ select *from 고 객
데이터 검색을 위한
최적의 인덱스가 없을 때 where 고객등급 in ('A', ’C’)
아 래
차선으로 선택된다. and 생일 = ’0326’
[SQL문 ]
s e le c t *
Index Unique Scan 은
fro m 주문
수직적 탐색만으로
w h e re 주문유형코드 = :
a
데이터를 찾는 스캔 and 지점코드 = :
b
방식으로서, Unique and 계좌번호 = :
c
인덱스를 ‘=,조건으로 46 다음 중 인 덱 스 구 성 이 아 래 와 같 을 때 SQL을 처 리 하 는 데 활 용 가 능 한 and 주 문 일 자 b e tw e e n :d 이i d :e;
탐색하는 경우에 인 덱 스 스 캔 방 식 을 £ZM 고 르 시 오 .
[값의 종류 개수 (Number Of Distinct Value)]
작동한다.
주문유형코드 : 5
아 래
계좌번호 : 5 0 0 ,0 0 0
Index Fast Full Scan 은 지점코드 : 1〇 〇
create index emp_x01 on emp(deptno, sal) ;
Index Full Scan 보다 주문일자 : 1 ,8 0 0
빠르다. Index Fast Full
select empno, ename, deptno, sal
Scan 이 Index Full
from emp
Scan 보다 빠른 이유는, ① 지점코드 + 주문일자 + 계좌번호
where sal between 2000 and 4000;
인덱스 트리 구조를 ② 계좌번호 + 주문일자 + 지점코드
무시하고 인덱스 세그먼트 ③ 주문일자 + 계좌번호 + 지점코드
전체를 M ultiblock Read ① index range scan
④ 주문유형코드 + 지점코드 + 주문일자 + 계좌번호
방식으로 스캔하기 (2) index full scan
때문이다. ③ index fast full scan
④ index skip scan

170 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 169
m. SQL 고급활용 및 튜닝

公 o

49 다 음 중 아래 SQL 문 을 튜 닝 하 기 위 한 분 석 을 진행 중 분 석 한 내 용 으 로 아래 트 레 이 스 결 과 를 가 장 적 절 히 설 명 한 보 기 를 2 개 고 르 시 오 .
핵심정리
가장 부적절한 것은?
아 래
인덱스 설계 를 위해
아 래
고 려 해 야 할 요소 (M Cbmt CHJ Time Elapsed Tirm Disk Qjery Current Rm

create index 주문 _idx on 주문(주문일자); ■ 쿼리 수행 빈도

■ 업무상 중요도
Fkse 1 0.010 0.012 0 0 0 0

select 고객 ID , 연락처, 고객등급 Execute 1 0.000 0.000 0 0 0 0


■ 클 러 스 터 링 팩터
Fetch 78 10.150 49,199 27830 266468 0 1909
from 주문 ■ 데 이터량
where 주문일자 = ‘20110725’
■ DML 부 하 {= 기존
and 배송상태 = 'ING1; Tbtal 80 10.160 49.231 27830 266468 0 m
인덱 스 개수, 초 당
DML 발생량, 자 주 R)切
g Ibw Source〔
deration
① [주문일자 = ‘20U 0725’] 조건만으로 인덱스 탐색이 이루어진다. 갱 신 되 는 칼럼 포 함
1900 AOCSS BYIMEXIOATO (cr=266468 pw=0 tinB:::5S480S16 us)
여부 등)
② [배송상태 = ‘ING’] 조건에 대한 필터링은 테이블 액세스 단계에서 이루 266476 INffiXRANCE SCANTABlJffll (cr=511 pr=300 pw=0 time=1893462 us)CF
■ 저장 공간
어진다.
■ 인 덱 스 관리 비용 등
(受) SQL 문장에 1:배송상태 = ‘ING’] 조건절이 없다면 테이블은 액세스하지
① TAB1_X 01 인덱스의 클러스터링 팩터는 매우 좋은 상태다.
않아도 된다.
② TAB1_X01 인덱스에 컬럼을 추가하면 성능을 높이는 데 매우 큰 도움이
④ [배송상태 = ‘ING’] 조건을 만족하는 레코드 비중이 아주 낮다면,주문
된다.
일자_idx 인덱스가 주문일자와 배송상태 두 컬럼을 모두 포함하도록
③ TAB1_X01 인덱스 컬럼 순서를 조정하면 성능을 높이는 데 매우 큰
구성함으로써 쿼리 성능을 향상시킬 수 있다. 이 쿼리만 고려한다면,
도움이 된다.
두 컬럼 간 순서는 자유롭게 선택해도 무방하다.
④ CPU Time과 Elapsed Time 간 39초가량 차이가 발생한 이유는,
27,000여 개 디스크 블록을 읽기 위한 " 0 Call 과정에 발생한 대기
현상 때문일 가능성이 가장 높다.
50 성 능 향 상 을 위 해 아래 왼 쪽 SQL 을 오 른 쪽 과 같이 변 환 하 였 다 . 인 덱 스

구 성 을 보 기 와 같이 (於!後後) 순 으 로 바꿔 가며 就 IL을 실 행 할 때, 오 른 쪽

변환된 SQL의 블 록 I/ O가 오히려 늘 어 나 는 인 덱 스 구 성 을 2개 고 르 시 오 .


결합 인덱스 구성 52 I 다 음 중 SQL 에 사 용 된 다 양 한 액 세 스 유 형 을 분 석 해 시 스 템 전 체 적 인
첫 번째 기준은, 조건절에
관점에서 전략적인 인덱스 설계를 하려고 한다, 결합 인덱스 키 칼럼을
항상 사용되거나,
선 정 하 는 데 있어 가 장 중 요 한 선 택 기 준 두 가 지 를 순 서 대 로 나 열 한
select * 적어도 자주 사용되는
select *
것으로 가장 적절한 것 은 ?
from 고^] from 고객 칼 럼 들 을 선정
where 가입일자 like 2010%' where 가입일자 like '2010% ' 두 번째 기준은, 그렇게
and 고객등급 between ’A’ and ’B’ and 고객등급 = 'A1
선정 된 칼럼 중 ‘근 .
아 래
union all
조 건 으 로 자주
기, 데이터 분포
select *
조회되는 칼럼을 L . '= ' 조건으로 자주 조회되는지
from 고객
앞쪽에 두 어 야 한다 조건절에 항상 또는 자주 사용되거나
where 가입일자 like ’2010%’
and 고객등급 = 'B' 세 번째 기준은, 소 트 5 정렬 기준 칼럼으로 자주 사용되는지
오퍼레이션을
생략하도록 하기 위해
① n ᅳ L
① 가입일자 칼럼을 추가
② 1_ ᅳ H
② 고 객 ^^
③ I: — 1_
③ 가입일자 + 고객등급
④ I: ᅳ H
④ 고객등급 + 가입일자

SQL 자격 검 정 실 전 문 제 I 1 7 1 172 I SQL 자 격검 정 실전문제


M. SQL 고급활용 및 튜닝

53 다 음 중 아래 인 덱 스 구 성 과 SQL을 고 려 할 때, 실 행 계 획 맨 아 래 ( ID=5) 1 54 I SQL 트 레 이 스 를 수 집 한 결고누 Row Source Operation이 아래오꾸 같 았다.


주문JD X 인덱스의 액 세 스 조 건 으 로 가 장 적 절 한 것 은 ? 튜 닝 을 위해 가 장 우 선 적 으 로 검 토 할 사 항 으 로 가 장 적 절 한 것 은 ?

(단 ,한 달 간 주 문 건 수 는 평 균 5 0 만 건 이 다 .)
아 래
아 래
< 인덱스 구 성 〉
create index 주문_ ID X on 주문 ( 주문일자 , 고객번호); select c . 고객명,c . 연령,c . 전화번호, 〇 , 주문일자,〇 . 주문총금액, 〇 ,배송지주소
from 고객 c, 주문 〇
select / * + ordered u se _n l(o ) * / * where 〇 .고객번호 = c ,고객번호

fro m 고객 c, 주문 o a nd c. 고객등급 = 'A'

w here c. 가입일자 = '20130414' a nd c. 연령 between 51 and 60

and o. 고객번호 : c. 고객번호 a nd 〇 . 주^문일자 between '20101201’ and ’20101231’


and o. 주문일자 = '20130414'
and o. 상품코드 = 'A123'; Rows Row Source O peration

E x e c u tio n P la n 10 NESTED LOOPS


23 TABLE ACCESS BY IN D E X ROW ID 고객

0 SELECT STATEMENT O p tim iz e r= A L L _ R O W S 2978 IN DEX RANGE SCAN 고객—IDX

1 0 TABLE A C C E SS (BY IN D E X R O W ID ) O F ’주문 ’ (TABLE) 10 TABLE ACCESS BY IN D E X ROW ID 주문

2 1 N EST ED L O O P S 28 IN D E X RANGE SCAN 주문-IDX

3 2 TABLE ACCESS (BY IN D E X R O W ID ) O F ’고객 ’ (TABLE)


4 3 IN D E X (R A N G E SCAN) OF 1고객_X 01 ,(IN D EX ) ① 고객 _ I I 役 인덱 스 칼럼 순 서 를 조 정 한 다 .
5 2 IN D E X (R A N G E SCAN) O F ’주문—ID X ' (IN D EX )
② 고객 _ I D X 인덱스에 칼 럼 을 추 가 한 다 .

③ 주 문 _ I D X 인텍스에 칼 럼 을 추 가 한 다 .

① o.고객번호 = c.고객번호 ④ 테이블 조인 순 서 를 변경한다.

② 〇 .주문일자 = '20130414'
③ 〇 .주문일자 = '20130414' and 〇 .고객번호 = c.고객번호
④ 〇 .주문일자 = '20130414' and 〇 .고객번호 = 。.고객번호 m d 1 55 1 테이블과 인덱스 구 성 은 아래 와 같다. INDEX RANGE SCAN으 로 데이터를
품코드 = 'A123’ ^ 액 세 스 할 수 있 는 SQL 로 가 장 적 절 한 것 은 ?


I
아 래

S Q L
테 이 블 명 : 고객

고급활용 및 튜닝 [칼럼 리스 트 ]
고객 I D :N O T N U L L , V A R C H A R 2 ( 1 0 )
고객명 : NOT N U LL, V A R C H A R 2 (2 0 )
직업코드 :
N U L L A B L E , V A R C H A R 2 (3 )

[인텍스 구 성 ]
고 객 _ P K :고 객 :
ID
고 객 _ X 0 1 : 직 업 코 드 , 고객명

① S E L E C T * F R O M 고객 W H E R E 31 正 3 ? 라 고 객 11),
1,3) = ‘100,

② S E L E C T * F R O M 고객 W H E R E 고객명 = ‘ 김시험 ’

③ S E L E C T * F R O M 고객 W H E R E 직 업 코 드 IS N U L L

④ S E L E C T * F R O M 고객 W H E R E 고 객 I D = 1 0 0 0 0 0 0 0 0 9

SQL 자격검정 실전문제 I 1 7 3 174 I SQL 자 격검 정 실전문제


m. SQL 고 급 활 용 및 튜닝

5 6 _ 〇 ra c |e 에서 TAB 1, TAB 2 순 으 로 NL 조 인 하 도 록 유 도 하 고 싶 다 . 다 음 59 다 음 중 아래 SQ 니 과 SQL2의 실 행 계 획 에 대 한 설 명 으 로 가 장 부 적 절 한


핵심정리
Hash J o in 성능을 s B ] 안에 넣을 바른 힌 트 사 용 법 을 2 개 고 르 시 오 . 것은?

좌우하는 키 포인트 아 래
아 래
■ 한 쪽 테이볼이 가용
메모리에 담길 정도로

0L1]
SELECT /*+ ( | (n) l) */ … SELECT /*+ LEADING(A) USE_NL(B) */
충분히 작아야 함 b. 상품분류코드 , a. 기준양자
FROM TAB1 A, TAB2 B
, SUM (a. 판매금액 ) AS 판매금액
■ Build Input 해시 키 WHERE A, KEY = B.KEY , SUM (a. 판매수량 ) AS 판매수량
FROM 일별매출 a, 상품 b
칼럼에 중 복 값이 WHERE 요기준일과 BETWEEN TO—DATE (:v_시작기준일자,'YYYYMMDD')
거의 없 어 야 함 AND TO_DATE 〇 _놓 1 기 준 설 자 , 'YYYYMMDD')
A]vjd b 상품코드 = a 상품코드
① ORDERED USE_NL(B)
AND b:판 매 시 작 일 자 ‘〉= TO_DATE (:v_판매시작일자 , 'YYYYMMDD')
② ORDERED USE_NL(TAB2) GROUP BY b.상품분류코드 , a. 기준일자 ;
Hash J o in 선택 기준
■ 조인 칼럼 에 적 당 한
③ LEADING(A) USE_NL(B)
I Id Operation I Name |
인 덱 스 가 없어 NL ④ DRIVING_SITE(A) USE_NL(B)
I 0 SELECT STATEMENT i i
Join 이 비효율적일 때 I 1 HASH GROUP BY i i
■ 조인 칼럼에 인 덱 스 가 I* 2 FILTER i i
I 3 NESTED LOOPS i i
있 더 라 도 NL Join I 4 NESTED LOOPS i i
I 5 PARTITION RANGE ITERATOR i i
드 라 이 빙 집합에서
I 6 TABLE ACCESS BY LOCAL INDEX ROWID ! 일별매출 1
Inner 쪽 집 합 으 로 의 I* 7 INDEX RANGE SCAN 1일 별 매 출 Xl|
I 57 j 다 음 중 H a s h J o i n 에 대 한 설 명 으 로 가 장 부적절한 것 을 2개 고 르 시 오 . r 8 INDEX RANGE SCAN 1 상 품 PK |
조인 액세스량이 많아
1* 9 TABLE ACCESS BY INDEX ROWID 1 상품 1
Random 액 세 스
부하가 심할 때 ① 조인 연결고리에 equi-join 조건이 하나라도 있어야 한다. [SQL2]
SELECT /*+ LEA D IN G (A ) U SE_NL(B) * /
■ Sort Merge Join ② 일반적으로, 큰 집합으로 해시 테이블을 생성하고서 작은 집합을 읽으 b. 상품분류코드 , a . 기준알_자
, SU M (a. 판매금액 ) A S 판매금액
하 기 에 는 두 테이블 면서 이 해시 테이블을 탐색하는 게 유리하다. , SU M (a. 판매수량 ) A S 판매수량
이 너무 커 소 트 ③ OLTP 환경에서 수행빈도가 아주 높은 쿼리라도 부담 없이 乂!용할 수 있다. F R O M (SELECT a. 기준일자
,a 상품코드
부하가 심할 때 : S lIM (a. 판매금액 ) A S 판매금액
④ Build Input으로 선택된 집합의 조인 칼럼에는 중복 값이 거의 없어야
■ 수 행 빈 도 가 낮고 쿼리 , SU M (a. 판매수량 ) A S 판매수량
효과적이다.. F R O M 일별매출 a
수행 시간 이 오래 W H E R E a. 기준일자 BETW EEN TO—DATE (:v _ 시작기준일자 , 'YYYYM M DD')
A N D TO_DATE (:v _ 종료 기 준 # 年,'YYYYM M DD')
걸 리 는 대용량 G RO U P B Y a. 기준일자 , a . 상품코드 ) a

테이블을 조인할 때 , 상품 b
W H E R E b. 상품코드 = a. 상품코드
A N D b. 판 매 시 작 일 자 〉= TO_DATE (:v _ 판매시작일자 , 'YYYYM M DD')
GROUP BY b. 상품분류코드
, a. 기준일자 ;

서브쿼리 중에서 함수처럼 다음 중 스 칼 라 서브쿼리의 특징 을 설 명 한 것으로 가 장 부 적 절 한 것 은 ?


1 Id Operation I Name
한 레 코 드 당 정확히

하나의 값 만 을 리 턴 하 는 ① 스칼라 서브쿼리를 이용한 조인은 NL 조인처럼 한 레코드씩 순차적 1 0 SELECT STATEMENT i i
1 1 HASH GROUP BY i i
서 브 쿼 리 를 Scalar
으로 진행한다. I 2 NESTED LOOPS i i
Subquery 라고 한다. 1 3 NESTED im P S i i
② 메인 쿼리의 레코드마다 스칼라 서브쿼리를 통해 하나의 레코드, 하나의 I 4 VIEW i i
Scalar S 니bq니e ry b 1 5 HASH GROUP BY i i
값만 리턴한다. I* 6 FILTER
주 로 select - list에서 i i
③ 조인에 실패할 경우,Null을 리턴한다. I 7 PARTITION RANGE ITERATOR i i
사 용 되 지 만 몇 가지 I 8 TABLE ACCESS BY LOCAL INDEX ROWID i 일별매출 I
④ 입력 값 (=조인 컬럼)과 출력 값뉴리턴 값)을 Shared Pool에 있는 |* 9 INDEX RANGE SCAN 1일 별 매 출 XII
예외사항을 뺀다면 칼럼이
1* 10 INDEX UNIQUE SCAN I 상 품 PK |
올 수 있는 대부분 Result Cache에 캐싱했다가 같은 입력 값에 대해서는 캐싱된 값을 1* 11 TABLE ACCESS BY INDEX ROWID i 상품 i

위 치 에 서 사 용 가능 하 다 . 리턴함으로써 조인 부하를 줄여준다.

SQL 자격검정 실전문제 I 1 7 5 176 I SQL 자격검정 실전문제


m. SQL 고 급 활 용 및 튜닝

[테이블1 핵심정리 61 아래와 같이 고객 테이블과 2개의 변경이력 테이블이 있다. 두 변경이력


CREATE TABLE 상품 ( 테이블에 있는 시작일자, 종료일자는 선분이력으로 관리된다. 즉,시작
상품코드 VARCHAR2(10) NOT NULL
선분이 력 이 란 ? 일자에는 이력 레코드 생성일자가 입력되고, 종료일자에는 처음에
,상품명 VARCHAR2(100) NOT NULL
, 상품분류코드 VARCHAE2(5) NOT NULL 예를 들어 고객별연체금액 ’99991231’로 입력되었다가 다음 번 새 이력 레코드가 생성되는 순간
, 판매시작일자 DATE NOT NULL 변경이력을 관리 할 때 바로 전 일자로 갱신된다. 이 세 테이블에서 이름이 홍길동’인 고객의
, 판매종료일자 DATE NULL ) ; 이력의 시 작 시 점 만 을 1998년 5월 29일자 고객등급과 전화번호를 조회하려고 한다. 아래
관 리 하 는 것을 ‘점 이 력 ’
CREATE UNIQUE INDEX 상품-PK ON 상품 (상품코드); r 〇 i 에 들어갈 조건절로 가장 적절한 것은? {단, 고객번호와 변경순
모 델 이 라 고 하고,
CREATE IN DEX 상품_X1 ON 상품 (판매시작일자); 번을 제외한 나머지 속성은 모두 문자형)
시작시점과 종료시점을

CREATE TABLE 일별매출 ( 함께 관 리 하 는 것을


기준일자 DATE NOT NULL ‘선 분 이 력 ’ 모 델 이 라 고
, 상품코드 YAECHAR2(10) NOT NULL 한다
, 판매금액 NUMBER(IO) NOT NULL
, 판매수량 NUMBER(IO) NOT NULL ) ;

CREATE UNIQUE IN DEX 일별매!'_PK ON 일별매출 (상품코 드 , 기준일자);


CREATE IN DEX 일별매출_X1 ON 일별매출 ( 기준일자);

- 단, 상품 테이블은 판매시작일자별 상품 수가 비슷한 것으로 가정한다.


ᅳ 단, 일별매출 테이블은 기준일자로 파티셔닝되어 있다고 가정한다.

① SQL1은 조인 과정에서 과도한 I/O 가 발생할 수 있다.


② SQL1은 판매시작일자 조건을 만족하는 상품 건수가 적다면, 조인순서
변경만으로 성능이 개선될 가능성이 높다.
③ SQL2는 판매시작일자 변수에 오랜 과거일자를 입력할 때보다 최근

일자를 입력할 때 비효율이 더 적다.


④ Query Transformer는 쿼리변환을 수행하여 SQL1에 대해 SQL2와

과목 ■ •
유사한 실행계획을 수립하기도 한다.
① and c l . 변경순번 = (select max(변경순번)
from 고객등급변경이력

S Q L
where 시 작 일 자 〈= '19980529')

고급활용 및 튜님
다 음 중 아 래 와 같 은 SQL 에서 가 능 한 조 인 방 법 을 모 두 나 열 한 것 은 ? and c2, 변경순번 = (select max(변경순번)
from 전화번호변경이력
where 시작일자 (= '19980529')
아 래
② and c l . 변경순번 = (select 변경순번
SELECT emp. ename, salgrade. grade from 고객등급변경이력
FROM emp tl, salgrade t2 where ’19980529’ between 시작일자 Mid 종료일자)
WHERE tl.sa l BETWEEN t2.1osal AND t2.hisal and c2. 변경순번 = (select 변경순번
from 전화번호변경이력
① Nested Loop Join
where '19980529' between 시작일자 and 종료일자)
② Nested Loop Join , Sort Merge Join ③ and ’19980529’ between c l. 시작일자 and c l. 종료일자
③ Sort Merge Join , Hash Join and '19980529' between c2 .시작일자 and c2.종료일자
④ and '19980529' between c l. 시작일자 and c l. 종료일자
④ Nested Loop Join , Sort Merge Join , Hash Join
and c l.종 료 일 자 〉= c2. 시작일자
and c l. 시 작 일 자 〈= c2. 종요일자

SQL 자격 검 정 실 전 문 제 I 1 7 7 178 I SQL 자격검정 실전문제


m . SQL 고 급 활 용 및 튜닝

〇 o

핵심정리 | 다 음 중 Local 파 티 션 인 덱 스 의 특 징 과 거 리 가 먼 것 은 ? O racle 이 지 원 하 는 파 티 션 유 형

Local 파티 션 인 덱 스 :
① 테이블 파티션과 1:1 대응 관계 1) Range 파티셔닝
테이블 파 티 션 과 1:1 로
② 테이블에 파티션 ADD/ DROP/ SPLIT/EXCHANGE 작업 시,인덱스 ■ 파 티 션 키 값의 범위( Range)로 분 할
대응되도록 파티셔닝한
o ja iA . 파티션도 자동 관리됨 ■ 파티셔닝의 가 장 일반적인 형태이며, 주 로 날짜 칼럼 을 기준으로 함예) 판매 데이터를

③ Local 파티션 인덱스의 경우,테이블 파티션 키 (=인텍스 파티션 키)가 월별로 분할


인 덱 스 파티 션 키를
사 용 자 가 따로 지 정하지 인덱스 키 선두 컬럼에 위치해야 함. 예를 들어 테이블과 인덱스 파티션
2) Hash 파 티 셔닝
않 으 며 , 테 이 블 과 1:1 키가 '주문일자’이면,Local 피-티션 인덱스 키는 '주문일자’로 시작해야
■ 파 티 션 키 값에 해시 함 수 를 적 용 하 고 , 거기서 반환된 값으 로 파티 션 매핑
관계를 유지하도록 함
■ 데 이 터 가 모 든 파 티 션 에 고 르 게 분 산 되 도 록 DBMS가 관리
DBMS가 天[동으로
④ 테이블 파티션 키가 SQL 조건절에 없을 때,인덱스 사용 시 비효율
- 각 로 우 의 저 장 위치 예측 불 가
관 리 해 줌.
발생 ■ 파 티 션 키의 데이터 분 포 가 고 른 칼 럼 이 어 야 효 과 적
SQL Server 에선
예) 고 객 번 호 , 주 문 일 련 번 호 등
‘정 렬 된 (aligned) 파티 션
■ 병렬처리 시 성 능 효 과 극대호I
인 덱 스 ’라고 부 른 다 .
■ DML 경 합 분산 에 효과 적

3) List 파티셔닝
■ 불 연 속 적 인 값의 목 록 을 각 파 티 션 에 지정
63 우 리 가 개 발 하 고 자 하 는 시 스 템 은 업 무 적 으 로 7〜 9 월 에 매 출 이 집중 돼
■ 순 서 와 상 관 없 이 , 사 용 자 가 미리 정한 그 룹 핑 기준에 따라 데 이 터 를 분 할 저 장
있 다 . 아 래 월 별 매 출 집 계 테 이 블 (보 관 주 기 3 년 》
을 파티셔닝하기고 했 예} 판매 데 이 터 를 지 역 별 로 분 할

고 ,매 출 연 월 가 준 으 로 각 파 티 션 에 데 이 터 를 고 르 게 분 산 저 장 하 고 자

할 때, 다 음 중 사 용 할 파 티 션 전 략 으 로 가 장 적 절 한 것 을 2 ZU 고 르 시 오 . 4) Composite 파티火J닝
■ Range 나 List 파티 션 내에 또 다른 서 브 파 티 션 ( Range, Hash , List ) 구성
예) Range + List 또 는 List + Hash 등
■ Range 나 List 파 티션이 갖 는 이점 + 각 서 브 파 티 션 구 성 의 이점

월별매출집계
# 매출연월
# 고객번호
# 판매지점코드
# 상품구분코드
# 판매금액

① Range 파티션
② List 파티션
③ Hash 파티션
④ Manual 파티션


O

SQL 자격검정 실전문제 ᅵ 1 7 9 180 I SQL 자격검정 실전문제


o

제5장 64 다움 중 테이블 너 비 에 다음과 같은 데이터가 존 재 할 경우, 올바르게


핵심정리
설 명 한 것 은 ?(각 칼 럼 의 타 입 은 number이 다 .》

고급 SQL 튜닝 coll col2 col3


아 래

10 20 NULL
15 NULL NULL
50 70 20

소 트 와 관련된
① select sum (col2) from tabl 의 결과는 NULL이다.
오퍼레이션 유형
② select sum(coll + col2 + col3) from tabl 의 결과는 185 이다.
1) Sort Aggregate :
③ select sum (col2 + col3) from tabl 의 결과는 90 이다.
전체 로 우 를 대 상으로
④ select sum (col2) + sum(col3) from tabl 의 결과는 90 이다.
제1절 고급 SQL 활용 집계 를 수 행 할 때

제2절 소스 튜닝 나타나며, Oracle


실 행 계 획 에 sort 라는
저|3절 DML 튜닝
표현이 사 용됐지만
제4절 파티션 활용
실제 소 트 가 발 생하진
제5절 배치 프로그램 튜닝 65 다 음 중 아 래 실 행 계 획 과 보 기 의 SQL 을 서 로 연 결 할 때, 보 기 SQL
않는다.
2) Sort Order By : 중 실행계획이 없는 것 은 ?

정렬된 결 과 집 합 을
얻고자 할 때 아 래

나타 난 다 .
3) Sort Group By :
1 Id | Operation I 1 Id I Operation |
Sorting 알 고 리 즘 을
사용해 그룹별 집계를 1 〇 | SELECT STATEMENT | 1 〇 | SELECT STATEMENT |

수 행 할 때 나타 난 다 . 1 11 SORT AGGREGATE | 1 1 | SORT ORDER BY |


1 2 TABLE ACCESS FULL | 1 2 | TABLE ACCESS FULL |
4) Sort Unique :
선택된 결 과 집 합 에 서
중복 레코드를
1 Id | Operation | 1 Id I Operation |
제거하고자 할 때

나타난다. Union 1 〇 1 湖 LECT STATEMENT | 1 〇 | SELECT STATEMENT |


연 산 자 나 아 래 와 같이 1 11 SORT UNIQUE | 1 1 | SORT GROUP BY |

Distinct 연 산 자 를 1 2 [ TABLE ACCESS FULL | 1 2 | TABLE ACCESS FULL |

사 용 할 때가
대 표 적이다.
5) Sort Join :
(T) select ^ from emp order by deptno ;
Sort Merge Join 을
(2) select distinct deptno from emp;
수 행 할 때 나타난다.
6) Window Sort : ③ select deptno, count(*) from emp group by deptno;

윈도 우 함 수 를 수 행 할 @ select empno, ename, sal, avg(sal) over (partition by deptno) from emp;
때 나타 난 다 .

184 | SQL 자 격 검 정 실 전 문 제
m. SQL 고급활용 및 튜닝

66 I 다음 중 정 렬 (S o rt ) 오 퍼 레 이 션 을 포함하지 않는 S Q L 은 ? 68 모니터링 결고ᅡ,아래 쿼리의 수행빈도가 가장 높아 시스템에 미치는


영향이 큰 것으로 조사됐다, 다음 중 고려할 튜닝 방안으로 가장 부적절
① select * from emp order by ename
한 것은?
② select * from emp where deptno = 20
union all 아 래
select 木
’ from emp where deptno = 30
c r e a t e in d e x 게시 판 _ i d x o n 게 시 판 ( 작 성 일 시 , 게 시 판 구 분 );
③ select empno, ename, rank 〇 over (partition by deptno order by
sal desc) from emp s e le c t *
fro m (
④ select * from dept d, emp e where d . deptno = e. deptno
s e le c t *
option(force order, merge join )
fro m 게시판
w h e re 게 시 판 구 분 - :g u b u n
and 작성일시、
)= tr u n c (s y s d a te ) — 1
o r d e r b y 작 성 일 시 , 작성자명
)
67 w h e re ro w n u m <- 1 0 0 ;
다음 중 아래 티犯오F D ictionary 조회 결고!
를 고려할 때, 보기 중 union

대신 un io n a ll 을 사 용 해 도 가능한 것으로 가 장 적 절한 것 은 ?

① r o w n u m 조 건 을 인라인 뷰 안에 사 용 한 다 .

② 게 시 판 구분의 데이터 분 포 ( 선 택 도 )를 고려해 인 덱 스 를 [작성일시 +

SQL) select column_name, num_distinct 작성자명 ] 순 으 로 변경할지 검토한다 . 최종 결정 시 다 른 S Q L 에 미치는


2 from user_tab_columns 영향 도 도 검 토 해 야 한 다 .
EMP 3 where table name = ’EMP’;
U EMPNO ③ 게 시 판 구분의 데이터 분 포 ( 선 택 도 )를 고려 해 인 덱 스 를 [게 시 판 구 분
* ENAME COLUMN NAME NUM DISTINCT
+ 작 성 일 시 ] 순 으 로 변경할지 검 토 한 다 . 최 종 결정 시 다 른 S Q L 에
* DEPTNO
o JOB EMPNO 미 치 는 영향 도 도 검 토 해 야 한 다 .
〇 MGR ENAME
④ 작성자명이 데이터 정렬 순서로서 의미 있는 것인지 현업 사용자에게
o SAL DEPTNO
V
JOB 문 의 한 후 ,불 필 요 하 다 면 제 거 한 다 .

과목
MGR
SAL

m
. S Q L 고급■용 및 튜닝
① select deptno, job , mgr from emp where empno = 7499
union
select deptno, job , mgr from emp where empno = 7654;
② select job , mgr from emp where deptno = 10
union
select job , mgr from emp where deptno = 20;
③ select deptno, job , mgr from emp where deptno = 10
union
select deptno, job , mgr from emp where deptno = 20;
④ select empno, job , mgr from emp where deptno = 10
union
select empno, job , mgr from emp where deptno = 20;

186 [ SQL 자격검정 실전문제


SQL 자격검정 실전문제 185
m . SQL 고 급 활 용 및 튜닝

••_〇

的 다음 중 아래의 고객과 고객변경이력 테이블에서 전체 고객을 대상으로 핵심정리 70 아래 S Q L 은 v_주식선물구분 바인드 변수 입력에 따라 선택적으로 주식

2010년 12월 4일자 이력을 조회하려고 할 때, 가장 효과적인 SQ L인 월별시세 또는 선물월별시세 테이블에 데이터를 입력한다. 실행 정보와

것은? O ra c le 에서 D irect 같이 바인드 변수를 입력하고 쿼 리를 100번( S ID =100)과 2 0 0 번

Path Insert 방식으로 (SID =200) 세션에서 순차적으로 수행하였을 때 200번 세션의 상태로

데이터를 입 력 든 방 법 을바 른 것 은 ?

■ insert select 문장에 아 래


/*+ append * / 힌 트
[SQL]
^병 INSERT /*+ APPEND */ ALL
■ 병렬 모 드 로 insert WHEN :느주^선물구분 = ’주삭
■ direct 옵 션 을 THEN INTO 주식월별시세 (종목코드, 거래일자, 종가)
지정하고 . WHEN 주식선물구분 : '선물’
① select b .고객 ID , b . 변경순번,b. 전화번호,b .주소, b.지-녀수,b. 직업,
THEN INTO 선물월별시세 (종목코드,거래일자, 종가)
SQL * Loader(sqlldr)
b . 고 객 ^급 SELECT a. 종목코드
로 데이터를 로드
from 고객 a ,고객변경이력 b , :v_기준일자 AS 거래일자
■ CTAS(create table , AVG (a. 종가) AS 종가
where b . 고객번호 = a . 고객번호
… as select ) FROM 주식일별시세 a
and b . 변경순번 = (select max(변경순번)
문 ^ # 수행 WHERE :v_주식선물구분 = '주식'
from 고객변경이력
AND a.거래일자 BETWEEN ADD+MONTHS (:v_기준일자,-1) AND :v_기준일자
where 고객번호 = a . 고객번호
GROUP BY a. 종목코드
and 변경일자 <= '20101204') UNION ALL
② select b .고객 ID , b . 변경순번, b . 전화번호,b .주소,b .자녀수, b. 직업, SELECT a, 종목코드
b . 고객등급 , :[기준일자 AS 거래일자
from (select 고객 ID , max(변경순번) 변경순번 , AVG (a. 종가) AS 종가

from 고객변경이력 FROM 선물일별시세 a


WHERE :v_주식선물구분 = '선물'
where 변 경 일 자 〈= '20101204'
AND a. 거래일자 BETWEEN ADD_MONTHS (:v_기준일자, -1) AND :¥_기준일자
group by 고객 ID ) a
GROUP BY
,고객변경이력 b

과목
where b . 고객번호 = a . 고객번호 [실행]
and b . 변경순번 = a . 변경순번 — 세션 100

m

③ select 고객 ID , 변경순번,전화번호,주소,자녀수, 직업, 고객등급 EXEC :[주식선물구분 > ’주식’;

S Q L
from (select 고객 ID , 변경순번

고급활용 및 튜니 0
rank〇 over (partition by 고객ID order by 변경순번
— 세션 200
desc) rnum
'주 ^선 물 구 분 :
EXEC - ’선물’;
,전화번호,주소, 자녀수, 직업,고객등급
from 고객변경이력
where 변경일자〈
= '20101204')
where rnum = 1 ① TM 락 을 Row- X(SX) 방드무 요 청 하 고 대 기 한 다 .
④ select 고객 ID ,변경순번, 전화번호,주소,자녀수,직업, 고객등급 ② TX 락 을 Exclusive 모 드 로 요 청 하 고 대 기 한 다 .
from (select 고객 ID , 변경순번 ③ TM 락 을 Exclusive 모드 무 요 청 하 고 대 기 한 다 .
, max(변경순번) over (partition by 고객ID) 변경순번2
④ 정상적으로 수행된다.
, 전화번호, 주소,자녀수, 직업, 고객등급
from 고객변경이력
where 변 경 일 자 〈= '20101204')
where 변경순번 = 변경순번2

SQL 자격검정 실전문제 I 1 8 7 188 | SQL 자격검정 실전문제


in. SQL 고 급 활 용 및 튜닝

〇 o

,1 ::、 다 음 중 오 라 클 에 서 아라!와 같 이 n o lo g g in g 옵 션 과 a p p e n d 힌 트 틀 A ), ( B ) 두 SQL 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ?


다음 중 《
핵심정리
사 용 하 여 대 용 량 데 이 터 를 IN S B tT 할 때 극 적 인 성 능 개 선 효고!를 가져
아 래
오 는 원 리 를 설 명 한 것 으 로 가 장 부적절한 것 은 ?

(A )
아 래 UPDATE 급여지급 T
월급여 = (
S E T T.
alter table 수납 nologging; SELECT '월 급 여
FROM 사원 S
insert /*+ append */ into 수납 W H E R E S . 사원번호 = T. 사원번호
select * from 수납_ 임시
where 수납일시 between 『 20131204120000' and '20131204235959'
W H E R E T , 급여월 = '201101'
A N D E X IS T S (
① Lock을 A]용하지 않고 빠르게 입력한다. SELECT 1

② Redo와 Undo 발생량을 최소화한다. FROM 사원 S


W HERE S. 사원번호 = T. 사원번호
③ 데이터 입력이 가능한 빈 블록을 찾기 위해 FteeUst를 조화하지 않아도 된다.
A N D S. 부서코드 = '30'
④ 버퍼 캐시를 거치지 않고 데이터를 세그먼트 HWM 뒤쪽에 순차적으로

입력한다.

M E R G E IN T O 급여지급 T
U S IN G (
S E L E C T S . 사■원번호
,S . 월급여
대량의 데 이 터 를 일반
다 음 중 DML 튜 닝 방 안 으 로 가 장 부 적 절 한 것 은 ?
F R O M 사원 S
Update문 으 로 갱신하면
W H E R E S. 부서코드 = '30 '
상당 히 오랜 시간이 ① 대량 데이터에 대해 작업할 경우 인텍스를 Unusable 상태로 변경하고 ) S
소 요 될 수 있다. 다음과
작업한 후에 인덱스를 재생성하는 하는 것이 빠를 수 있다. O N (T. 급여월 = '201101'

같 은 이유 때문이며, A N D '사 원 번 호 = S. 사 원 번 호 )
② 대량의 데이터를 빠르게 UPDATE하기 위해 테이블을 nologging 모드로
Delete문일 때도 W H E N M ATCHED THEN
변경하고 작업을 시작한다. U P D A T E S E T T. 월급여 = S . 월급여
마찬가지다.
③ 오라클의 수정가능 조인 뷰는 키-보존 테이블에만 입력,수정,삭제가

■ 테이블 데이터를 허용된다.


① (A ) 와 (B ) 의 수정되는 데이터 건수는 같다.
@ 대량 데이터에 대한 U P D A T E 나 D E L E T E 문의 경우 기존 데이터를 임시
갱신하는 본연의 작업
② 둘 다 NL 방식으로 조인한다면,(A ) 가 (피보다 사원 테이블의 반복
■ 인 덱 스 데이터까지 테이블에 저장하고 테이블을 TRUNCATE한 후 임시 테이블을 이용해
엑세스가 많아 발생하는 I 八D도 많다.
갱신 다시 입력하는 것이 빠르다.
③ 둘 다 해시 방식으로 조인한다면, 아무리 처리량이 많아도 성능에 차이가
■ 버퍼 캐시에 없는

블 록 를 디스크에서 없다.

읽어 버퍼 캐시에 ④ (B ) 는 IN S E R T 처리도 같이 하도록 문장을 재구성할 수 있다.

적 재 한 후에 갱신
■ 내 부 적 으 로 Redo오卜

Undo 정보 생성
■ 블록 에 빈 공간이

없으면 새 블 록
할 당 (一 Row
Migration 발생)


190 I SQL 자격검정 실전문제


SQL 자격 검 정 실전 문 제 I 1 8 9
m . SQL 고급활용 및 튜닝

핵심정리 74 야간에 단독으로 이 을 수 행 하 는 대용량 배치 프 로 그 램 속 도 를 향 상 77 다음 중 아 래와 같이 주문 테이블을 생성하 고 주문 데이터가 월평균


시 키 려 고 한 다 . 다음 중 고 려 할 만 한 튜닝 방 안 으 로 가 장 부 적 절 한 것 은 ? 100만 건이라고 가정할 때, 보기 중 블록 I八) 측면에서 비효율이 없는

① 인덱스를 제거했다가 작업 완료 후 다시 생성한다. SQL을 2개 고 르 시 오 , (단 ,© 번 항목 일자 테이블에 대한 블 록 "〇 는


소 량 이 므 로 무 시 하 기 로 함)
② 수정 가능 조인 뷰 (Updatable Join View) 나 Merge문 을 활용한다.
③ Oracle이라면 update문을 수행하기 전에 테이블을 nologging 모드로
아 래
변경^*다.
④ SQL Server라면 최소 로깅 (minimal logging) 모드 Insert 기능을 create table 주문 (
고객번호 varchar2(12), 주문일자 varchar2(8),주문시각 varchar2(6), … , …
활용한다.
)
partition by range(주문일자■
) (
partition m201101 values less th an ('20110201')
,partition m201102 values less than('201103〇 r )
,partition m201103 values less th a n (r201104〇 r )
, partition m.201104 values less thanC 20110501')
, partition m201105 values less than('201106〇 r )
, partition m201106 values less th a n (’20110701’)
파티셔닝이 필요한 이유 75 다음 중 테이블 또 는 인덱스를 파 티 셔 닝 하 는 이 유 로 가 장 부 적 절 한 것 은 ? , partition mmaxval values less than(maxvalue)
■ 관 리 적 측면 :
파 티 션 단위 백업, ① 가용성 향상
추 가 , 삭 제 , 변경 ② 저장효율 개선
■ 성 능 적 측면 : ① select * from 주문 where 주문일자 between '20110101’ and ’20110331’
③ 조회성능 개선
파 티 션 단위 조회 및 ③ select * from 주문 where 주문일자 between '20110101' and ’20110131’
④ 경합 분산
DML 수 행 , 경합 및
union all
부하 분산
select * from 주문 where 주문일자 between '20110201' and '20110228'
union all
select * from 주문 where 주문일자 between '20110301' and
’■ ■ l ,
③ select * from 주 ^ where substr('주 § :
일자,1, 6) in (’201101’, ’201102’,
다음 중 파티션에 대한 설 명 으 로 가 장 부 적 절 한 것 은 ?
'201103')
④ select /*+ ordered use_ nl (b) */ b ,*
① 파티션은 애플리케이션에 투명하다. 즉 ,파티션되지 않은 테이블을
from 일자 a ,주문 b
새롭게 파티셔닝하더라도 쿼리는 수정하지 않아도 된다.
where a . 일자 between ’20110101’ and '201103311
② 기존에 사용되던 인덱스를 파티셔닝하면 그 인덱스를 액세스하던 일부
and b . 주문일자 = a. 일자
SQL 성능이 오히려 느려질 수 있다.

③ 파티션 칼럼에 대한 검색조건을 (변수가 아닌) 상수 값으로 제공해야


Partition Pruning0] 작동한다.
④ 파티션 단위로 인덱스를 재생성할 수 있다.

〇 O

SQL 자격검정 실전문제 I 1 9 1


m . SQL 고 급 활 용 및 튜닝

핵심정리 I 78 1 거래 테이블이 아 래 와 같 을 때, 다 음 중 LOCAL PREFIXED 파 티 션 인덱


핵심정리 8〇 다 음 중 배 치 ( Batch ) 프 로 그 램 튜 닝 방 안 으 로 가 장 부적절한 것 은 ?

스로 가장 적절한 것은?
① 시스템 사용자의 업무시간이 종료되자마자,동시에 수행 가능한 모든
파티션 인덱스 배치 프 로그램의 특징
배치 프로그램을 집중적으로 수행함으로써 총 소요시간을 단축한다.
■ Local Prefixed ■ 사용자와의 상호작용
파티션 인덱스 그래야 문제가 생겼을 때 대처할 수 있는 시간을 확보할 수 있다.
create ta b le 거래 ( 고객번호 v arch ar2 (10 ), 종목코드 v a rc h a r2 (2 0 ), 없이
■ Local NonPrefixed 거래일시 date, … ) ② 개별 프로그램 측면에서도 최초 응답속도보다는 전체 처리속도 최적화
■ 대량의 데 이터를
파■티션 인막스 p a r tit io n by ra n g e ( 거래일시) ( 를 목표로 설정해야 한다.
처리하는
p a r tit io n p2010 v a lu e s less th a n (to _ d a te ( ,
201101〇 r i yyyym m dd,
))
■ Global Prefixed ③ 파티션과 병렬처리를 적절히 활용한다.
, p a r tit io n p2011 v a lu e s less th a n (to _ d a te ('20120101', ,
yyyym m dd,
)) ■ 일련의 작 업 들 을 묶어
파티션 인덱스 , p a r tit io n p2012 v a lu e s less th an (to _d ate ('2 0 1 3 0 1 〇 r , y yy ym m dd')) ■ 정 기 적 으 로 반복 ④ 여러 배치 프로그램에서 공통적으로 사용하는 집합을 정의해 이를 임시
■ Global NonPrefixed , p a r tit io n p2013 v a lu e s less th a n (to _ d a te (’201401 〇 l ’, yyy ym m dd'))
수행하거나 테이블로 생성한다.
파티션 인덱스 (一 , p a r tit io n p m ax v a lu e s less th a n (m a x v a lu e )
■ 정해진 규 칙 에 따라
Oracle Not Support) 天卜동으로 수행
■ 비파티션
(NonPartitioned) ① create index 거래_ N1 on 거래(거래일시) local;
인덱스
② create index 거래_ N2 on 거래(고객번호) local;
③ create index 거래_ N3 on 거래(종목코드) local;
④ create index 거래_ N4 on 거래(종목코드,거래일시) local; 81 다 음 중 오 라 클 병렬 프 로 세 싱 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ?

① 일련의 처리 과정이 모두 병렬로 진행되도록 해야 병렬 효과를 극대화


할 수 있다.
79 다 음 중 아 래 DDL 스 크 립 트 를 보 고 ,보 기 중 거래 J D X 1과 거 래 」DX2
② 옵티마이저는 병렬 프로세스 간 통신랑을 최소화하려고 노력한다.
인 덱 스 각각에 해 당 하 는 가 장 적 절 한 인텍스 유 형 을 2개 고 르 시 오 .
③ 병렬 DML 시 ,Exclusive 모드 TM Lock이 걸려 해당 테이블을 갱신

아래 하는 다른 트랜잭션이 모두 블록킹되므로 주의해야 한다.


④ 병렬 Update는 Redo Log를 생성하지 않는다.
c r e a te t a b le 거래 (
계좌번호 n u m b e r , 상품번호 v a rc h a r 2 (6 )

거래일자 v a r c h a r 2 (8 ) , 거래량 num ber, 거래금액 num ber )
p a r t it io n b y r a n g e (거래일자) (
p a r t it io n p i v a lu e s le s s th a n ('2 0 1 1 0 1 〇 r )
, p a r t it io n p2 v a lu e s le s s th a n ('2 0 1 2 0 1 〇 r )
, p a r t it io n p x v a lu e s le s s t h a n ( m a x v a lu e )

c re a te in d e x 거래_ i d x l on 거래(거래일자,상품번호) GLOBAL


p a r t it io n b y r a n g e (거래일자) (
p a r t it io n p i v a lu e s less t h a n ('2 0 i2 0 1 0 1 ,)
, p a r t it io n p x v a lu e s le s s t h a n ( m a x v a lu e )
);

create index 거래_ id x 2 on 거래(계좌번호,거래일자) LOCAL;

① Global Prefixed
② Global Nonprefixed
③ Local Prefixed

(4) Local Nonprefixed

SQL 자격검정 실전문제 I 1 9 3 194 I SQL 자격검정 실전문제


m. SQL 고급활용 및 튜닝

핵심정리 I 82 1 주 문 테 이 블 은 주 문 일 자 기 준 으 로 Range 파 티 셔 닝 ,고 객 번 호 기 준 으 로

Hash 서 브 파 티 셔 닝 되어 있 는 상 태 다 . 고 객 테 이 블 은 비 파 티 션

pq_distiribute 힌트를 ( Non- Partitioned ) 테 이 블 이 다 . 등 록 된 고 객 수 는 10 0만 명 이 고 ,월

사용함으로써 평 균 주 문 레 코 드 는 2 ,0 0 0 만 건이다. 이 상 태 에 서 두 테 이 블 을 조 인 하 는
옵티마이저의 선택을 병렬 쿼 리 를 수 행 했 더 니 평 소 보 다 3 배 이 상 오 래 걸 렸 고 ,실 행 계 획 을
무 시 하 고 사 용 자 가 직접 확 인 해 보 니 아 래 와 같 았 다 . Oracle 에 서 이 병렬 쿼 리 의 속 도 를 향 상
조 인 을 위 한 데이터 분배
시키기 위해 추 가 해 야 할 힌트로 가 장 적 절 한 것 은 ?
방 식 을 결 정 할 수 있다.

아 래
■ 옵티마이저가

파티션된 테이블을 select /*+ ordered use_hash(o) parallel(c 2) parallel(o 2) */


o. 고 객 번 호 ,sum(o. 주 문 금 액 ),min(c, 등 급 코 드 )
적절히 활 용 하 지
from 고객 c, 주 문 o
못 하 고 동적 재 분할을
where 〇 ,고 객 번 호 = c. 고 객 번 호
시도할 때 and 〇 , 주 문 일 자 between ’20100901’ and ’20100930’
■ 기존 파 티 션 키를 group by o, 고 객 번 호
무 시 하 고 다른 키
값 으 로 동적
Id 1 Operation | Name | Pstartl Pstop TQ |IN-OUT |
재분할하고 싶을 때
■ 통계정보가 0 | SELECT STATEMENT | 1 1 1 1 1
부정확하거나 1 | PX COORDINATOR | 1 1 1 ! 1
통 계 정 보 를 제공하기 2 | PX SEND QC (RANDOM) ]:
TQ10003 | i Ql,〇 3 p -)s 1
3 | SORT GROUP BY | 1 1 1 Ql,〇 3 PCWP |
어 려 운 상 황 (ᅳ
4 1 PX RECEIVE | 1 I 1 Q1.03 PCWP |
옵 티 마 이 저 가 잘못된
5 I PX SEND HA況 |:
TQ10002 | | 1 Ql,〇 2 p-〉
p 1
판 단 을 하기 쉬운 6 I SORT GROUP BY | 1 1 J Q1.02 PCWP |
상황) 에서 7 I HASH JOIN | 1 I Ql,02 | PCWP |
8 | PX RECEIVE 1 | Ql,02 | PCWP |
실행계획을
9 I PX SEND HASH TQ10000 |
: | 1 切 ,〇 〇 I P-)P 1
고정시키고자 할 때
10 I PX BLOCK ITERATOR . 1 1 _ I PCWC
■ 기타 여러 가지 이유로 11 1 TABLE ACCESS FULL| 고객 1 i Q1.00 PCWP |
데이터 분배 방 식 을 12 | PX RECEIVE [ 1 1 切,02 PCWP |
13 I PX 湖ND HASH TQ10001 |
: 1 Qi,〇 l p-)p 1
변경하고자 할 때
14 | PX BLOCK ITERATOR 1 1 8 | Q1.01 | PCWC I
15 I TABLE ACCESS FULLl 주문 | 1 8 1 Q1.01 PCWP |

① pq_ distribute(o none none)


② pq_ distribute(o none broadcast)
③ pq_ distribute(o partition none)
@ pq_ distribute(o hash hash)

SQL 자 격검 정 실 전 문 제 I 1 9 5
실기문제 1

아래 좌측과 같은 월별지점매출 테이블을 읽어서 우측과 같은 형태,즉 각 지점별로 판매월과 함께


증가하는 누적매출 (ru nnin g to ta l ) 을 구하는 S Q L 을,아래 두 가지 방식으로 작성하시오.

SQL 전문가 실기문제 ① 윈도우 함수를 이용한 방식으로 작성


② 원도우 함수나 스칼라 서브쿼리를 지원하지 않는 DBMS 에서 활용할 수 있는 방식으로 작성
(단 ,전체범위처리에 최적화된 방식으로 작성할 것)

지3 e 매월 매출 지정 e 매월 매출 누적매書 |
1 10 1 521 1 10 1 SZ1 521
2 10 1 684 2 10 2 684 1205
3 10 3 590 3 10 3 590 1795
4 20 1 53? A 20 1 S 37 537
5 20 2 650 5 20 2 650 1187
6 20 3 500 6 20 3 500 1687
7 20 4 919 7 20 4 919 2606
누적 매출
8 20 5 658 8 20 5 858 3264
9 30 1 631 9 30 1 831 631
10 30 2 736 10 30 2 738 1367
11 30 3 513 11 30 3 513 1880
12 30 4 970 12 30 4 970 2850
13 30 B 939 13 30 5 939 3789
141 30 6 666 U 30 8 6B6 4455

198 I SQL 자격검정 실전문제


SQL 전 문 가 실기문제

실기문제 2 실기문제 3

아래 S Q L 과 트레이스 결과를 분석해서 개선된 S Q L 을 작성하시오. 같은 데이터를 두 번 읽지 않고도 같은 결과집합을 출력하도록 아래 두 S Q L 을 각각 재작성하시오.
① 원하는 실행계획이 정확히 나오도록 힌트도 함께 기술할 것 (단 ,부분범위처리 불가능한 상황임. 즉, 전체범위처리 기준으로 튜닝할 것)
② 최적의 인덱스 구성방안도 함께 제시함 것 - ^주문일자’의 데이터 타입은 문자형 8자리
(성능개선에 도움이 되지 않는,필요 이상의 컬럼을 추가하는 것은 감점 요인이므로 주의) - 거래 업체는 10,0 00 개
- 월평균 주문건수는 100만 건
아 래

[ SQL 문 ] 아 래

[ SQL1 ]
s e le c t 〇 . 주 문 일 시 , 〇 . 주 문 번 호 ,c . 고 객 번 호 , c . 고 객 명 , c. 연 락 처 ,〇 , 주 문 금 액 , 〇 .배송지
fro m 고객 c ,주 문 〇
select b .주문 번 호 ,b. 업체번호, b .주문일자,b .주문금액, a .총주문횟수, a. 평균주문금액,a. 최대주문금액
w h e re 〇 , 주문일시 b e tw e e n t o _ d a t e ( ’2 0 1 5 0 3 0 1 ’ ,’y y y y m m d d ’)
from (
a n d to _ d a te ('2 0 1 5 0 3 1 4 2 3 5 9 5 9 ', 'y y y y m m d d h h 2 4 m is s ')
select 업체번호,c o u n t s 총주문횟수,avg(주문금액) 평균주문금액, max(주문금액) 최대주문금액
and o. 고 객 번 호 = c. 고 객 번 호
from 주■
문:
and c. 거 주 지 역 코 드 | | c . 고객명 i n ( '0 2 김 철 수 ’ , '0 5 흥 길 동 1)
where 주문일자 like '201509%'
o r d e r b y o . 주 문 일 시 ,c. 고객명
group by 업체번호
) a, 주문 b
[ SQL 트레이스 ]
where b. 업체 번호 = a. 업체 번호
and b .주문일자 like '201509%'
Call Count CPU Time Elapsed Time Disk Query Current Rows
order by a. 평균주문금액 desc

Parse 1 0.000 0.002 0 0 0 0


Execute 1 0.000 0.000 0 0 0 0
[ SQL2 ]
Fetch 2 0.828 7.136 65296 114341 0 5

select b .주문번호,b, 업체번호,b .주문일자, b .주문금액


Total 4 0.828 7,138 65296 114341 0 5
from (
select 업체번호,max(주문번호) 마자막주문번호
Rows Row Source Operation
from 주문
where 주문일자 like '201509%'
5 SORT ORDER BY (cr=114341 pr=65296 pw=0 time=0 us cost=21342)
group by 업체번호
5 HASH JOIN (cr=114341 pr=65296 pw-0 time=28 us cost=21127)
) a , 주문 b
20 TABLE ACCESS FULL 고객 (cr=76929 pr=36924 pw=0 time-38 us cost-21019)
where b. 업 체번호 = a. 업체 번호
45185 PARTITION RANGE SINGLE PARTITION:1 1 (cr=37412 pr=28372 pw=0 time=33696 us cost-107)
and b. 주문번호 = a. 마지막주문번호
45185 TABLE ACCESS FULL 주 문 PARTITION:1 1 (cr-37412 pr=28372 pw-0 time-22209 us cost=107)

[ 인텍스 구성 ]
고객 테 이 블
고 객 _ P K :고 객 번 호

주 문 테이블
주 문 _PK :주 문 번 호

2 00 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 1 9 9
SQL 전문가 실기문제

실기문제 4 실기문제 5

주문 테이블 구조는 아래와 같으며,파티셔닝하지 않았다. 데이터 모델은 아래와 같다.

아 래

COLUMN NAME 【
S_PK Nullable DATA TYPE
주문번호 Y NO NUMBER
고객번호 NO NUMBER
주문일시 NO DATE
주문금액 NO NUMBER
우편번호 NO VARCHAR2(6)
배송지 NO VARCHAR2(100)
연락처 YES VARCHAR2(14)
메모 YES VARCHAR2(100)

하루 주문 건수는 평균 2만 건이며,10년치 데이터가 저장돼 있다.


고 객 상 태 코 드 = ’A O 인 고 객 을 조 회 해 서 등 ■ 일 시 . 고 객 번 호 순 으 로 춤 력 하 고 자 한 다 . 출 력 하 고 자
주문 데이터를 조회하는 화면은 아래와 같다. 고객번호는 입력하지 않을 수 있지만,주문일자는
하는 항목은 아래 그 리 드 ( G rid ) 와 같고, 가장 우측 최근접속일시는 최근 한 담 이내 마지막 접속
항상 입력해야 한다. 주문일자로는 보통 3 일을 입력하며, 최대 1주일까지 입력할 수 있다.
일시를 의미하며, 접속이력이 없으면 Null 을 출 력 한 다 .
① 조회 버튼을 누를 때 수행할 최적의 S Q L 을 작성하시오.
^ 한달 전 날짜를 구하는 함 수 누 tru n c ( ad d _ m onths ( s y s d a t e , - 1 ))
개발 정책 상, D ynam ic S Q L 은 사용할 수 없다. 주문일시 기준 역순으로 정렬해야 하며,
부분범위처리는 허용되지 않는다. 즉,조회된 결과 집합 전체를 그리드( G rid 》에 출력해야 한다. 1조 회 /다 음 ’ 버 튼 을 누 르 면 , 매 번 20건씩 데이터를 읽어 그리드 호ᅡ면에 추 가 ( A p p e n d ) 하 는 방식
② 최적의 인덱스 구성안을 제시하시오.
으로 화면 페이징 처 리 를 구 현 해 야 하 고 , 면ᅡ일로 출 력 ' 버 튼 을 누 르 면 전체 조회 데이터를 파일로

일괄 저장하도록 구현해야 한다.

두 조회 버튼에 대한 ① 최적의 SQ L 을 각 각 작 성 하 고 . ② 최 적 의 인 덱 스 구 성 안 을 제 시 하 시 오 .

아 래
고적변호 주문일자 j 2014,12.11 - I 2014.12.13 히

AC상 태 고 객 조 회 _ ■逐•技!/다S I 탁일 s 출력

— 표적현 등톡원시 ■ ■연환쳐 . > ᅳ…… 척 근 s 속일 A厂 ;


■률 ■

m m m m m m m
m m m
■■■■■ 圖 ■ _■ ■■ ■■
wmmm
會력 a 수 |ᅮ__〇

SQL 자 격 검 정 실 전 문 제 I 201 2 0 2 I SQL 자격검정 실전문제


SQL 전문가 실기문제

아 래

실기문제 6
【요건 】

1- 각 조 회 버 # 에 대 한 성능요거 주 문 , 배 송 ,고 객 정 보 를 읽 어 주 문 배 송 테 이 블 에 입 력 하 는 야 간 배 치 ( Batch ) 프 로 그 램 을 튜 닝 하 려 고

① 조 회 /다 음 : 응 답 속 도 ( R e s p o n s e T i m e ) 를 빠르게 튜 닝 하 는 것이 가 장 중 요 한 다 . 대 상 주 문 데 이 터 는 2 아 6 년 6 월 부 터 8 월 까 지 3 개 월 치 다 . 월 별 주 문 건 수 는 1 ,0 0 0 만 건 이 다 .

② 파 일 로 출력 : 전체 처 리 속 도 와 시스템 리소스 사 용 량 을 최 소 화 하 는 것이 가 장 중 요 월별 배 송건수는 900만 건이다. 배송은 주문이 완료된 후에 시작된다. 고객 수 는 500만 명이다.

2 . (조 회 /다 옥 버튼 큼럭 시) 화며 페이징 처리 요거

① 조 회 /다 음 버 튼 을 계속 눌러 뒤쪽 페 이 지 로 많이 이 동 하 는 경 우가 간혹 있 지 만 ,대개 3 페이지 이내만

조 회 하 고 멈추 는 업무임(수 페 이 지 마 다 인덱스 스 캔 시 작 점 을 찾기 위해 U N I O N A L L 방 식 으 로 복 잡

하게 구현 하 지 않 아 도 된 다 는 의미임)

② 페이징 방식으로 조회 하 는 동 안 새 로운 데이터가 등 록 되 거 나 기존 데이터가 삭 제 되 는 경우를 고려하지

않아도 됨
③ 향 후에 혹시 인덱스 구성이 변 경 되 더 라 도 결 과 집 합 은 정확히 보 장 되 도 록 구 현 해 야 함

3. V ie w M e r g i n g , J o i n P r e d ic a t e P u s h d o w n 등 Q u e r y T r a n s f o r m a t i o n 이 작동하지 않는 이B M S 버 전을

사 용 중임

4. 인 덱스 설계 시, 성능에 도움이 안 되는 컬 럼 을 추 가 하 면 오히려 감점이 될 수 있 으 므 로 주의

5. 병렬처리 불 가

【데이터 분포 및 테이블 구성 】

고객 테 이 블

- 비파티 션

- 총 고 객 수 = 10만명
- 고 객 상 태 코 드 'AC ’인 고 객 수 = 2만명

고객접속이력 테이블

- 총 데이터 건수 : 1,
000만건

- 접속일시 기준 월단위 R a n g e 파 티션

- 고 객 접속이력_ P K 은 L o c a l P a r t it io n e d In d e x

2 0 4 I SQL 자격검정 실전문제


SQL 자격검정 실전문제 I 2 0 3
SQL 전 문 가 실 기 문 제

아 래 병 렬 SQL 과 예 상 실 행 계 획 을 분 석 해 가 장 빠 르 게 수 행 할 수 있 도 록 SQL 을 재 작 성 하 시 오 .

옵 티 마 이 저 힌 트 변 경 이 필 요 하 면 SQL 문 장 에 정 확 히 기술

야 간 배 치 용 SQL 이 므 로 다 른 트 랜 잭 션 에 의 한 동 시 DML 없 음

세 션 파 라 미 터 변 경 이 필 요 하 면 ,설 정 값 제시

= . 인 덱 스 구 성 변 경 이 필 요 하 면 ,변 경 안 제 시

파 티 션 구 성 은 변경 불 가
시 스 템 운 영 정 책 상 허 용 된 최 대 Parallel Degree = 4

in s e r t in to 주 문 배 송 t

s e le c t / * + le a d in g ( o ) u s e _ n l( d ) in d e x ( d ) f u l l ( o ) p a r a l l e l ( o 4) * /

〇 . 주 문 번 호 , 〇 . 주 문 일 자 , 〇 . 주 문 상 품 수 , 〇 . 주■문상태코 드 , 〇 . 주 문 고 객 번 호
, (s e le c t 고객명 f r o m 고객 w h e r e 고 객 번 호 = 〇 . 주 문 고 객 번 호 ) 고객명
,d . 배 송 번 호 , d . 배 송 일 자 , d . 배 송 상 태 코 드 , d . 배 송 업 체 번 호 , d . 배 송 기 사 연 락 처
fro m

w h e re 〇 . T i i r 일자 b e tw e e n r2 0 1 6 0 6 〇 r and '2 0 1 6 0 8 3 1 '

and o. 주 문 번 호 = d . 주 문 번 호

Id | Operation | Name Rows | P start | Pstop | TQ |IN-OUT |

1 0 | INSERT STATEMENT i 30M | 1 1 1 I

1 11 LOAD TABLE CONVENTIONAL 주문배송 i 1 1 1 1 1

1 2 | TABLE ACCESS BY INDEX ROWID 고객 i 1 1 1 1 1


1^ 3 1 INDEX UNIQUE SCAN 고 객 _PK | 1 1 1 1 1

1 4 | PX COORDINATOR 1 1 1 1 1 1

1 5 | PX SEND QC (RANDOM) :
TQ10000 | 30M | 1 1 Q l,
〇〇 P->S l

1 6 | NESTED LOOPS i 30M | 1 1 Q l ,〇 〇 PCWP |

1 7 | NESTED LOOPS i 30M | 1 1 Q1,00 PCWP |

1 8 | PX BLOCK ITERATOR i 30M | 62 | 64 Q l ,〇 〇 1 PCWC |


1과
,9 1 乂□ I 30M | 62 | 64 1 PCWP |
TABLE ACCESS FULL 1 Q l ,〇 〇

1 10 I PARTITION RANGE ALL 1 1 1 1 1 65 | Q l ,〇 〇 PCWP |


1다 11 1 INDEX RANGE SCAN 배송-N1 | 1 1 65 Q l ,〇 〇 PCWP |
1 1

1 12 | TABLE ACCESS BY LOCAL INDEX ROWID 배송 1 1 1 1 1 1 1 Q l ,〇 〇 1 PCWP |

Predicate In form ation (identified by operation id) I

3 - a c c e s s (" 고 객 번 호 ”= :B 1 )

9 一 f ilt e r C O " / 주 문 일 자 ”〈= ’2 0 1 6 0 8 3 1 》

11 - a c c e s s C ’O ”. " 주 문 번 호 "= ”D M." 주 문 번 호 ”)

SQL 자격검정 실전문제 I 2 0 5


국* 가 • 공 • 인 국•가•공■인
SQL Developer


SQL Professional

^9 ^
.■지쑤 ■
■田편

I
S-WRW ’作
’,*1
@ 출하.

SQL
■ 1 □ 〇
자 겨 거 정 | ^ |

실전문제 古

정답 및 해설

■■

《 data 한국데이터진흥원
과목 I . 데이터 모델링의 이해

제 1장 . 데이터 모델링의 이해

과목 I . 데이터 모델링의 이해 212

제 1장 . 데 이터 모 델 링 의 이해 .• 212 1. ②
해설 : 모 델 링 은 단지 시스템 구현 만 을 위해 수행 하 는 타스크가 아니며, 시스템 구현 을 포함 한 업무분석
제 2장. 데 이터 모 델 과 성 능 217
및 업무형상화를 하는 목적도 있음.

2. ③
해설 : 데이터 모델링을 하는 주요한 이유는 업무정보를 구성하는 기초가 되는 정보들에 대해 일정한 표기법에
과목 I . S Q L 기본 및 활용 … 222 의해 표현함으로써 정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석 하 는 것이 첫 번째
목 적이다. 두 번째는 분석된 모 델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터관리에
제 1장 . SQL 기 본 ........................ 222
사용하기 위한 것이 두 번째 목적이다. 다시 말하면, 데이터모델링이라는 것은 단지 데이터베이스만을
제 2장 . SQL 활 용 ........................ 235 구축 하기 위한 용도로 쓰이는 것이 아니라 데이터모델링 자체로서 업무를 설명하고 분석하는 부분에

서도 매우 중 요한 의미를 가지고 있다고 할 수 있다.


저 "장 . SQL 최 적 화 기 본 원리 251

3. ③
해설 : 데이터모델링을 할 때 유 의할 사항은 중 복 성 ,비유연성, 비일관성 등이다.
유 의 사 항 1 : 중 복 (Duplication )
과목 1 . S Q L 고급활용 및 튜닝 •,
•,
• 254 데이터 모 델은 같은 데이터를 사용하 는 사람, 시 간 ,그리고 장 소를 파악하는데 도움을
줌으로써 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못 을 하지 않도록 한다.
제 1장 . 아 키 텍 처 기 반 튜닝 원리 •+•••• 254
유 의 사 항 2 :비 유 연 성 (Inflexibility )
저12장. Lock 과 트 랜 잭 션 동 시 성 제 어 257 데이터 모 델을 어떻게 설계했느냐에 따라 사소 한 업무변화에도 데이터 모델이 수시로

변경됨으로써 유지보수의 어려움을 가중시킬 수 있다. 데이터의 정의를 데이터의 사용


제 3장 . 옵 티 아 미 저 원리 ...................... 259
프로세스와 분리함으로써 데이터 모델링은 데이터 혹은 프로세스의 작은 변화가 애플리
제 4 장 . 인 텍 스 와 조인 ......................... 261
케이션과 데이터베이스에 중 대한 변화를 일으킬 수 있는 가능성을 줄인다.

제 5장 . 고 급 SQL 튜닝 ........................ 265 유 의 사 항 3 :비일관성 (Inconsistency)


데이터의 중복이 없더라도 비일관성은 발생할 수 있는데,예를 들면 신용 상태에 대한

갱신 없이 고객의 납부 이력 정보를 갱신하는 경우이다. 개발자가 서로 연관된 다른


데이터와 모순된다는 고려 없이 일련의 데이터를 수정할 수 있기 때문에 이와 같은 문제

가 발생 할 수 있다. 데이터 모델링 을 할 때 데이터와 데이터 간의 상호 연관 관계에


S Q L 전문가 실기문제 정답 및 해설 267
대해 명확하게 정의한다면 이러한 위험을 사전에 예방하는데 도 움을 줄 수 있다.
사 용 자 가 처리하는 프로세스 혹은 이와 관련된 프 로그램과 테이블의 연계성을 높 이는

것은 데이터 모델이 업무 변경에 대해 취약하게 만드는 단점에 해당한다.

G ©

SQL 자격검정 실전문제 I 2 1 3 2 1 4 I SQL 자격검정 실전문제


정답 및 해설

4. ② 10. ③
해설 : 데이터 모델링 시의 유의점에 대한 사 항 중 비유연 성 (Inflexibility ) 에 대한 설명이다. 해설 : 엔터티의 특징 은 다음과 같다.
데이터 모델을 어떻게 설계했느냐에 따라 사소한 업무변화에도 데이터 모델이 수시로 변경됨으로써 ^ 첫 번째,반드시 해당 업무에서 필요하고 관 리 하 고 자 하는 정보이어야 한다.
유지보수의 어려움을 가중시킬 수 있다. 데이터의 정의를 데이터의 사용 프 로 세 스 와 분리함으로써 (예. 환자, 토익의 응 시 횟 수 …)
데이터 모델링은 데이터 혹은 프로세스의 작은 변화가 애플리케이션과 데이터베이스에 중대한 변화 辭 두 번째, 유 일 한 식별자에 의해 식별이 가능해야 한다.
를 일으킬 수 있는 가능성을 줄인다. ^ 세 번째, 영속적으로 존재 하 는 (두 개 이상의) 인스턴스의 집합이어야 한다.

r 한 개',가 아니라 "두 개 이상")


5. ① •못 네 번째, 엔터티는 업무 프로세스에 의해 이용되어야 한다.
해설 : 전사적 데이터 모델링이나 EA 수립 시에 많이 하며, 추 상화 수준이 높고 업무 중심적이면서 포괄적인 輕 다섯 번째, 엔터티는 반드시 속성이 있어야 한디-.
수준의 모델링을 진행하는 것을 개념적 데이터 모델링 이라고 하며,실제로 데이터베이스에 이식할 수 ^ 여섯 번째,엔터티는 다른 엔터티와 최소 한 개 이상의 관 계 가 있어야 한디-.
있도록 성능, 저장 등의 물리적인 성격을 고려한 데이터 모델링 방식은 물리적 데이터 모델링이라고 한다.

11. ①
6. ② 해 설 : 엔터티의 중요한 특징의 하나는 다른 엔터티와 관계를 가져야 한다는 것이다. 그러나 공통코드,통계성
해설 : 데이터베이스 스키마 구 조는 3단계로 구분 되 고 각각 은 상호 독립적인 의미를 가지고 고 유한 기능을 엔터티의 경우는 관계 를 생 략할 수 있다.
가진다. 그 중 통합관점의 스 키 마 구 조 를 표현 한 것을 개 념 스 키 마 (Conceptual Schema) 라고 하며,
데이터 모델링은 통합관점의 뷰를 가지고 있는 개념 스키 마 를 만들어가는 과정으로 이해할 수 있디-. 12. ①
해설 : 기 본 엔 터 티 (키 엔 터 티 )란 그 업무에 원래 존재 하 는 정보로서 다른 엔터티와의 관계에 의해 생성되지
7. ④ 않고 독립적으로 생성이 가능하고 자신은 타 엔터티의 부모의 역할을 하게 된다. 다른 엔터티로부터
해설 : 부모 엔터티에 데이터가 입력될 때 자식 엔터티에 해당 값이 존재하는지의 여부와 상관없이 입력될 주식별자를 상속받지 않고 자신의 고유한 주식별자를 가지게 된다. 예를 들어 사 원 ,부서,고객,상품,
수 있는 구조로 표현되어 있기 때문에,고객 엔터티에 새로 운 고객번호 데이터를 입력하는 것은 주문 자재 등이 기본엔티티가 될 수 있다.
엔터티에 해당 고객 번 호 가 존재하고 있는지의 여부와 상관없이 가능하다.

13. ①
8, ④ 해설 : 엔터티를 명명하는 일반적인 기준은 다 음과 같다. 용 어를 사용 하 는 모든 표기법이 다 그렇듯이 첫
해설 : 엔터티를 어디에 배치하는가에 대한 문제는 필수사항은 아니지만 데이터 모델링 툴 사용 여부와 상관없이 번째는 가능하면 현업업무에서 사용하는 용어를 사용한다. 두 번째는 가능하면 약어를 사용하지 않는
데이터 모델의 가독성 측면에서 중요한 문제이다. 일반적으로 사람의 눈은 왼쪽에서 오 른 쪽 ,위쪽에서 다. 세 번째는 단수명사를 사용한다. 네 번째는 모든 엔터티를 통틀어서 유일하게 이름이 부여되어야
아래쪽으로 이동하는 경향이 있기 때문에, 데이터 모 델 링 에 서 도 가장 중 요 한 엔터티를 왼쪽 상단에 한다. 다섯 번째는 엔터티 생 성 의미대로 이름을 부여한다.
배치하고,이것을 중심으로 다른 엔터티를 나열하면서 전개하면 사람의 눈이 따라가기에 편리한 데이터

모 델을 작 성 할 수 있다. 해당 업무에서 가장 중 요 한 엔터 티 는 왼쪽 상단에서 조 금 아래 쪽 중앙에 14. ^ ( A T T R IB U T E )

배치하여 전체 엔터티와 어울릴 수 있도록 하면 향후 관련 엔터티와 관계 선 을 연결할 때 선이 꼬이지 해설 : 속성이란 사전적인 의미로는 사물(事物)의 성질,특징 또는 본질적인 성질이다. 그것이 없다면 실체를
않고 효 과적으로 배치할 수 있게 된다. 생 각할 수 없는 것으로 정의할 수 있다. 본질적 속 성 이 란 어떤 사물 또는 개념에 없어서는 안 될
징표(徵表)의 전부이다. 이 징표는 사물이나 개념이 어떤 것인지를 나타내고 그것을 다른 것과 구별하
9. ② 는 성질이라고 할 수 있다. 이런 사전적인 정의 외에 데이터모델링 관점에서 속성을 정의하자면, "업무
해설 : 병원은 S 병원1개이므로 엔터티로 성립되지 않으며, 이름, 주소는 엔터티의 속성으로 인식될 수 있다. 에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단 위 ”
엔터티는 2개 이상의 속 성과 2개 이상의 인스턴스를 가져 소위 면적으로 표현될 수 있어야 비로소 로 정의할 수 있다. 업무상 관 리 가 가능한 최소의 의미 단위로 생 각할 수 있고, 이것은 엔터티에서
기본적인 엔터티의 자격을 갖췄다 할 수 있으므로 ‘여러 명’의 복수 인스턴스와 이름, 주소 등의 복수 한 분 야 를 담당하고 있다.
속 성을 가진 ᅳ환자’가 엔터티로 가장 적절하다고 할 수 있다.

15. ③

해설 : 하나의 인스턴스에서 각각의 속 성 은 한 개의 속성 값 을 가 져야 한다.


정답 및 해설

SQL 자격검정 실전문제 I 2 1 5 216 I SQL 자격검정 실전문제


정 답 및 해설

16. ③ 26, ④

해설 : 이자는 계산된 값으로 파생속성이 맞 지만,이자율은 원래 가지고 있어야 하는 속성이므로 기본속성에 해설 : 사 번은 업무적으로 의미 있는 식별자로 시스템적으로 부여된 인조식 별자가 아니 라 일반적으로 사원
해당한다. 인스턴스의 탄생과 함께 업무적으로 부여되는 사원 인스턴스의 본질적인 속성에 해당한다 할 수 있기

때문에 본 질 식 별 자 로 볼 수 있다.
17. ①

해설 : 데이터를 조회할 때 빠른 성능을 할 수 있도록 하기 위해 원래 속성의 값을 계산하여 저장할 수 있도록 27. ②


만든 속 성을 파 생 속 성 (Derived Attr 比>ute ) 이라 한다 해설 : 명칭,내역등과 같이 이름으로 기술되는 것들은 주식별자로 지정하기에 적절하지 않디-. 특히 사람의
이름은 동명이인이 있을 수 있기 때문에 주식별자로서 더더욱 부적절하다.
18. ④

해설 : 각 엔터티(테이블)의 속성에 대해서 어떤 유형의 값이 들어가는지를 정의하는 개념은 도메인(Domain)에 28. ②


해당함 해설 : 주 식 별 자 를 도출하기 위한 기준은 다음과 같다.
- 해당 업무에서 자주 이용되는 속 성 을 주식별자로 지정한다.
19. ③ - 명칭, 내역 등 과 같이 이름으로 기술되는 것들은 가능하면 주 식별자로 지정하지 않는다.
해설 : 속성의 명칭은 애매모호하지 않게, 복합 명사를 사용하여 구체적으로 명명함으로써 전체 데이터모델에서 - 복합 으 로 주 식 별 자 로 구 성할 경우 너무 많은 속성이 포함되지 않도록 한다.
유일 성 을 확보하는 것이 반정규화, 통합 등의 작 업을 할 때 혼 란을 방 지 할 수 있는 방법이 됨 자주 수정되는 속성이 주식별자가 되면 자식 엔터티에 대한 연쇄 수정이 필요하여 시스템 상에 부하의
원인이 될 수 있기 때문에 주식별자로서 적합하지 않다.
20. ③,④
해설 : 데이터모델링에서는 존재적 관계와 행위에 의한 관계를 구분하는 표기법이 없으며,이 에 서 는 연관관 29. ④

계와 의존관계에 대해 다른 표기법을 가지고 표현하게 되어 있다. 해설 : 부모엔터티의 주식별자를 자식엔터티에서 받아 손자엔터티까지 계속 흘려 보내기 위해서는 식별자관
계를 고려 해 야 한다, ③의 경우는 비식별자관계를 선택하는 기준으로 고려하기에 가장 마지막으로
21. ② 고려 할 만 한 비중을 갖는다고 할 수 있다. 즉 ,비식별자관계의 선택이 단순히 SQL 문장의 복잡 도 를
해설 : 관계 표 기 법 은 관 계 명 ,관계차수, 선택성(선택사양)의 3가지 개념으로 표현한다. 낮 추는 목적에서 고려되는 것은 바람직하지 않음을 의미한다.

22. ② 30. ②

해설 : 관계의 기수성을 나타내는 개념은 관계차수에 해당함 해설 : 엔터티별로 데이터의 생명주기 (LIFE CYCLE)를 다르게 관리할 경우,예를 들어 부모엔터티의 인스턴스
가 자식의 엔터티와 관계를 가지고 있었지만 자식만 남겨두고 먼저 소멸될 수 있는 경우 비식별자관계
23. ③ 로 연결하는 것이 적절하다. 부모엔터티의 인스턴스가 자식 엔터티와 같이 소멸되는 경우는 비식별자

해설 : ③ 업무기술서, 장표에 관 계 연 결 을 가능하게 하는 동 사 (Verb)가 있는가? 가 되어야 한다. 관계 보 다 식별자관계로 정의하는 것이 더 적합하다.

동 사 는 관 계를 서술하는 업무기술서의 가장 중요 한 사항이다.

24. ④

해설 : 4개의 항목 모두 관 계 를 정의할 때 체크 해 야 할 항목이다.

25. ④

해설 : • 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구 분되어야 한다,

• 주 식별자를 구성하 는 속성의 수는 유일 성 을 만족 하 는 최소의 수 가 되어야 한다.


• 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.

• 주 식 별 자 가 지정이 되면 반드시 값이 들 어 와 야 한다.

O O

SQL 자격검정 실전문제 I 2 1 7 2 1 8 I SQL 자격검정 실전문제


정 답 및 해설

36. ③
제 2장. 데이터 모델과 성능
해설 : 매 각 기 일 은 일자별로 매각이 시행 되 는 장 소와 시 간을 의미하는 것으로, 일자별매각물건 엔터티의
매 각 시 간 ,매각장소 속성 은 두 개의 주식별 자 속성 중 매 각 일자에만 종속되기 때문에 2차 정규화
31. ① 대상이 된다.
해설 : 분 석 /설 계 단계에서 데이터베이스 처리 성능을 향상 시킬 수 있는 방 법을 주도 면밀하게 고려해야 그러므로 매각일자를 주식별자로 하고 매각시간과 매각장소 속성을 포함하는 매각기일 엔터티를 독립
한다. 만약 어떤 트랜잭션이 해당 비즈니스 처리에 핵심적이고 사 용 자 업무처리에 있어 중요함을 시킨다. 이때 매각기일 엔터티는 일자별매각물건의 주식별자 중 일부로부터 독립했기 때문에 매각기
가지고 있고 성능이 저하되면 안되는 특 징 을 가지고 있 다 면 ,프 로 젝 트 초기에 운영환경에 대비한 일과 일자별매각물건은 1:M 관계 로 연결된다.
테 스 트 환경을 구현하고 그곳에 트랜잭션을 발생시켜 실제 성능을 테스트해 보아야 한다. 이때 데이터 이와 같은 2차 정규화를 통해 특정 장소에서 이루어진 매각내역을 조회하고자 할 때 100만건의 일자별
모델의 구조도 변경하면서 어떠한 구 조가 해당 사이트에 성능상 가장 적절한 구 조 인 지 를 검토하여 매각내역 데이터를 모 두 읽어 원하는 장소에 해당 하 는 인스턴스들을 찾아 매각일자별로 그룹 핑 한

성능이 좋 은 모습으로 디자인 하는 전략이 요구된다. 보기에서 문제 발생 시점의 SQL을 중심으로 후 매각일자별매각내역과 조인할 필요가 없이 매우 적은 수의 매각기 일 엔터티에서 특정 장소에 해당
집중 튜닝하 는 것은 성능 데이터모 델 링 과 무 관 한 내용이다. 하는 매 각 일 자 들 을 찾아 매각일자별매 각 내 역 과 1:1로 바로 조인하면 되기 때문에 "〇 를 현저하게
감소시킬 수 있어 성능 향상 효 과를 얻을 수 있다.
3 2 . 반 정 규 화 (역 정 규 호 F)
성 능 미 저 〇 i된 반 정 규 화 m \~ 정 규 화 ■ 통한 성능함상
해설 : 데이터 모델링 단계에서 성능을 충분히 고려하기 위한 성능 데이터 모델링 수행 절차에 대한 설명으로,
매각字커 임자명매각못거 매간및자병매 각Ul«
그 과 정은 다음과 같다. 매각굴건번호 각 일자 ( FK)

그H □空
초®피古초
이 : S0
가i 감 땅
갑정 가액 속 매 111번 호 _ OH
첫번째, 데이터모 델 링 을 할 때 정규화를 정확하게 수행한다. wl

r
i거.겨」
수수
£0
두번째, 데이터베이스 용량 산 정 을 수행한다. n r i l i i l
TT
세 번 째 ,데이터베이스에 발생되는 트랜잭션의 유 형 을 파악한다. 1。0민건 第

네번째, 용 량 과 트랜잭션의 유형에 따라 반정 규 화 를 수행한다.


다섯번째, 이력모델의 조정, PK/ FK 조정, 슈 퍼 타 입 /서 브 타 입 조정 등 을 수행한다.
여섯 번 째 ,성능관점 에서 데이터 모 델을 검증한다.

5 천건
33. ④ 특정 매각장소메 대해 매각일자1 참마 매각내역용 조회하려면
900건의 매각기1 과 매각일자i 매각내역고ᅡ 조인미 된다.
해설 : 성능을 고려한 데이터모델링은 정규화를 수행한 이후에 용량산정과 트랜잭션 유형을 파악하여 반정규
화를 수행한다. 또한 PK/ FK등을 조정하여 인덱스의 특징을 반영한 데이터모델로 만들고 이후에 데이

터모델을 검증하는 방법으로 전개한다. 37. ④


해설 : 칼럼에 의한 반복적인 속성 값 을 갖는 형태는 속성의 원자성을 위배한 겨U차 정규화의 대상이 된다.
34. ① 이와 같은 반복적인 속성 나열 형태에서는 각 속성에 대해 ‘아’ 연산자로 연결된 조건들이 사용되는데,

해설 : 정규화가 항상 조회 성능을 저하시킨다는 것은 잘못된 생각이며 기본적으로 중복된 데이터를 제거함으 이 때 어느 하나의 속성이라도 인덱스가 정의되어 있지 않게 되면 or’로 연결된 모든 조건절들이

로써 조회 성 능 을 향상시킬 수 있음을 알아야 한다. 인덱스를 사용하지 않고 한 번의 전체 데이터 스캔으로 처리되게 되어 성능 저하가 나타날 수 있게
되며, 또한 모든 반복 속성에 인덱스를 생성하게 되면 검색 속 도 는 좋 아 지 겠 지 만 반대급부적으로
35. ③ 너무 많은 인덱스로 인해 입력, 수 정 ,삭제의 성능이 저하 되 므 로 ,1차 정규화를 통해서 자연스럽게

해설 : 함수종속성의 규칙에 따라 I관서번호} — {관리점번호,관서명, 상 태 ,관서등록일자1인 관서번호가 문 제 가 해결될 수 있도록 해야 한다.


PK 인 엔터티가 2차 정규화로 분 리 되 어 야 한다,
38. ①

해설 : 컬럼 단위에서 중복된 경우도 1차 정규화의 대상이 된다. 이에 대한 분리는 1:M 의 관계로 두 개의


엔터티로 분리된다.
정 답 및 해설

SQL 자격검정 실전문제 I 2 1 9 2 2 0 I SQL 자격검정 실전문제


정답 및 해설

39. ① 45. ③

해설 : PK에 대해 반복이 되는 그 룹 (Repeating) 이 존재하지 않으므로 1차 정규형이라고 할 수 있으며,부분 해설 : 한 테이블에 많은 칼럼들이 존 재 할 경우 데이터가 물리 적 으 로 저장되는 디스크 상에 넓게 분 포할
함수종속의 규칙을 가지고 있으므로 2차 정규형이라고 할 수 없음. 2차 정규화의 대상이 되는 엔터티임. 가능성이 커지게 되어 디스크 "〇 가 대량으로 발 생할 수 있고, 이로 인해 성능이 저하될 수 있음.
따라서 트랜잭션이 접근하는 칼럼유형을 분석해서 자주 접근하는 칼럼들과 상대적으로 접근 빈도가
40. ① 낮은 칼럼들을 구분하여 1:1로 테이블을 분리하면 디스크 I 八3가 줄어들어 성능을 향상 시킬 수 있다.
해설 : • 다량 데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클러스터링 등의 다양한 물리 저장 기법을 테이블 내에서 칼럼의 위치를 조정하는 것은 데이터 주로 채워지는 칼럼을 앞 쪽에 위치시키고,데이터

활용하여 성능 개선을 유도할 수 있다. 다만,하나의 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 가 채워지지 않고 주로 NULL 상 태로 존재하는 칼럼들을 뒤쪽에 모아둠으로써 로우의 길이를 어느

처리가 반 복적으로 빈번하게 발생한다면 이때는 반정규화를 고려하 는 것이 좋다. 정도 감소시킬 수 있 으 나 ,NULL 상태이던 칼럼에 나중에 데이터가 채워지게 될 경우 더 많은 로우
• 이전 또 는 이후 위치의 레코드에 대한 탐 색은 window function 으로 접근 가능하다. 체인이 발생할 수도 있기 때문에 바람직한 해결책이라고 보기에 부족하며, 무엇보다도 데이터가 채워

• 집계 테이블 이외에도 다 양한 유 형 (다 수 테이블의 키 연결 테이블 등)에 대하여 반 정 규 화 테이블 지지 않고 NULL 상태로 존재하게 되는 칼럼들이 많이 나타나는 경우는,너무 많은 엔터티들에 무리하
적용이 필요할 수 있다. 게 동질성을 부여하여 통합을 수행했거니-, 예측하기 어려운 미래 시점을 겨냥하여 과도하게 의욕적으

로 속 성을 확 장 한 경우 등에서 주로 나타나기 때 문 에 ,자주 사용 되 는 칼럼들이나 현시점에서 주로


41. ④ 사용 되 는 칼럼들을 한데 모 으 고 ,사용 빈 도 가 낮은 칼럼들이나 미래 시점에 사용될 것으로 예상되는
해설 : 반정규화의 기법은 테 이 블 ,속성, 관계에 대해서 반정 규 화 를 적용할 수 있으며, 하나의 테이블의 나머지 칼럼들을 한데 모아 별도의 1:1 관계 엔터티로 분리하는 등의 데이터모델 설계 수정을 고려해

전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 "〇 를 줄이기 위해 해당 칼럼들을 보는 것이 좋다.


별도로 모아 놓는 반 정규화 기법은 테이블추가 반정규화 기법 중에서 부 분 테 이 블 추가에 해당한다.
46. 파 티 셔 닝 ( P a rtitio n n in g )

42. ③

해설 : ③ FK에 대한 속성 추가는 반정규화 기법이라기 보다는 데이터모델링에서 관계를 연결할 때 나타나는 47. ②

자 연스러운 현상이다. 해설 : 개별 테이블을 모두 조회하는 트랜잭션이 대부분이라는 가정이 있으므로 UNI0 N/ UNI0 N ALL할
경우 개별조회에 따른 시간소요와 이것을 조합 하 는 성 능저하가 발생된다. 따라서 하나의 테이블로

43. ③ 통합 하 도 록 하고 대신 PK 체계나 일반속성에 각 사 건을 구 분 할 수 있도록 구분자를 부여한다.

해설 : 제품 엔터티에 단 가를 주문번호별로 합 하는 것은 해당 제품이 여러 주문에 포함될 수 있기 때문에

특정 주문번호만의 단가 합계금액을 갖고 있을 수 없고,주문목록 엔터티에 주문번호별 단가 합계 48. ④

금액을 추가하게 되면 하나의 주문에 포함된 제품번호마다 동 일한 합계 금액을 반복적으로 저장해야 해설 : 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 슈퍼-서브타입이 하나의 테이블로 통합되어 있으면

해서 일관성 문 제가 발 생할 수 있다. 또한 제품 엔터티에 최근값 여부 칼럼을 추가 하 는 것은 단가 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에 다른 형식에 비해 더 성능이 우수하다.

합계 금액을 빠르게 얻기 위한 반정규화와 무관한 조치이다. 그러므로 주문 엔터티에 전체를 통합한 (조인 감소)

계산된 칼럼을 추가하는 것이 한번에 데이터를 조회하는 방법이 되므로 가장 효과적인 반정규화 기법

이다. 49. ④

해설 : 인덱스는 값의 범위에 따라 일정하게 정렬이 되어 있으므로 상수 값 으 로 EQUAL 조건으로 조회되는

44. ① 칼럼이 가장 앞으로 나오고 범위조회 하는 유형의 칼럼이 그 다음에 오도록 하는 것이 인덱스 액세스

해설 : 최근에 변경된 값 만을 조 회 할 경우 과 도 한 조인으로 인해 성능이 저하되어 나타나게 된다. 범위를 좁힐 수 있는 가장 좋 은 방법이 됨

50. ②

해설 : [=’로 들어온 조건에 해당하는 칼럼이 인덱스의 가장 앞쪽에 위치할 때 인덱스의 이용 효율성이 가장
높 다고 할 수 있다.
정답 및 _설

SQL 자격검정 실전문제 I 2 2 1 222 | s q l 자격검정 실전문제


정 답 및 해설

51. ② ,④
과목 E . SQL 기본 및 활용
해설 : 엔터티 간에 논리적 관 계 가 있을 경우 즉, 엔터티 간에 관 계 (Relationship)을 정의하여 관련 엔터티
상호간에 업무적인 연관성이 있음을 표현한 경우에는, 이 데이터들이 업무적으로 밀접하게 연결되어
상호간에 조인이 자주 발생한다는 것을 의미하는 것이기 때문에,데이터베이스 상에서 DBMS가 제공
제 1장 . S Q L 기본
하는 FK Constraints를 생성했는지 여부와 상관없이 조인 성능을 향상시키기 위한 인텍스를 생성해주
는 것이 좋다. 그러므로 수강신청테이블의 학사기준번호에 인텍스가 필요하다.
데이터베이스에 생성하는 FK Constraints는 데이터 모델 상에 표현된 논리적 관계에 따라 관련 인스 1. ④
턴스 간에 일관성을 보장하기 위해 설계된 제약조건을 구현할 수 있도록 DBMS가 제공해주는 하나의 해설 : 데이터 제어어(DCL:Data Control Language)는 데이터베이스에 접근하고 객체들을 사용할 수 있도록

‘지원 기능’으로 이해될 수 있다. 권 한을 부여 하 거 나 회수하는 명령어로 GRANT, REVOKE가 있다.

52. ④ 2. ②
해설 : Global Single Instance(GSI)는 통합된 한 개의 인스턴스 즉, 통합 데이터베이스 구조 를 의미하므로, 해설 : 데이터의 구 조를 정의하는 명령어는 DDL(데이터 정의어)에 해당하며 DDL 문으로 는 CREATE,

분산데 이터베이스와는 대 치 되는 개념 이다. ALTER, DROP, RENAME 이 있다.

공 통 코 드 ,기준정보 등 과 같은 마스터 데이터를 한 곳에 두 고 운 영 하 는 경우 원격지에서의 접근이

빈번할수록 실시간 업무처리에 대해 좋은 성능을 얻기가 어려울 수 있기 때문에 분 산 환경에 복제분산 3. TC L

을 하는 방법으로 분산데이터베이스를 구성할 수 있다. 또한 백업 사이트 구성에 대해서도 분산 환경으 해설 :Transaction를 제어하는 명령어는 TCL(Transaction Control Language) 이다.

로 구성하여 적용할 수 있다.


4. ①

해설 : As-Is :비절차적 데이터 조 작 어 (DML)는 사용 자 가 무 슨 (What) 데이터를 원하는 지만을 명세함.


To-Be :비절차적 데이터 조작어(DML)는 사용자가 무 슨 (What) 데이터를 원하는 지만을 명세하지만,
절차적 데이터 조작어는 어떻게 (How) 데이터를 접근해야 하는지 명세 한다. 절차적 데이터 조작어로
는 PL/SQL (오 라 클 ),T- SQL(SQL Server 등이 있다,

5 , ① ,②

해설 : DDL(Data Definition Language) :CREATE, DROP, ALTER, RENAME

DML (Data Modification Language) : SELECT, INSERT, UPDATE, DELETE


DCL(Data Control Language) :GRANT, GRANT, REVOKE
TCL(Transaction Control Language) : COMMIT, ROLLBACK

6. ④
해설 : ① 은 PK를 지정하는 ALTER TABLE 문장에 문법 오 류가 존 재 하 고 ,올 라른 문법이 사용된 문장은

다 음과 같다.
(오류 발생) ALTER TABLE PRODUCT ADD PRIMARY KEY PRODUCT_PK ON (PROD一ID );
(오류 수정) ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK PRIMARY KEY (PRODJD) ;

② 는 NOT NULL 컬럼에 대해서 NOT NULL 제약조건을 지정하지 않았다.

③ 은 테이블을 생 성할 때 PK를 지정하는 문장에 문법 오 류 가 존재한다.


처이:
la 이- K쇄에서 m

O

2 2 4 i s q l 자격검정 실전문제
sq l 자격검정 실전문제 i 2 2 3
정 답 및 히(설

7. ④ 15. ③

해설 : ①, ② SQLServer에서는 여러개의 컬럼을 동시에 수정하는 구문은 지원하지 않으므로 오류가 발생한다. 해설 : 고 유 키 (Unique Key)로 지정된 모든 컬럼은 Null 값을 가질 수도 있으므로 ③번 보기에 오류가 있다.
또한 SQLServer에서는 괄 호 를 사용하지 않는다.

③ 분류명을 수정할 때 NOT NULL 구문을 지정하지 않으면,기존의 NOT NULL 제약조건이 NULL로 16. A L T E R , DROP C O LU M N
변경되므로 NOT NULL 요 건을 만족하지 않는다. 해설 : Table 스키마 변경 시 사용하는 SQL문은 DDL (Data Definition Language)로 컬럼 삭제 시 활용되는

문 장 은 다 음과 같다.
8. ③ ALTER TABLE 테이블명
해설 : NULL은 공 백 문 자 (Empty String ) 혹 은 숫자 0과 동일하지 않다. DROP COLUMN 컬럼명

9. ② 17. ②
해설 : DELETE FROM T; 이후 데이터 현황 해설 : 참조무결성 규정
- T 테이 블 : 두건 모 두 삭제됨 DELETE FROM 부서 WHERE 부서번호 = ‘20’; 군
- S 테이블 (Cascade 옵션) :두건 모두 삭제됨 CASCADE 참조 무결성 규정이므로 직원 테이블의 ‘2000’,‘3000’도 같이 삭제됨
- R 테이블 (Set Null 옵션) :Child 해당 필 드 (FK : B칼럼) 값이 Null 로 변경됨
SELECT COUNT(직원번호) FROM 직원
10. ① 직원 테이블1000’에 대한 1건이 출력됨
해설 : PK = UNIQUE & NOT NULL 특 징을 가짐.

UNIQUE는 테이블 내에서 중 복 되 는 값이 없지만, NULL 입력이 가능하다. Delete(/ Modify) Action : Cascade, Set Null , Set Default , Restrict (부서 -사원)
1) Cascade________: Master 삭제 시 Child 갖이 삭제

11. ① 2) Set Null :Master 삭제 시 Child 해당 필드 Null

해설 : 테이블명과 칼럼명은 반드시 문 자로 시작해야 한다. 3) Set Default : Master 삭계 시 Child 해당 필드 Default 값으로 설정

사용되는 글 자는 A-Z, a-z, 0-9, $, # 만 허용함. 4) Restrict :Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용

5) No Action :참조무결 성 을 위반하는 삭 제 /수 정 액션을 취하지 않음

12. ①,③
해설 : ② SQL 문장은 정상적으로 수행되지만,DEPT_ C〇 DE 컬럼에 NOT NULL 제약조건이 생성되지 않는다. 18. REN AM E STAD IU M TO STAD IU M _ J S C ;

NOT NULL 제약조건이 생성되지 않으면 명시적으로 DEPT_CODE 컬럼에 NULL을 입력하게 되면 해설 :RENAME OLD_ OBJECT_NAME TO NEW_ OBJECT_NAME (ANSI 표준 기준, 오라클과 동일함)

NULL이 입력되는 문 제 가 발생한다. RENAME STADIUM TO STADIUM_ JSC ;

④ 테이블 생성 문 과 인덱스 생성문 은 정상적으로 수행되 지 만 , 테이블 생성문장에서 이미 PRIMARY


KEY를 지정하였으므로 ALTER TABLE 문장에서 오류 가 발생한다.

13. ③

해설 :학번 칼럼이 PK 이기 때문에 NULL 값이 없다. c〔


m nt (*)와 COUNT(학번)의 결과는 항 상 같다.

14. ② , ③

해설 : ① 테이블 생성시 설 정할 수 있다.

② 외래키 값은 널 값을 가질 수 없다. 습 있다
③ 한 테이블에 하나만 존재 해 야 한다. 승 여러 개 존 재 할 수 있다.
④ 외래키 값은 참조 무결성 제약을 받을 수 있다.
정답 및 해 설


O

SQL 자격검정 실전문제 i 2 2 5


226 i sq l 자격검정 실전문제
정 답 및 해설

19. ④ 24 . DISTINCT
해설 : - Delete (/ Modify) Action : Cascade, Set Null , Set Default , Restrict (부 서 -사워) 해설 : 데이터의 중복 을 제거하는 명령어는 "DISTINCT” 이다. GROUP BY문 을 사용하여 다음과 같이 중복
1) Cascade : Master 삭제 시 Child 같이 삭제 데이터를 제거 할 수 있다.
2) Set Null :Master 삭제 시 Child 해당 필드 Null SELECT 거 주 지 ,근무지
3) Set Default : Master 삭제 시 Child 해당 필드 Default 값으로 설정 FROM 고객지역

4) Restrict :Child 테이블에 PK 값이 없는 경우만 Master 삭계 허용 GROUP BY 거 주 지 ,근무지 ;


5) No Action :참조무결성을 위반하는 삭 제 /수 정 액션을 취하지 않음
25. ①
- Insert Action :Automatic , Set Null , Set Default , Dependent (부 서 -사워) 해설 : ① 특정 테이블의 모든 데이터를 삭제하고, 디스크 사용량을 초기화 하기위해서는 TRUNCATE TABLE
1) Automatic :Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력 명령을 사용 하 여 야 한다.
2) Set Null :Master 테이블에 PK 가없는 경우 Child 외부키를 Null 값으로 처리 ② DELETE TABLE은 테이블의 데이터를 모두 삭제하지만, 디스크 사용량을 초 기 화 하지는 않는다.

3) Set Default :Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력 ③ DROP TABLE은 테이블의 데이터를 모두 삭제하고 디스크 사용량도 없앨(초기화) 수 있지만,테이

4) Dependent :Master 테이블에 PK 가 존 재함 때마 Child 입력 허용 블의 스키마 정의도 함께 삭제된다.

5) No Action :참조무결 성 을 위반하는 입력 액션을 취하지 않음 ④ DELETE TABLE FROM은 존재하지 않는 명령어이다.

20. ④ 26. ①, ④

해설 : 1 : 삽입 컬럼을 명시하지 않았을 경우 모든 컬럼을 삽입해 야 한다. 해설 :


2 :DEGREE 컬럼의 길이는 VARCHAR2(1)이다. ‘AB’는 컬럼 길이를 초과한다. DROP TRUNCATE DELETE
3 :Not Null 컬럼인 AMT 컬럼을 명시하지 않았다. DDL
DDL DML
(일부 DML 성격 가짐)
21. ② Rollback 불 가능 Rollback 불가능 Commit 이전 Rollback 가능
해설 :②번 SQL은 REG—DATE 컬럼에 NOT NULL 제약조건이 있지만 INSERT INTO 구문에는 REG„DATE
Auto Commit Auto Commit 사 용 자 Commit
컬럼이 대입되지 않아 NULL로 입력되므로 오 류가 발생한다.
테이블이 사용했던 Storage중 데이터를 모두 Delete해도
테이블이 사용했던
최초 테이블 생성시 할당된 사용했던 Storage는
22. ① , ③ Storage를 모두 Release
Storage만 남기고 Release Release되지 않음
해설 : ② 는 고객 테이블에 존재하지 않는 고 객 ID 의 주문 을 입력하려고하여 무결성 제약 오 류가 발생한다.
테이블의 정의 자체를 테이블을 최조 생성된
(①번 SQL을 수행 후 에는 정상 입 력 된 다 .) 데이터만 삭제
완전히 삭 제 함 초기상태로 만듬
④ 는 고객 테이블의 고 객 ID 'C002•를 삭 제하려고 할 때 SQL에 의해 추가된 CONSTRAINT에 따라
주문 테이블의 고객 ID를 NULL로 업데이트하려고 DBMS에서 시도하지만,주문 테이블 고객 ID 컬럼의
NOT NULL 제약조건에 의해 실패한다.

23. ①
해설 : TRUNCATE TABLE과 DROP TABLE은 로 그를 남기지 않으므로 개발 기준과 상충된다.
지문2는 문법에 맞지 않다.
정 답 및 해설

SQL 자격검정 실전문제 I 2 Z7 2 2 8 I s q l 자격검 정 실전문제


정 답 및 해설

2 7 . ② ,④ 33. W H ERE 또 는 W H ERE 절

해설 : 데이터베이스 트랜잭션의 4가지 특성 : 일관성과 지속성의 설명이 바뀌었다. 해설 : WHERE 절은 SQL을 이용하여 데이터베이스로부터 데이터를 검색할 때 조회되어야 하는 데이터를

특성 설명
필터링하는데 사용된다.

트랜잭션에서 정의된 연산들은 모 두 성공적으로 실행되던지 아니면 전혀


원자성
실행되지 않은 상태 로 남아 있어야 한다. 34. ②
(atomicity )
(All or Nothing ) 해설 : 논리연사자의 우 선 순 위 는 NOT > AND > OR 순이다.
일관성 트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 (EMPNO > 100 A N D S A L 〉= 3000) O R E M P N O = 200
(consistency) 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
고립성 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 35. ④
(isolation ) 만 들 어 서 는 안된다.
해설 : NULL 값이 포함된 4칙 연산의 결과는 NULL이다.
지속성 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은
30+ 20=50
(durability ) 영구적으로 저장된다.
NU LL+ 40-N U LL

50+ N U LL-N U LL
28. ① ,④

해설 : ① Dirty Read :다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것을 말한다.


36. ①
④ isolation (트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 해설 : NULL 값을 조건절에서 사용하는 경우 IS NULL, IS NOT NULL이란 키워드를 사용해야 한다.
안 된 다 )은 데이터베이스 트랜잭션의 4가지 특성 으 로 문제점이 아니고 목표라고 할 수 있다.

3 7. ④
29. ③
해설 : ① 서비스번호 컬럼의 모든 레코드가^ ‘001’과 같은 숫자형식으로 입력되어 있어야 오류가 발생하지 않는다.
해설 : ① ORACLE 어나사는 DDL 문장 수행 후 자동으로 COMMIT을 수 행한다.
② ©과 같 이 데이터를 입력하면,서비스명 컬럼의 데이터에 대해서 ORACLE에서는 NULL로 입력된다.
② SQL Server에서는 DDL 문장 수행 후 자동으로 COMMIT을 수행하지 않는다. ③ ©과 같 이 데이터가 입력되어있을 때, ORACLE에서 데이터를 조회하려면 서비스명 IS NULL 조건
③ ORACLE에서 DDL 문장의 수 행은 내부적으로 트 랜 잭 션 을 종료 시키므로 B 테이블은 생성된다. 으로 조회하여야 한다.
④ SQL Server에서는 CREATE TABLE 문장도 TRANSACTION의 범주에 포함된다. 그러므로 ④ ©과 같 이 데이터가 입력되어있을 때 ,SQL Server에서 데이터를 조회하려면 서비스명 = ° 로 조회하
ROLLBACK 문장에 의해서 최종적으로 B 테이블은 생성되지 않는다.
여야 한다.

30. @ : 트 랜 잭 션 또 는 Transaction
3 8 . (D
© : 커밋 또 는 Commit 해설 : ①의 조 건은 2014년 0 3 월부터 12 월까지 매출금액과 2 0 1 5 년 0 3 월부터 2 0 1 3 년 I 2 월까지의 매출금액의
© : ■ 백 또 는 Rollback
합이다.
② 의 조 건은 ①의 조건 과 동일하다.
31. ③ ③ 의 조건은 2014년 이월부터 12 월까지의 매출금액과 2 0 1 5 년 0 1 월부터 12 월까지의 매출금액의 합이다.
해설 : ROLLBACK 구 문은 COMMIT되지 않은 상위의 모든 Transaction을 모두 rollback 한다.
즉, 전체 데이터의 합이다.
④ 의 조건은 2 0 1 4 년 11월부터 2 0 1 5 년 0 3 월까지의 매출금액의 합 이며,연산자의 우선 순 위 (A N D > OR)
32. LCD -TV 에 의해 괄 호 가 없어도 된다.
해설 :ROLLBACK TRANSACTION SP2 문장에 의해 UPDATE 상품 SET 상품명 = ,
평면一TV,WHERE 39. ④
상품 ID = ,
0〇 r 이 ROLLBACK 되었고, 첫 번째 UPDATE 문장만 유효한 상태에서 COMMIT 되었으므로 해설 : ①, ②, ③번 SQL은 모두 가입이 2014년 I 2월 01일 00시에 발생했고 서비스 종료 일 시 가 2〇 15년
첫 번째 UPDATE한 내역만 반영 된다. 그러므로 LCD- TV가 된다. 이월 이일 00시 00분 00초와 2015년 이월 01일 23시 59분 59초 사이에 만료되는 데이터를 찾는
조 건이지만, ④번 SQL은 가입 조건은 동일하지만, 서비스 종 료 일 시 가 2〇 15년 이월 01일 M 시 00분
00초에 종 료 되 는 SQL을 찾는 조건이다.
정 답 및 해설

〇 O

2 30 I SQL 자격검정 실전문제


SQL 자 격 검 정 실 전 문 제 I
정 답 및 해설

40. ② 45. ②
해설 : 다) 1:
M 조인이라 하더라 M쪽에서 출력된 행이 하나씩 단일행 함수의 입력값으로 사용되므로 사용할 해설 : I S N U L L 함 수는 결과값이 NULL일 경우 지정된 값을 반환한다. 칼럼의 NULL 값을 확 인 할 때는 IS

수 있다. NULL을 사용 해 야 한다.


라) 다중행 함수도 단일행 함 수와 동일하게 단일 값 만을 반환한다.

4 6 . N U L L 1F
41. ③ 해설 : N U L L IF 함수 는 EXPR1 이 E X P R 2와 같으면 N U L L 을 ,같지 않으면 EXPR1 을 리턴한다.
해설 : 라인수를 구하기 위해서 함수를 이용해서 작 성 한 SQL이다. 특정 값을 NULL로 대체하는 경우에 유용하게 사 용 할 수 있다.
LENGTH :문자열의 길이를 반환 하 는 함수 N U L L IF (E X P R 1 , EXPR2)

CHR :주어진 ASCII 코드에 대한 문자 를 반환하는 함수 (CHR(10) -> 줄바꿈)


REPLACE :문자 열 을 치환하는 함수 (REPLACE(C1, CHR(IO)) -> 줄바 꿈 제거) 47. ④

해설 : NULL이 포함된 연산의 결과는 N U L L 이다.

함수 결과 값 분 모 가 0 이 들 어 가 는 경우 연산 자 체 가 에러를 발생하며 원하는 결과를 얻을 수 없다.

ROWNUM C1 LENGTH(C 1) REPLACE(C 1, CHR(10)) LENGTH(REPLACE(C 1, CHR(10))) 1. 0 / 3 0 0 = 0

1 A 3 변경 전 변경 후 2 2. 5 0 0 0 /0 :에러 발생
A A AA 3. 1 0 0 0 /N U L L - NULL

A
2 B 5 변경 전 변경 후 3 48. ③
B B BBB
해설 : 따 라서, 결과의 합은 6이다.
B B
COALESCE 함 수는 첫번째 NULL이 아닌 값을 반환한다.
B
C 0 A L E S C E (C 1 , C2, C 3 )는 각 R o w 에서 첫번째로 NULL이 아닌 값인 1, 2, 3을 반환한다.

42. ③
4 9 . © :N V L , © :N U U J F , © :C O A L E S C E
해설 : 오라클에서 날짜의 연산은 숫자의 연산과 같다, 특정 날짜에 1을 더하면 하루를 더한 결과와 같으므로
해설 : IS N U L L , N V L 함수는 표현식 1의 결과값이 N U L L 이면 표현식2의 값을 출력하며, N U L L IF 는 표현식 1 일
1/24/60 = 1분 을 의미한다. 1/24/(60/10) = 10분과 같으므로 2015년 1월 10일 10시에 10분을 더한
표현식 2 와 같으면 NULL을 같지 않으면 표현식 1을 리턴한다. COALESCE는 임의의 개수 표현식에서
결과와 같다.
NULL이 아닌 최초의 표현 식 을 나타낸다.

43. LOC WHEN 'NEW YORK' THEN 'EAST'


해설 :SEARCHED_ CASE_ EXPRESSION을 SIMPLE_ CASE_ EXPRESSION으로 변환하는 문제임.
SELECT LOC,

CASE LOC WHEN 'NEW YO RK ' THEN ’EAST


ELSE 'ETC'

END as AREA
FROM DEPT;

44. ④
해설 : 지문 4는 CASE 문장에서 데이터가 없는 경우를 0으로 표 시 해 야 (ELSE 0),
다른 3개의 지문과 같은 결과가 나온다.
정 답 및 해설

〇 O

SQL 자격검정 실전문제 I 2 3 1 2 32 I s q l 자격검정 실전문제


정 답 및 해설

50. ③ 52. ②
해설 :SELECT AVG(COL3) FROM TAB_ A ;今 (20+ 0)/2건=10 해설 : 광고게시 테이블에서 광고매체 ID 별로 광고시작일자가 기-장 빠른 데이터를 추출하는 SQL을 작성해야
군 세번째 행 COL3의 NULL은 AVG 연산 대상에서 제외됨 한다.
CO L1 CO L2 CO L3 ①의 경우 연관 서브쿼리를 활용하는 방법이지만, 이를 활용하기위해서는 WHERE 절에서 사용되어야
30 NULL 20 한다. (Inline View에서는 사 용 할 수 없다)
NULL 40 0 ③ 은 광 고 ID 별로 광 고 매 체 ID 와 광고시작일자의 최소값을 출력 하 므 로 틀린 결과이다.
0 10 NULL
④ 은 광고게시의 전체데이터에서 광고매체 ID 의 최소값과 광고시작일자의 최소값을 가져오므로 틀린
SELECT AVG(COL3) FROM TAB_A WHERE COL1 〉•0; 今 (20)/ l 건=20 결과이다.

-> WHERE 절에 의해 COL1 이 N U L L 인 두번째 행은 NULL 연산 제외 조건 으 로 제외됨


+ WHERE 절에 의해 GOL1이 0 인 세번째 행은 연산 대상에서 제외됨 53. ④

CO L1 CO L2 CO L3 해설 : ③ GROUP BY로 그룹핑된 컬럼에 대해서 HAVING 조건 절 을 사 용 할 경우 집계된 컬럼의 FILTER


30 NULL 20 조건 으 로 사 용 할 수가 있다. 이런 경우 HAVING절에 집계함수가 없이도 사 용 할 수 있다.
④ 중첩된 그룹함수의 경우 최종 결과값은 1건이 될 수밖에 없기에 GROUP BY절에 기술된 메뉴 ID와
SELECT AVG(COL3) FROM TAB_A WHERE COL1 IS NOT NULL ;今 (20)/l 건 =20
사 용 유 형 코 드 는 SELECT절에 기술될 수 없다.
分 COL1이 NULL 인 두번째 행은 NOT NULL 조건으 로 인해 제외됨

今 세번째 행 COL3 D 의 NULL은 AVG 연산 대상에서 제외됨


54. ②
CO L1 CO L2 CO L3
해설 : SQL 실행 순서에 의해 HAVING절은 SELECT절보다 선행처리 되기에,SELECT절 COUNT 함수 사용
30 NULL 20
0 10 NULL 여부는 관계없다. 위의 SQL은 나 컬럼으로 GROUP BY를 수행하였을 때 건수가 2건 이상인 데이터를

추출하여 SUM(다) 의 값이 큰 순으로 정렬하는 SQL 이므로 아 래와 같은 결과에서

51. ③ 가 나 다 CNT
009 A003 600 4
해설 SQL1) SELECT COUNT(GRADE) FROM EMP;
005 A002 500 3
6감5건 : 사원 500명 + 대리 100명 + 과장 30명 + 차장 10명 부장 5명 002 A001 300 2
이때 NULL 25건은 제외된다. 010 A004 200 1

CNT가 2 이상인 것만 출력된다.


SQL2) SELECT GRADE FROM EMP WHERE GRADE IN (‘차장 V 부 장 ’/널 ’);
15건 : 차장 10명 + 부장 5명 55. ②
‘널’이 텍스트로 입력된 데이터는 없다고 봐야 함 해설 : Group By Having 한 결과에 대해 정렬 연산을 하는 것이다.
정의되지 않은 미지의 값인 NULL과 ‘널’ 텍스트 데이터는 다름. 또 한 IN (‘차 장 , ID 건수가 2개이며,ORDER BY절 CASE문에 의해 999는 0으로 치환되고 그 외는 ID 값으로 정렬된다.
1부장’,NULL) 로 변경하여도 실제 NULL데이터는 출력되지 않음. NULL 비교는
오직 ‘IS NULL, IS NOT NULL,
만 가능

SQL3) SELECT GRADE, COUNT(*) FROM EMP GROUP BY GRADE ;


6건 : 5개 직급 + NULL 기준별 데이터 수 가 6건 출력됨
정답 및 해설

〇 O

2 3 4 I SQ L 자격검정 실전문제
sq l 자격검정 실전문제 I 2 3 3
정 답 및 해설

56. ③ 62. ④

해설 ② SQL 실행 순서에 의하면 SELECT절 이후에 ORDER BY 절이 수행되기 때문에 SELECT 절에 해설 : 영화명과 배우명은 출연 테이블이 아니라 영화와 배우 테이블에서 가지고 와야 하는 속성이므로 출연테
기술되지 않는 ‘년’ 칼럼으로 정렬하는 것은 논 리 적 으 로 맞지 않다. 하 지만 오 라 클 은 행기반 이블의 영화번호와 영화테 이블의 영화번호 및 출연테 이블의 배우 번 호 와 배우테 이블의 배우번호를
DATABASE 이기에 데이터를 액세스할 때 행 전체 칼럼을 메모리에 로드한다. 이와 같은 특성으로 조인 하 는 SQL문 을 작성 해 야 함.
인해 SELECT절에 기술되지 않은 칼럼으로도 정렬을 할 수 있다.

단, 아 래와 같은 SQL 일 경우에는 정렬을 할 수 없다, 63. ④


SELECT 지역, 매출금액 해설 : DBMS 옵 티 마 이 저 는 From 절에 나열된 테이블이 아무리 많아도 항 상 2개의 테이블씩 짝을 지어
FROM ( Join 을 수행한다.
SELECT 지 역 ,매출금액
FROM 지역별매출 64. ③
해설 : UKE 연산자를 이용한 조인의 이해가 필요하다.
ORDER BY 년 ASC; SQL의 실행결과는 다음 과 같다.

EM PNO EN A M E R U LE
이는 IN-LINE VIEW가 먼저 수행됨에 따라 더 이상 SELECT절 외 칼럼을 사용할 수 없기 때문이다. 1000 SMITH s%
1100 SCOTT S%
③ GROUP BY를 사 용할 경우 GROUP BY 표현식이 아닌 값은 기술될 수 없다.
1000 SMITH %T%
④ GROUP BY 표현식이기에 가능하다.
마세 1100 SCOTT %T%

57. ③

해설 : ORDER BY 절에 컬럼명 대신 Alias 명이나 컬럼 순 서를 나타내는 정수를 혼용하여 사 용 할 수 있다.

58. ②

해설 : CASE절을 이용해서 원래의 정렬 순 서를 변경하였다. 그래서 ID 가 ‘A’인 것이 가장 먼저 표 시되도록

하였다.

59. ④

해설 :SELECT 문장의 실행 순 서 는 FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY


이다.

60, ④

해설 : SQL Server의 TOP N 질의문에서 N 에 해당하는 값이 동 일한 경우 함께 출력 되 도 록 하는 WITH


TIES 옵 션을 ORDER BY 절과 함께 사용 하 여 야 한다.

61. ③

해설 : 여러 테이블로부터 원하는 데이터를 조회하기 위해서는 전체 테이블 개수에서


최소 N-1 개 만큼의 JO IN 조건이 필요하디-.
정답 및 해설

〇 〇

sq l 자격검정 실전문제 i 2 3 5 2 36 I s q l 자격검정 실전문제


정 답 및 해설

71. CROSS JO IN
제 2장. SQ L 활 용
해설 : CROSS JOIN 은 E . F.CODD 박사가 언급한 일반 집합 연산자의 PRODUCT의 개념으로 테이블 간

JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다. 조건절이 없거나 CROSS JOIN


65. ② 키워드를 사 용할 수 있다.

해설 :순수 관계 연산자에는 SELECT, PROJECT, JOIN , DIVIDE가 있다.


72. ①

66. ③, ④ 해설 : WHERE 절에 A .고객 번 호 IN (11000, 12000) 조건을 넣었다면 정답은 ② 번이 되었을 것 이 나 ,〇 N

해설 : ① NOT EXIST 절의 연관서브쿼리에 X. 컨텐츠ID = B. 컨텐츠ID가 존재하지 않아 단 하나의 컨텐츠라도 절에 A . 고객번호 IN (11000, 12000) 조 건을 넣었기 때문에 모든 고객에 대해서 출 력을 하되 JOIN

비선호로 등록 한 고객에 대해서는 모든 컨텐츠가 추천에서 배재 된다. 대상 데이터를 고객번호 11000과 12〇 00으로 제한되어 ① 번과 같은 결과가 출력된다.

② 추천컨텐츠를 기준으로 비선호컨텐츠와의 LEFT OUTER JO IN 이 수행되고 비선호컨텐츠의 컨텐츠


ID 에 대해서 IS NULL 조 건 (③ 번과 같이)이 있다면 정확히 비선호 컨텐츠만 필터링할 수 있다. 73. ④

(고객이 비선호로 등록하지 않은 컨텐츠는 추 천 컨 텐 츠 에 만 등 록 되어있으므로) 해설 : 보기의 3개의 SQL은 모두 Full Outer Join 과 동 일 한 결과를 반환한다.

67. ① , ② 74. ①

해설 : ③ 데이터 모 델을 보면 제품과 생산라인 엔터티에는 생 산 제 품 과 대응되지 않는 레코드가 있을 수 해설 : 주 키 와 외래키는 영향을 미치지 않는다.

있다. LEFT OUTER JOIN

④ 특정 생산라인에서 생산되는 제품의 제품명을 알기위해서는 제품과 생산제품까지 2개의 엔터티만을


Inner Jo in 하면 된다.

68. ②
해설 : 구매이력이 있어야 하므로 INNER JO IN 이 필 요 하 며 ,구매 횟수이므로 COUNT함 수를 사용한다,

69. ③

해설 : ① 두 번째 ON 절이 B .사용시간대 BETWEEN C .시작시간대 AND 이 작 시 간 대 가 되어야 한다.


② INNER JO IN 구문 오 류 가 발생한다.
④ BETWEEN JO IN 이란 구문은 없다. 구문 오 류가 발생한다.

70. ①

해설 : TEAM, STADIUM 두 테이블을 조인하여 사용한다.

① USING 조건절을 이용한 EQUI JO IN 에서도 NATURAL JOIN과 마찬가지로 JOIN 칼럼에 대해서는
ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없다. 지문 1는 SYNTAX 에러 발생함.
USING T .ST ADIUM JD = S.ST ADIU M JD
今 USING (STADIUM_ID) 75. LEFT JO IN 또 는 L 티=T 0 니' J OI N
SELECT T. REGION_ NAME, T. TEAM_ NAME, T. STADIUMJD , S. STADIUM_NAME 해설 : LEFT OUTER JOIN 은 좌측 테이블이 기준이 되 어 결과를 생성한다. 즉 ,TABLE A와 묘가 있을 때
군 SELECT T. REGION_ NAME, T. TEAM_ NAME, STADIUMJD , S , STADIUM„NAME (TABLE 가 기준이 됨 ),A와 B를 비교해서 묘의 JOIN 칼럼에서 같은 값이 있을 때 표테이블에서

해당 데이터를 가져오고, B의 JOIN 칼럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 칼럼들


은 NULL 값으로 채운다. 그 리 고 ,LEFT JOIN 으로 OUTER 키워드를 생략해서 사 용할 수 있다.
정답 및 해설

sq l 자격검정 실전문제 I 2 3 7 238 I s q l 자 격검 정 실전문제


정답 및 해설

76. 後 81. ②
해설 : 아우터 조인에서 ON 절은 조인할 대상을 결정한다. 그러나 기준 테이블은 항상 모두 표시된다. 해설 :S E T OPERATOR :합집합은 U N IO N , 교집합은 IN T E R S E C T , 차집 합 은 M IN U S /E X C E P T 이다.

결과 건에 대한 필터링은 WHERE 절에서 수행된다.


82. ②

77. ① 해설 : U N IO N ALL을 사용 하 는 경우 칼럼 A L IA S 는 첫번째 SQL 모듈 기준으로 표 시되며, 정렬 기준은

해설 : 보기는 게시판별 게시글의 개수를 조회하는 SQL이다. 이때 게시글이 존재하지 않는 게시판도 조회되어 마지막 SQL 모듈에 표시하면 됨.

야 한다. ORACLE에서는 OUTER JOIN 구문을 (+) 기호를 사용하여 처리할 수도 있으며, 이를 ANSI
문장으로 변경하기 위해서는 Inner쪽 테이블(게시글)에 조건절을 ON절에 함께 위치시켜야 정상적인 83. ①

OUTER JOIN 을 수 행 할 수 있다. 해설 : 집합 연산자는 S Q L 에서 위에 정의된 연산자가 먼저 수행된다. 그러므로 U N IO N 이 나중에 수행되므로

②번의 경우는 Outer 대상이 되는 테이블(게시판)의 조건절이 ON절에 위치하였으므로 원하는 결과가 결과적으로 중복 데이터가 모두 제거되어 ①과 같은 결과가 도출된다. 만일 U N IO N 과 U N IO N A L L 의

출력되지 않는다. 순 서 를 바꾼다면 ② 과 같은 결과가 도출된다.

78. 5 84. ①

해설 : 조건에 맞는 Student 데이터는 다음과 같다. 해설 : 0 SELECT A, B, C FROM R1

U N IO N ALL
st_num st_name d_num
SELECT A, B, C F R O M R2;
1001 Yoo 10
1003 Lee (중복 레코드 유 지 ,정렬 안함)
20
1004 Park 10 R ( A fB , C )
1005 Choi 20 A B C
1006 Jeong 10 A3 B2 C3

A1 B1 C1

79. ④ A2 B1 C2

해설 : EXCEPT는 차집합에 대한 연산이므로 NOT IN 또는 NOT EXISTS로 대체하여 처리가 가능하다. A1 B1 C1

②는 NOT IN 을 사 용 하 였 으 나 ,PK 컬럼 A , 묘에 대하여 각각 NOT IN 연산을 수행하여 다른 결과가 A3 B2 C3

생성된다.

⑪ S E L E C T A , B , C F R O M R1
80. ② U N IO N

해설 : 수 행한 SQL은 이용된 적이 있었던 서비스를 추출 하 는 SQL 이다. SE LE C T A, B, C FROM R2;

① 이용된 적이 있었던 서비스를 추출 하 는 것은 동 일 하 나 서비스와 서 비 스이용은 l:n 관계이므로 (중복 레코드 제거함, 정렬 발생)
서 비스이용건수 만큼 추 출 되 므 로 전체 결과가 다르다. GROUP BY를 수행하면 동 일 한 결과를
R(A ,
B,C)
출 력할 수 있다.
A B C
② 전체 서비스에서 이용된 적이 있었던 서비스를 MINUS하였으므로 이용된 적이 없었던 서비스가
A1 B1 C1
서브쿼리에서 추출된다. 그러므로 NOT EXISTS 구문을 적용하면 이용된 적이 있었던 서비스가
A2 B1 C2
출력된다. (정답)
A3 B2 C3
③ 서비스를 기준으로 OUTER J 이 N을 수 행 하 였 으 므 로 , 이용된 적이 없었던 서비 스 만 출력된다.

B. 서 비 스 ID IS NOT NULL로 변경해야 동 일 한 결과가 출 력 된 다 ,


④ 서비 스 와 서비스이용 테이블의 순 서를 변경하고 IN 절을 NOT IN 으로 변경하면 동 일 한 결과를

출 력 할 수 있다.
정 답 및 해설

〇 ᄋ

s q l 자 격 검 정 실전문 제 I 239 24 0 | SQL 자격검정 실전문제


정 답 및 해설

85. ③ 91. ①

해설 : 집합 ◦는 집합 A와 집합 B의 교 집 합 이 며 , 데이터베이스에서 교 집 합 기능을 하는 집합 연산은 해설 : 위의 결과는 중 간 레벨인 도 쿄 지 점 (120)을 시작으로 상위의 전체 노 드 (역 방 향 전 개 )와 하위의 전체


Intersection 이다. 노 드 (순 방 향 전개)를 검색하여 매출액을 추출 하 는 S Q L 이다. 부서 테이블의 전체 데이터를 보면

86. ③ LEVLE은 1 ~ 3 까지 이지만 추출된 데이터의 L E V E L 은 1과 2 만 추출된 것으로 보면 중간 L E V E L 에서

해설 : ① 1:1, 양쪽 필수 관계를 시스템적으로 보장하므로 두 엔터티간의 EXCEPT 결과는 항상 공집합이다. 추출된 것을 짐작할 수 있다.
② 1:1, 양쪽 필수 관계를 시스템적으로 보장하므로 UNION을 수행한 결과는 회원기본정보의 전체건수와 ② 최상위 노드인 아 시 아 지 부 (1 0 0 ) 를 시작으로 하위의 모든 부 서를 추 출 (순 방 향 전개)하므로 아래와

동일하지만, UNION ALL을 수행하였으므로 결과건수는 회원기본정보의 전체건수에 2배가 된다. 같은 결과가 추출된다.

④ 1:1, 양쪽 필수 관 계 를 시스템적으로 보 장하므로 연산 수행결과는 같다. 부서코드 부서명 상위부서코드 매출액 LVL
100 아시아지 부 NULL NULL 2

87. C 110 한국지사 100 NULL 2

해설 : SQL의 실 행결과는 다 음과 같다.


111 서울지점 110 1000 3

112 부산지 점 110 2000 3

120 일본지 사 100 NULL 2

121 도쿄지 점 120 1500 3

122 오사카지 점 120 1000 3

130 중국지 사 100 NULL 2

131 베이징지점 130 1500 3

132 상하이지점 130 2000 3

③ 최하위 노드인 도쿄 지점 ( 냅 1 ) 에서 상위의 모든 노드(역방향 전개)를 추출하게 되므로 아래와 같은


88. ④
결과가 추출된다.
해설 : Oracle 계층형 질의에서 루트 노드의 LEVEL 값은 1이다.
부서 코>
드 부서명 상위부서코드 매출액 LVL
10 0 아시아지 부 NULL NULL 3
89. ①
120 일본지 사 100 NULL 2
해설 : CONNECT BY 절에 작성된 조건 절 은 WHERE 절에 작성된 조건절과 다르다. START WITH 절에서 121 도쿄지 점 120 1 5 00 1

필터링된 시작 데이터는 결과목록에 포함되어지며, 이후 CONNECT BY 절에 의해 필터링 된다. 그러


④ W HERE 절의 서브쿼 리를 보면 일본 지 사 (1 2 0 ) 를 시 작 으 로 역 방향 전개하여 최상위 노 드 를
므로 매니저 사원번호가 NULL인 데이터는 결과목록에 포함되며,이후 리커시브 조인에 의해 입사일자
추출하여 다시 순 방 향 전개를 수행하고 있다. 이렇게 되면 ② 와 동 일한 결과를 추출하게 된다.
가 필터링 된다.
④ 번은 AND PRIOR 입사일자 BETWEEN ’2013—01—01' AND '2013-12-31' 에 대한 결과이다.
92. ①

해설 : SE LF JO IN 은 하나의 테이블에서 두 개의 칼럼이 연관 관 계를 가지고 있는 경우에 사용한다.


90. ④

해설 : ④ 오 라클 계층형 질의문에서 PRIOR 키워드는 SELECT, WHERE 절에서도 사용 할 수 있다.


93. ③

해설 : ① 는 일자별매출액에 일자별 매출 테이블과 동일하게 출력된다.


② ,
④ 는 작은 날짜쪽에 제일 큰 누적금액이 출력된디-.
③ 은 일자별매출 테이블을 S e l f J o i n 하여, A A l i a s 쪽에 먼저 읽혔다고 가정하면 다음처럼 데이터가

생성될 것이다.
1. A 가 {2 0 1 5 .1 1 .0 1 . 1000} 일 때 B 는 { 2 0 1 5 .1 1 .0 1 . 1000}

2 . A 가 { 2 0 1 5 .1 1 .0 2 ., 1000} 일 때 묘는 {{2 0 1 5 .1 1 .0 1 . 1 0 0 아, { 2 0 1 5 .1 1 .0 2 . 1 0 0 아}

3 . A 가 1 2 0 1 5 .1 1 ,0 3 ., 100아 일 때 B 는 { {2 0 1 5 .1 1 .0 1 . 1 0 0 아 , { 2 0 1 5 .1 1 .0 2 . 1 0 0 0 },

(2 0 1 5 .1 1 .0 3 . 1000}}
정 답 및 해설

〇 O

2 42 [ s q l 자격검정 실전문제
SQL 자격검정 실전문제 I 2 4 1
정 답 및 해설

위의 S e lf Join 은 Equi Join 0] 아닌 Range Join 이므로 A 의 레코드는 B의 레코드 수 만큼 증가하게 97. ③

된 다 .(A * B) 그러므로 위의 3번의 경우 A는 B의 레코드 개수와 동일하게 되므로 SUM (매출금액)을 해설 : 위의 SQL은 약관항목 중 단 하나라도 동 의를 하지 않은 회원을 구 하는 S Q L 이다. H A V I N G 절에서
하면 3 ,0 0 0 이 된디-. 이런 식으로 A A lia s 의 모든 레코드 개수를 S c a n 하면 누적 값을 출력하게 된다. 동 의 여 부 가 N 인 데이터가 한 건이라도 존재하는 데이터를 추출한다.

CD은 회원 테이블과 동의항목 테이블의 회원번호 컬럼으로 연관 서브쿼리를 수행하여 동의여부 컬럼의
94. ③ 값이 N 인 데이터가 한 건이라도 존재하면 회원 데이터를 출력하게 된다.
해설 : WHERE 절의 단일행 서브쿼리인 (SELECT D FROM DEPT WHERE E = ‘i’) 에 의해서 DEPT 테이블의 ② 는 동의항목 테이블에서 동의여부가 N 인 한 건이라도 존재하는 회원을 추출하여 회원테이블과 m

D 컬럼 값이 x 인 행이 선택되고, D = (SELECT D FROM DEPT WHERE E = ‘i’) 조건에 의해 EMP 연산을 수행한다.
테이블의 (A = l , B = a), (A =2, B= a) 인 2건이 출력된다. 출력된 결과가 모두 UNIQUE하기 때문에 ③ 의 회원 테이블과 동의항목 테이블간에 회원번호 컬럼으로 연관 서브쿼리로 처리되어야 정상적으로
DISTINCT 연산자는 결과 건수에 영향을 주지 않는다. 처리할 수 있다.
④ 는 H A V I N G 절로 처리되던 조건을 W H E R E 절에 위치시켜 더 간편하게 J o i n 으로 처리하였다. 또한

9 5 . 運) 회원과 동의항목은 1 :N 관계이므로 JO IN 된 결과는 N 건으로 발생됨에 따라 GROU P BY를 추가하여

해설 : 다) 서브쿼리의 결과가 복수 행 결괴를 반환하는 경우에는 IN , ALL, ANY 등의 복수 행 비교 연산자와 중 복 을 제거 하였다.


사 용 하 여 야 한다.
마) 다중 컬럼 서브쿼리는 서브쿼리의 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 비교되는 98. ③

데 ,SQL Server에서는 현재 지원하지 않는 기능이다,. 해설 : 이벤트 시작일자가 ‘2014.10.01.’과 같거 나 큰 이벤트를 기준으로 단 한차례라도 이메 일 발송이 누락된

회원을 추출 하 는 S Q L 문장이다.

96. ③ © 을 제거하고 © 의 E X IS T S 연산자를 IN 연산자로 변경하게 되면 회원별로 메일을 발송 한 건수를

해설 : ‘현재 부양하는 가족들이 없는 사원들의 이름을 구하라’를 구현하는 방법은 가족 테이블에 부양사번이 계산할 수 없으므로 원하는 결과를 추 출할 수 없다.
없는 사원 이름을 사원 테 이블에서 추출 하면 되고 ,SQL 문장으로 NOT EXISTS, NOT IN , LEFT GROUP BY 및 집계함수를 사용하지 않고 H A V IN G 절을 사용하였다고 하여 S Q L 문장이 오류가 발생하

OUTER JOIN 을 사용하여 구현 할 수 있다. 지는 않는다.


1. NOT EXISTS
SELECT 이름 99. ②

FROM 사원 해설 : ① 단일 행 서브쿼리의 비교연산자로는 =,<, <=, > , 〉=, ◊ 가 되어야 한다. IN , A L L 등의 비교연산자는

WHERE NOT EXISTS (SELECT * FROM 7) •족 WHERE 사■번 = 부 0士 4번 ) 다중 행 서브쿼리의 비교연산자 이다.

2. NOT IN ② 단일 행 서브쿼리의 비교연산자는 다중 행 서브쿼리의 비교연산자로 사 용할 수 없지만,반대의

SELECT 이름 경우는 가능하다.


FROM 사원 ③ 비 연관 서 브 쿼 리 가 주로 메인쿼리에 값을 제공하기 위한 목적 으 로 사용된다.

WHERE 사번 NOT IN (SELECT 부양사번 FROM 기-족) ④ 메인 쿼리의 결과가 서브쿼리로 제공될 수도 있고, 서브쿼리의 결과가 메인쿼리로 제공될 수도
3. LEFT OUTER JOIN 있으므로 실행 순 서 는 상황에 따라 달라진다.

SELECT 이름
FROM 사원 LEFT OUTER JOIN 가족 ON (사번 = 부양사번) 100. 運)
WHERE 부양사번 IS NULL 해설 : 2 0 1 4 년에 입사한 사원들의 사원, 부서 정보와 부 양 가 족 수 를 추출 하 는 S Q L 이다.

SELECT 절에 사용된 서브쿼리는 단일행 연관 서브쿼리로 JO IN 으로도 변경이 가 능 하 며 ,F R O M


절에 사용된 서브쿼리는 I n l i n e V ie w 또는 D y n a m ic V ie w 이고, W HERE 절에 사용된 서브쿼 리는

다중행 연관 서브쿼리 이다.


③번 보기 의 경우 이미 FROM 절에 I n l i n e V ie w 로 사원 테이블의 입사년도 조건 을 명시하였으므로
W HERE 절의 E X IS T S 조건은 부서와 사원 테이블간의 JO IN 조건에 의해 결과에 어떠한 영향도 미치

지 못하므로 삭제 되 어 도 무방하다.
정답 및 해설

sq l 자격검정 실전문제 I 2 4 3 2 4 4 | s q l 자격검정 실전문제


정 답 및 해설

101. ② 106. ②

해설 : ① Inline View D 에서 평가결과 엔터티의 특정 상 품 및 평가항목에 대한 최종 평가회차가 아닌 전체 해설 : 위의 결과 데이터는 지역에 대해서 월별 이용량 및 소 계와 전체 이용량을 출 력 하 였 으 므 로 ,ROLLUP
데이터 중 평가회차가 가장 큰 값을 가지고 JOIN 을 수 행 하 므 로 원 하는 결과가 아니다. 함수를 활용할 수 있다. ROLLUP 집계 그룹 함수는 나열된 컬럼에 대해 계층 구조로 집계를 출력하는
② 연관 서 브 쿼 리 를 활용하여 특정 상 품 ,평가항목별로 최종 평가 회 차 와 Join 을 수행하여 원하는 함수로서 ROLLUP(A ,피 를 수행하면 (A ,B) 별 집 계 ,A 별 집계와 전체 집계를 출 력할 수 있다.
결과를 출력한다. ① 번 보기의 경우 CASE 절의 GROUPING 함수의 사용이 잘 못 (0이 아닌 1이 되어야 함) 되었으며,
③ 특정 평가회차에 대한 결과가 아닌, 평가결과 엔터티의 평가회차,평가등급,평가일자 속성에 대해 ③ 번 보기처럼 CUBE를 사용하게 되면, 결합 가능한 모든 값에 대하여 다차원 집 계를 생성하게 된다.
서 개별 MAX 값을 구하므로 원하는 결과가 아니다. ④ 번 보기처럼 GROUPING 況]TS를 사용하게 되면 계층구조 없이 지역에 대한 힙-계와 월별 합 계를
④ 특정 평가회차에 대한 결과가 아닌,상품 ID , 평가항목 ID 별로 개별 MAX값을 구하므로 원하는 결과 각각 생성하게 된다.
가 아니다.

107. RO LLU P
102. ③ 해설 : 위 SQL의 결과는 (구매고객,구매월)별,구매고객별 그리고 전체에 대한 구매건수와 구매금액을 출력한
해설 : ① 연관 서브쿼리를 활용한 UPDATE 에서 WHERE절은 UPDATE 대상이 되는 데이터의 범위를 결정하 결과이다. 집계에 계층 구조가 있으므로 나열된 컬럼에 대해 계층 구조로 집계를 출력하는 ROLLUP을
게 되는데, WHERE 절이 누락되어 부서의 모든 데이터가 UPDATE 대상이 되므로 부서코드 A007, 사용하여 집계 SQL을 작성할 수 있다.
AO〇 8을 제 외한 모든 데이터가 NULL 값으로 변경된다.
② WHERE 절 조건이 부서 임시가 아닌 부서 테이블이므로 A007, A008을 제외한 모든 데이터가 NULL 108. ④
값으로 변경된다. 해설 : ① CUBE, GROUPING SETS, ROLLUP 세가지 그룹 함수 모두 일반 그룹 함수로 동 일 한 결과를
④ ① 과 같은 사 유로 부서코드 A007, AO〇 8을 제외한 모 든 데이터가 NULL 값으로 변경된다. 또한 추 출 할 수 있다.
변경일자를 하드 코딩하 는 것은 답이 될 수 없다. ② 함수의 인자로 주어진 컬럼의 순서에 따라 다른 결과를 추출하게 되는 그룹 함수는 ROLLUP 이며,

나열된 컬럼에 대해 계층 구조로 집계를 출력한다.


103. ② ③ CUBE, ROLLUP, GROUPING SETS 함수들에 의해 집계된 레코드에서 집계 대상 컬럼 이외의

해설 : ② 뷰의 장점중 독립성은 테이블 구 조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 GROUP 대상 컬럼의 값은 NULL을 반환한다.
된다.

10 9. ② , ③

104. ② 해설 : SQL의 결과를 보면 설 비 ID와 에너 지코드의 모 든 조합에 대하여 사용량합계를 추출하고 있다. ⑶ BE

해설 : 조회 SQL 실행시 V_TBL은 뷰 스크립트로 치환되어 수행된다. 뷰 생성 스크립트에서 부여된 조건과 함 수는 인수로 니-열된 항목의 기_능 한 모 든 조합에 대하여 GROUPING을 수행한다. 또한 GROUPING

조회 SQL 에서 부여된 조건 모두를 만족해야 한다. SETS은 사용자가 원하는 다양한 조합을 인수로 사용할 수 있다. 위 문제에서 ②번은 CUBE를 사용하였
으므로 CUBE절에 나열된 컬럼의 모 든 조합 즉 ,((설 비 1的 ,(에 너 지 코 드 ), (설 비 ID , 에너지 코 드 )) 에

105. ③ 대해 SUB TOTAL을 만들게 된다. ③ 번은 GROUPING SETS를 활용하여 ②번의 모 든 조 합을 직접

해설 : ROLLUP은 계층 구조 를 가진 SUB TOTAL을 생성하는 함수로 나열된 컬럼의 순 서 가 변경되면 수행 기술 하였다. ① ,④의 보기별 결과는 아래와 같다.
결과도 변경된다. 위의 SQL문장은 서비스 ID 에 대해서 가입일자별 가입건수 및 소계와 전체 가입건수
를 구하되 Outer Join 을 수행하였으므로 가입내역이 없는 서비스 ID (004)에 대해서도 SUB TOTAL을
출력하고 있다.

① 은 서비 스 ID 에 대해서 가입일자별 가입건수 및 소 계 와 전체 가입건수를 구 한 것은 맞으나 LEFT


OUTER JO IN 이 아닌 INNER JOIN 에 대한 결과로 서비스 ID 004가 출력되지 않았다,
정답 및 해설

24 6 i s q l 자격검정 실전문제
SQ L 자 격 검 정 실 전 문 제 i 2 4 5
정 답 및 해설

① 110. ④
설비 ID 에너지코드 사용량 설비 ID 에너지코드 사용량 해설 : 집계 그룹 함수 에 는 ROLLUP, CUBE, GROUPING SETS 함 수 가 있다.
1 비-람 300 1 바람 300 문제의 결과 데이터는 (자재번호별) SUB TOTAL과 (자재번호, 발주처별) SUB TOTAL을 출력 하 고
1 바람 300 1 용수 200 있다. GROUPING SETS 함수를 사용하여 입력된 인수들에 대한 개별 집계를 구할 수 있으며 ,CUBE
1 바람 300 1 전기 100 함수의 경우는 나열된 모든 인수의 결합 가능한 집계가 출력 된 다.그러므로 위의 문제에서는 GROUP
1 바람 300 1 NULL 600 BY GROUPING SETS(자재번호, (발 주 체 D, 발 주 일 자 ))가 되어야 한다. ① ,② ,③의 보기별 결과는
1 바람 300 2 용수 300
아 래와 같다.
1 용수 200 2 전기 200
① ②
1 용수 200 2 NULL 500
1 200 3 자재번호 발주체 D 발주일자 발주수량 자재 번호 발주체 D 발주일天!' 발주수량
용수 전기 300
1 1 1 20140102 100 1 1 20140102 100
용수 200 3 NULL 300
1 200 NULL 1 1 20140103 200
용수 바람 300 1 1 20140103 200
1 전기 100 NULL 용수 500 1 1 발주일자전체 300
1 발주처 전체 발주일자전체 300
1 전기 100 NULL 전기 600 1 발주처 전체 20140102 100
1 전기 100 2 1 20140102 200
1 발주처 전체 20140103 200
1 전기 100 2 2 20140102 100
1 발주처 전체 발주일자전체 300
1 전기 100
2 발주처 전체 발주일자전체 300 2 1 20140102 200
1 NULL 600
3 1 20140103 100 2 1 발주일자전체 200
2 용수 300
2 300 2 20140103 200 2 2 20140102 100
용수 3
2 용수 300 2 2 발주일자전체 100
3 발주처 전체 발주일자전체 300 [
2 용수 300 2 발주처 전체 20140102 300
자재 전체 1 20140102 300
2 용수 300 2 발주처 전체 발주일자전체 300
2 전기 200 자재 전체 1 20140103 300
3 1 20140103 100
2 전기 200 2 20140102 100
자재 전체 3 1 발주일자전체 100
2 전기 200
자재 전체 2 20140103 200 3 2 20140103 200
2 전기 200
자재 전체 발주처 전체 발주일자전체 900 3 2 발주일자전체 200
2 전기 200
2 NULL 500 3 발주처 전체 20140103 300

3 전기 300 3 발주처 전체 발주일자전체 300


3 전기 300 자재번호 발주처 ID 발주일자 발주수량 자재 전체 1 20140102 300
3 전기 300 300 1 20140103 300
1 발주처 전체 발주일자전체 자재 전체
3 전기 300
2 300 자재 전체 1 발주일자전체 600
발주처 전체 발주일자전체
3 전기 300
자재 전체 2 20140102 100
3 NULL 300 3 발주처 전체 발주일자전체 300
자재 전체 2 20140103 200
NULL 바람 300 자재 전체 1 발주일자전체 600
자재 전체 2 발주일자전체 300
NULL 용수 500
자재 전체 2 발주일자전체 300
NULL 전기 600 자재 전 체 발주처 전체 20140102 400
자재 전 체 발주처 전체 20140102 400 20140103 500
NULL 1400 자재 전체 발주처 전체
자재 전체 발주처 전체 20140103 500 자재 전체 발주처 전체 발주일자전체 900
정답 및 해설

sq l 자격검정 실전문제 I 2 4 7 248 i sq l 자격검정 실전문제


정 답 및 해설

111. ②
115. ③
해설 : GROUPPING SETS 함 수 는 표 시 된 인 수 들 에 대 한 개별 집계를 구 하 는 기 능 을 하 며 , 위의 SQL은 해설 : ROW_ NUMB,ER 함수는 ORDER BY절에 의해 정렬된 데이터에 동일 값이 존재하더라도 유일한 순위를
(상 품 ID,월 )별 집계 데 이 터 를 출 력 한 다 . 각 보 기 별 SQL은 아 래 와 같 다 . 부여 하 는 함수로서 데이터 그룹 내에 유일 한 순위 를 추 출 할 때 사 용할 수 있는 함수이다.
① GROUPING SETS에 괄호 를 사용하지 않아 월별과 상 품 ID 별로 각각 집계되었다. 문제의 SQL은 추 천 경 로 별 (PARTITION BY 추천 경 로 )로 추천점수가 가장 높 은 (ORDER BY 추천점수
SELECT 상 품 ID, 월, SUM(매출액) AS 매출액 DES幻 데이터를 한 건 씩 만 출 력하지만,
FROM 월별매출 ① 은 전체 데이터를 그 대로 출력하였으며
WHERE 월 BETWEEN '2014.10, AND '2014.12' ② 는 전체에서 추 천 점 수 가 가장 높은 데이터 한건만 을 출력하였고
GROUP BY GROUPING SETS(월, 상 품 ID); ④ 은 추 천 경 로 별 로 추 천 점 수 가 가장 낮은 데이터를 각 한건씩 출 력하였다.
③ GROUPING SETS에 월별, 상 품 ID 별과 전체가 각각 집계되었다.
SELECT 상 품 ID , 월, SUM(매출액) AS 매출액 116. ®
FROM 월별매출 해설 : GROUP BY 절의 집합을 원본으로 하는 데이터를 WINDOW FUNCTION과 함께 사용한다면 GROUP
WHERE 월 BETWEEN '2014.10' AND '2014.12' BY 절과 함께 WINDOW FUNCTION을 사용한다고 하더 라도 오류가 발생하지 않으며,유사개수 컬 럼
GROUP BY GROUPING SETS(월 ,상 품 ID, ()); 은 상 품 분 류 코 드 로 GROUPING된 집합을 원본집합으로 하여 상품분류코드별 평 균상품가격을 서로
④ GROUPING SETS에 (월 ,상 품 ID ) 별 ,월별로 집계되었다. 비교하여 현재 읽혀진 상품분류코드의 평균가격 대비 -10000 ~ +10000사이에 존재하는 상품분류코
SELECT 상 품 ID ,월 ,SUM(매출액) AS 매출액 드의 개수를 구 한 것이다.
FROM 월별매출

WHERE 월 BETWEEN '2014,10' AND '2014.12' 117. ①


GROUP BY GROUPING SETS((월 ,상 품 ID), 월); 해설 : 안쪽 IN-LINE VIEW 에 의해 아래와 같이 사 원 ID 와 부서별 최고연봉이 결과로 생성되며

사 원 ID 최고연봉
112. ③ 001 3000
해설 : 윈 도 우 함 수 는 결과에 대 한 함 수 처 리 이 기 때문에 결 과 건 수 는 줄지 않는다. 002 3000
003 4500
004 4500
113. ① 005 4500
해설 : 위의 SQL은 고객별 매출 액 과 매출 순 위 를 구하되 동일 순위일 경우 중 간 순 위 를 비워둔 데이터를 006 4500
007 4500
추출한다. 순위 를 구 하는 함수로는 RANK , DENSE_ RANK , ROW_NUMBER 함 수 가 있다. RANK
WINDOW FUNCTION은 동일 값에 대해서는 동일 순 위를 부여하고 중 간 순 위는 비워 두지만, 이를 다시 사원 테이 블 과 사 원 ID = 사원 ID AND 최고연봉 = 연봉으로 JOIN 을 하게 되면 부서별

DENSE_RANK 함 수는 동일 순 위를 부여하되 중 간 순 위 를 비우지 않는다. ROW_NUMBER 함수는 최고연봉의 사원이 출력된다. 아래의 SQL로도 동 일 한 결과를 얻을 수 있다.

동일 값에 대해서도 유 일 한 순 위를 부여한다.1
4
SELECT 사 원 ID , 사원명, 부 세 D , 연봉

114. ④ FROM (SELECT 사 원 ID , 사 원 명 ,부 세 D , 연봉

해설 : 게임상품별로 고객 목록 을 추 출 하 기 위 해 서 는 OVER절에 "PARTITION BY 게임상품 ID "를 적용하여 MAX(연봉) OVER(PARTITION BY 부 세 D) AS 최고연봉


게임상품별 활동 점 수 로 순 위가 추출될 수 있도록 하 여야 한다. FROM 사원)

RANK WINDOW 함수는 OVER절의 ORDER BY에 대한 결과에 따라 동 일한 값을 동 일한 등수로 처 리 WHERE 연봉 = 최고연봉

함과 동시에 중간 순위를 비우는 반면, DENSE_RANK WINDOW 함수는 중 간 순위를 비우지 않는다.
정 답 및 해설

〇 O

sq l 자격검정 실전문제 I 2 4 9 2 50 I SQL 자격검정 실전문제


정 답 및 해설

118. ① 123. ③

해설 : LAG 함수 는 현재 읽혀진 데이터의 이전 값 을 ,LEAD 함수는 이후 값을 알아내는 함수이다. 해설 : P L /S Q L 로 작성된 P ro c e d u re , U s e r D e fin e d F u n c t io n 은 작성자의 기준으로 트 랜젝션을 분 할할 수
위의 SQL에서 각 레코드별 FLAG1, FLAG2의 값은 다음 과 같 으 며 , 있으며,또한 프로시저 내에서 다른 프로시저를 호출할 경우에 호출 프로시저의 트랜잭션과는 별도로
메인 쿼리의 WHERE절이 FLAG1 = 0 OR FLAG2 = 0 이므로 1,
4,5,6번 째 의 행이 출력된다, P R A G M A A U T O N 〇 M O U S _ T R A N S A C T IO N 을 선언하여 자율 트랜잭션 처리를 할 수 있다.

ID S T A R T _V A L E N D _V A L FLA G 1 FLA G 2
A 10 14 0 1 124. ③
A 14 15 1 1 해설 : PL/SQL 에서는 동적 SQL 또는 DDL 문장을 실행할 때 EXECUTE IMMEDIATE를 사용하여야 한다.
A 15 15 1 1
② 번은 ROLLBACK이 가능하도록 삭제 하 는 것이 아니므로 옳은 답이 아니다.
A 15 18 1 0
A 20 25 0 1
A 25 1 0 125. ④
해설 :Stored Module(ex:PL/ SQL, LP / SQL , T- SQL)로 구현 가 능한 기능은 ① ,
②,③ 세 가 지 이 며 ,④
119. Q ) : G RA N T 데이터의 무결 성 과 일관성을 위해서 사용자 정의 함 수를 사용하 는 것은 트리거의 용도이 다 .
© :R E V O K E

해설 : GRANT 명령은 DBMS 사용자에게 권한을 부여할 때 사용하며, REVOKE 명령은 부여된 권한을 회수할 126. ③
때 사용한다. 해설 :Trigger는 Procedure와 달리 Commit 및 Rollback 과 같은 TCL을 사 용할 수 없다.

120. ④ 127. ®
해설 : 권한을 부여하는 명령어는 GRANT이며,WHERE 조건의 데이터를 찾기 위한 SELECT 권한과 데이터 해설 : TRIGGER는 테이 블 과 뷰 ,데이터베이스 작업 을 대상으로 정의할 수 있으며, 전체 트랜잭션 작업에

변경을 위한 UPDATE 권한이 필요하디-. 대해 발생되는 TRIGGER와 각 행에 대해서 발생되는 TRIGGER가 있다.

121. R O L E

해설 : ROLE은 많은 DBMS사용자에게 개별적으로 많은 권한을 부여 하 는 번거로움과 어려움을 해소하기

위해 다양한 권한을 하나의 그룹으로 묶 어 놓 은 논리적인 권한의 그룹이다.

122. ① ,③

해설 : 1. Lee:GRANT SELECT, INSERT, DELETE ON R TO Kim WITH GRANT OPTION;

군 K im 에게 테이블 표에 SELECT, INSERT, DELETE 권한을 주면서, Kim 이 다른 유저에게

테이블 묘에 동 일한 권한을 줄 수 있다.


2. K im :GRANT SELECT, INSERT, DELETE ON R TO Park ;
今 Kim 이 테이블 묘에 Lee에게 받은 권한을 Park 에게 준다.
3. Lee :REVOKE DELETE ON R FROM K im ;

今 K im 에서 테이블 묘의 DELETE 권한을 취소한다.


4. Lee :REVOKE INSERT ON R FROM Kim CASCADE ;

今 K im 과 Park에서 INSERT 권한을 취소한다. WITH GRANT OPTION으로 K im 으로부터 받은


P ark의 권한은 CASCADE 명령어로 받은 권한을 취소 할 수 있다.
정답 및 해설

SQL 자격검정 실전문제 I 2 5 1 2 52 i s q l 자격검정 실전문제


정 답 및 해설

136. ②
( 제 3 장 . S Q L 최적화 기른 원리 ]

137. ③ ,④
128. C B O , 비 용 기 반 옵 티 마 이 저 ,C o st B a s e d O p tim izer 해설 : ① 인덱스를 생 성할 때 정렬 순 서를 내림차순으로 하면 내림차순으로 정렬된다.
② 비용기반 옵티마이저는 SQL을 수행하는데 있어 소요되는 비용을 계산하여 실행계획을 생성하므로
129. ④ 인덱스가 존 재 하 더 라 도 전체 테이블 스캔이 유 리하다고 판 단할 수도 있다.
해설 : 실행계획은 예상 정보이다. 실제 처리 건수는 트레 이 스 정보를 통해서 알 수 있다. ③ 규칙기반 옵티마이저의 규칙에 따라 적절한 인덱스가 존재하면 전체 테이블 스캔보다는 항상 인덱
스를 사 용하려고 한다.
130. @ : 3, © : 4, © : 2 ④ 인덱스 범위 스캔 은 결과 건수만큼 반 환 하 지 만 ,결과가 없으면 한 건도 반환하지 않을 수 있다.
해설 : 실행계획을 읽는 순 서는 위에서 아래로, 안에서 밖으로 읽는다.
그러므로 3 — 4 ᄏ 2 — 6 ᅴ 5 ᅳ 1 순으로 수행된다. 138. ①,③
해설 : ② R E G IS T _ D A T E 조건이 범위 조건 이 고 DEPTNO 컬럼이 후행 컬럼이므로 효율적인 조건 검색을

131. ③ 할 수 없다.
해설 : 실행계획 즉 ,실행방법이 달라진다고 해서 결과가 달 라지지는 않는다. ④ b * tr e e in d e x 는 일반적으로 테이블 내의 데이터 중 1 0 % 이하의 데이터를 검색할 때 유리하다.

132. ② ,④ 139. ④
해설 : SQL 처리 흐름도는 SQL 실행계획을 시각화해서 표현한 것이다. SQL 처리 흐름도만 보고 실행 시간을 해설 : 인덱스를 스캔하여 테이블로 데이터를 찾아가는 방식이 랜덤 엑세스인데, 이러한 랜덤 엑세스의 부하가

알 수는 없다. 크기 때문에 매우 많은 양의 데이터를 읽을 경우에는 인덱스 스캔 보 다 테이블 전체 스캔이 유리할

수도 있다.
133. ① ,④

해설 : 규칙기반 옵티마이저에서 제일 낮은 우선순위는 전체 테이블 스캔이고,제일 높은 우선순위는 R0W 1D 140. ②


를 활용하여 테이블을 액세스하는 방법이다. 해설 : 대량의 ‘데 이터를 조회하는 경우 인덱스를 이용한 조회보다는 테이블 전체 스캔 방식으로 조회 하는것이

SQL 처리 흐름 도 는 S Q L 문의 처리 절차를 시각적으로 표 현 한 것 으로,인덱스 스캔 및 전체 테이블 더 빠를 수 도 있으며,인덱스를 구성하는 컬럼들의 순 서는 데이터 조회 시 성능적인 관점에서 매우

스캔 등의 액세스 기 법을 표 현할 수 있 으며,성능적인 측면도 표현할 수 있다. 중 요한 역할을 한다. 또한 인덱스를 구성하는 컬럼 이외의 데이터가 UPDATE될 때는 인덱스로 인한

인덱스 범위 스 캔은 결과 건수만큼 반 환하지만, 결과가 없으면 한 건도 반환하지 않을 수 있다. 부 하 가 발생하지 않는다.

134. ② 141. ②

해설 : 기본 인덱스 ( P r i m a r y K e y )는 U N IQ U E & NOT N U LL의 제약조건을 가진다. 해설 : N L J o in 은 데이터를 집계하는 업무 보다는 OLTP의 목록 처리 업무에 많이 사용된다, DW 등의 데이터

보조 인덱스는 U N IQ U E 인덱스가 아니라면 중복 데이터의 입력 가능하며,자주 변경되는 속성을 인덱스로 집계 업무에서 많이 사용되 는 J o in 기법은 H a s h J o in 또는 S o rt M erg e J o in 이다.

선정할 경우 UPDATE, DELETE 성능에 좋지 않은 영향을 미치므로 인덱스 후보로 적절하지 않다.1
3
5
142. ③

135. ②, ④ 해설 : 소트 머지 조 인 ( S o r t M erg e J o in ) 을 수행하기에 두 테이블이 너무 커서 소트 (S o r t) 부하가 심할 때는

해설 : 테이블의 전체 데이터를 읽는 경우는 인덱스를 사용하지 않는 FTS를 사용한다. H ash J o in 이 유용하다.

인덱스는 조회만을 위한 오 브 젝 트 이 며 ,삽 입 ,삭 제 ,갱신의 경우 오히려 부 하를 가중한다.

Balance Tree는 관계형 데이터베이스에서 가장 많이 사용 되 는 인덱스이다. 143. ④

인덱스가 존재하는 상황에서 데이터를 입력하면, 매번 인텍스 정렬이 일어나므로 데이터 마이그레이 해설 :E X IS T S 절은 실행계획상에 주로 SEM I JO IN 으로 나타난다. NESTED LOOP, HASH, SORT M E R G E 의

션 같이 대량의 데이터를 삽 입 할 때는 모든 인덱스를 제거하고, 데이터 삽입이 끝 난 후에 인덱스를 SEM I JO IN 이 모 두 나타날 수 있지만,위의 인덱스 정보와 SQL을 볼 때 H A SH SE M I JO IN 보다는

다시 생성 하 는 것이 좋다. N ESTED LO O P S E M I JO IN 이 나타날 가능성이 가장 크다.


정답 및 해설

〇 〇

2 5 4 i s q l 자 격 검 정 실전 문 제
sq l 자격검정 실전문제 i 2 5 3
정 답 및 해설

144. ④
과목 I . SQL 고급활용 및 튜닝
해설 : EQ U I JO IN 에서만 동 작 하 는 J o in 방식은 H a sh J o in 이다, S o rt M erg e J o in 은 N o n - E Q U I J O IN

조 건에서도 사 용할 수 있다.

[ 제1장 . 아키텍처 기반 튜닝 원리 |
145. ④

해설 : 유니크 인덱스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 조인할 때는 NL 조인이 적합하다.

1. ①
146. ① 해설 : 다중 사용자 환경에서 서버와 모든 클라이언트 간 연결상태를 지속하면 서버 자원을 낭비하게 된다.
해설 : ② S o rt M erg e J o in 은 비 동등 J o i n ( N o t E q u i J o i n ) 에서도 사 용할 수 있다. 그렇다고 SQL을 수 행할 때마다 연결 요청을 반복하면 서버 프 로 세 스 (또는 쓰레드)의 생성과 해제도

③ H a sh J o in 은 행의 수가 작은 테이블을 선행 테이블로 선택하는 것이 유리하다. 반복하므로 성능에 좋지 않다. 따라서 OLTP성 애플리케이션에선 C o n n e c t io n P o o lin g 기법의 활용이

④ H a s h J o i n 은 S o r t M e r g e J o i n 보다 일반적으로 더 우 수 한 성능을 보 이 지 만 ,J o i n 대상 테이블이 필수적이다.


J o in Key 컬럼으로 정렬되어 있을 때는 S o rt M erg e J o i n 이 더 우 수 한 성능을 낼 수도 있다.
2. ③
해설 : 익스텐트 내 블록 들 은 서로 인접하지만, 익스텐트끼리 서로 인접하지는 않는다.

3. ①
해설 : L o g F o r c e a t c o m m it 은, 로그 버퍼를 주기적으로 로그 파일에 기록하되 늦어도 커밋 시점에는 반드시

기록해야 함을 뜻한다.
F a s t C o m m i t 은, 사용자의 갱신내용이 메모리상의 버퍼 블록에만 기록된 채 아직 디스크에 기록되지
않았지만 Redo 로 그를 믿고 빠르게 커밋을 완 료 하 는 것을 말한디-.
D e la y e d B lo c k C l e a n o u t 은 오라클만의 독특 한 메커니즘으로서, 변경된 블 록을 커밋 시점에 바로
C l e a n o u t (로우 L o c k 정보 해제,커멋 정보 기록)하지 않고 그대로 두었다가 나중에 해당 블 록을 처음

읽는 세,션에 의해 정리되도록 하는 것을 말한다.

4. ④
해설 :T a b le F u ll S c a n 한 데이터 블 록 은 LRU end에 위치하기 때문에 버퍼 캐시에 오래 머물지 않는다.

5. ① ,④
해설 : R e s p o n s e T im e = S e r v ic e T im e + W a i t T im e = C P U T im e + Q u e u e T im e

6. ①
해설 : SQL 커서의 공유와 재사용성에 관한 문제다. 캐싱된 SQL 커서는 반복 재사용할 수 있을 뿐만 아니라

여러 세션 간에 공유될 수 있다.

7. ①
해설 : 캐시에서 SQL과 실행계획을 식별하는 식별자는 SQL 문장 그 자체다. 따라서 옵 티 마 이 저 는 문자
하 나만 달라도 서로 다른 SQL로 인식해 각각 하 드 파 싱 을 일으키고 다른 캐시 공 간을 사용한다.
1〜 3 번 S Q L 은 S Q L T e x t 가 서로 다르다. S Q L T e x t가 달라 하드파싱은 각각 일어나지만, 의미상 전혀
정 답 및 해설

차 이 가 없으므로 실행계획은 같다.

2 56 I s q l 자 격검 정 실전문 제
s q l 자 격검 정 실전 문 제 i 255
정 답 및 해설

8. ③ 16. ④

해설 : 시용자의 입력 조건이 다양해서 조건절을 동적으로 구성하더라도 조건절 비교 값만큼은 바인드 변수를 해설 : 가 입 일 자 ,고객명을 선두로 갖는 인덱스를 사용한다면 '가 ’ SQL은 인텍스만 읽고 처리를 완료하므로
사용하려고 노력 해 야 한다. 블록 I / O 가 더 적게 발생한다.
가입일자만으로 구성된 단일 컬럼 인덱스를 사용한다면 두 SQL 모 두 테이블 액세스가 불가피하므로
9. ① ,② 블록 I / O 는 똑같다.
해설 : D y n a m ic S Q L 방식으로 코딩했지만,바인드 변수를 사용했으므로 불필 요 한 하드파싱을 많이 일으킨 '가 ’ SQL은 소 트 공간에 고객명만 저장하면 되 지 만 ,’나' SQL은 모 든 컬럼을 저장해야 하므로 더
다고 말하기는 어렵다. 많은 소트 공간 을 사용한다.
바인드 변수를 사용했으 므 로 컬럼 히스토그램은 활용하지 못 하 지 만 ,레코드 건 수 ,컬럼 값의 종류 '나 1 SQL을 수행하면 조건절을 만족하는 모든 컬럼을 클라이언트에게 전송해야 하므로 네트워크 트래픽 이
(N D V ), N u ll 값 개수 등을 활용해 실행계획을 수립한 다 . 더 많이 발생한다.

10. ④ 17. ③

해설 : 바인드 변수를 사 용 하 기 만 하면 루 프 내에서 반복 수 행 되 는 S Q L 이더라도 캐싱된 SQL을 공 유할 수 해설 : 변경이 거의 없는 테이블까지 매일 통계 정 보 를 수 집 할 필요는 없다.
있다. 조.건절을 바꾸지 않고 반복 수행 하 는 경우도 있으므로 3 번 설명은 옳지 않다.

S t a t i c S Q L 은 P r e C o m p ile 과정을 거 치므로 런타임 시 안정적 인 프로그램 B u ild 가 가능하다. 그리고 18. ②

D y n a m ic S Q L 을 사용하면 애플리케이션 커서 캐싱이 작동하지 않는 경우가 있다. 따라서 S t a t ic S Q L 을 해설 : Direct Path I / O는 일반적으로 병렬 쿼리로 Full Scan을 수 행할 때 발생한다.

지원하는 개발환경에선 가급적 이 방 식을 사용 하 는 것이 좋다.

19. ④

11. ①, ③ 해설 : Multiblock I/O 방식으로 읽더라도 Extent 범위를 넘어서까지 읽지는 않는다. 따라서 작은 Extent로

해설 : SELECT 문장 을 수 행 할 땐 P a r s e , E x e c u te , F e tc h 순으로 C a ll이 발생한다. 구성된 테이블을 Full Table Scan하면 I/O Call 이 더 많이 발생한다.
G roup By 결과집합을 만드 는 과정에서의 I 八3 는 첫 번째 F e tc h C a ll 단계에서 일어난다. 반 면 ,인텍스를 통한 테이블 액세스 시에는 Single Block I/O 빙씩을 사용하므로 Extent 크기가 I 八3

Call 횟수에 영향을 미치지 않는다.


12. ②
해설 : 제시된 C a l l S t a t i s t i c s 만으 로 는 O r d e r B y 또는 G roup By 연산의 포 함여부를 판 단할 수 없다. 20. ③
해설 : Sequential I/O 방식은 테이블이나 인덱스를 스캔 할 때 사용한다. Random I/O 방식은 인덱스를
13. ② 스캔하면서 테이블을 액세스할 때 사용한다.
해설 : 모든 데이터 처리가 서버 내에서 이루어지는 프로그램에선 부분범위처리에 의한 성능 개선 효과가 요즘은 NAS 서버나 SAN가 보편적으로 사용되기 때문에 네트워크 속도가 I八) 성능에 큰 영향을 미친다.

나타나지 않는다. RAC 같은 클러스터링 데이터베이스 환경에선 메모리도 I 八) 성능에 영향을 미친다.

14. ②, ③

해설 : SQL을 포함하지 않는 형태의 사 용 자 정의 함 수 라 도 문 맥 전 환 (c o n te x t s w itc h )에 의한 부하가


발 생 하 므 로 성능 저 하 가 발생한다.

작은 코 드 테이블로부터 코 드 명 을 가져오는 경우 사용자 정의 함수보다는 스칼라 서브쿼리를 사용하여


캐싱효과를 누 리는 것이 성 능상 유리하다.

15. ①

해설 : 함 수를 실행할 때마다 컴파일하지는 않는다.


정답 및 해설

s q l 자격검정 실전문제 i 257 25 8 i s q l 자 격 검 정 실전 문제


정 답 및 해설

28. ②
[ 제 2장. L o c k 고ᅡ 트 랜 잭 션 동시성제어
해설 : 대부분 DBMS가 Read Committed를 기본 트랜잭션 격리성 수준으로 채택하고 있으므로 Dirty Read가
발생 할 까 걱정하지 않아도 되지만, Non-Repeatable Read, Phantom Read 현상에 대해선 세심한

21. ③ 주 의 가 필요하다.

해설 : for update 구 문을 반드시 사용해야 할 경우가 많은데,성능을 이유로 이를 사용 못하게 하면 데이터

정합성을 해칠 수 있다. 성능보다 중 요 한 것은 데이터 정합성이다. 29. ③

nowait이나 wait 옵 션 을 잘 활용하면 select for update 문장을 통해 오히려 동시 성 을 높일 수도 해설 : 트랜잭션 격리성 수준 (Transaction Isolation Level)을 상향 조정할수록 일관성은 높아지지만 동시성은

있다. 낮아진다.

22. ④ 30. 2000, 3000

해설 : SQL Server에서 Share Lock과 Exclusive Lock 호환되지 않으므로 1번 SELECT문 에 는 블록킹이 해설 : Oracle은 Update 문장이 시작되는 시작을 기준으로 갱신 대상 레코드를 식별하므로 TX2 트랜잭션의

발생할 수 있다. update 는 실패한다. 따라서 TX1 트랜잭션의 결과가 사원의 최종 결과가 된다.

4 번 INSERT문은 문제의 UPDATE문 과 DEPTNO가 서로 다르고 PK 중복 도 없으므로 블록킹 없이 SQL Server에서 TX2 트랜잭션은 TX1 트랜잭션이 완료될 때까지 기다린다. TX1이 끝났을 때 7788

진행된다, 사원의 sal 값은 2000이므로 TX2 트랜잭션이 정상적으로 진행해 값을 3〇 00으로 바꾼다.

23. ① ,② 31. ③
해설 : READPAST는 Lock이 걸린 행은 읽지 않고 건너뛰도록 하는 힌트다. 해설 : MVCC 모델은 문장 수준의 읽기 일관성을 완벽히 보장하지만, 트랜잭션 수준의 읽기 일관성을 보장하지는

TABLOCK은 테이블 레벨 Lock을 설정하고자 할 때 사용하는 힌트다. 않는다.

24. ③

해설 : 테이블 Lock(=TM Lock)이 Exclusive 모드이므로 Append 모드로 입력한 ③번 SQL 실행 후 Lock

발생현황을 모니 터 링 한 결과이다.

25. ②

해설 : Update 문은 TM Lock은 호환성이 있는 Row-X (SX)모드로, TX Lock은 호환성이 없는 Exclusive


모드로 Lock을 획득한다.

26. ④

해설 : 트랜잭션의 주 요 특 징은 원 자 성 (Atomicity), 일관성 (Consistency), 격 리성 (Isolation), 영속성


(Durability)이며, 영문 첫 글자를 따서 ‘ACID’라고 부른다.
가 .는 원자성, 나 .는 일 관성,다 .는 격 리 성 ,라 .는 영속성에 대한 설명이다.

27, ④

해설 : 100번 세션의 트랜잭션 격리성 수준을 Serializable 요해선로 설정하였으므로 쿼 리 ⑴ 은 5건이 출력되고
쿼 리(2)는 COMMIT이 수행되어 트랜잭션 격 리성 수준이 Read Comitted이므로 200번 세션의 결과가

반영되어 1건이 출력된다.


성i답 및 해설


2 6 0 I SQL 자격검정 실전문제


s q l 자격검 정 실 전 문 제 I 259
정 답 및 해설

40. ③
제 3장. 옵티아미저 원리
해설 : d e p tn o 조건이 인라인 뷰 안으 로 파 고 들 어 간 다 . 따라서 다 음 과 같 은 S Q L 을 기 준 으 로 문 제 를 풀 면

쉽다.

32. ② s e le c t d e p tn o , em pno, e n a m e , jo b , s a l, sal * 1.1 s a l2 , h ir e d a te

해설 : 데이터베이스 Call은 옵티마이저가 수립한 실행계획에 따라 SQL을 수행하는 과정에, 또는 옵티마이저 fro m em p

w here jo b = 'C L E R K ’
에게 실 행 계 획 을 수립해 달라고 요청하 는 과정에 발생한다.
1번은 전통적인 "〇 비용 모델에서 사용 하 는 비용 개념이다. and d e p tn o = 30

3번과 4번은 최신의 CPU 비용 모델에서 사용하는 비용 개념이다. OTU 비용 모델에서도 I 八)는 가장 u n io n a ll

중 요 한 비용 요소다. s e le c t d e p tn o , em pno, e n a m e , jo b , s a l, sal * 1 . 2 s a l2 , h ir e d a te

fro m em p

33. ④ w here jo b = 'S A L E S M A N '

해설 : 직급의 종류 개수(NDV,Number Of Distinct Value)는 CBO가 사용하는 가장 대표적인 통계정보다. and d e p tn o = 30

34. ④ 41. ①

해설 : 전체범위 최적화는 빠른 Response Time보다 Throughput 중심 으 로 최적화를 시행한다. 해설 :① 번 방 식 으 로 처 리 할 경 우 , C a r t e s i a n P r o d u c t 가 발 생 해 결 과 가 틀 릴 수 있 다 .

35. ① ,④

해설 : Selectivity = 1 / NDV
Cardinality - 총 로우 수 x Selectivity - 총 로우 수 / NDV

36. ②

해설 : 통계정보 수집 시 시스템에 많은 부하를 주므로 대용량 테이블에는 흔히 표본 검사 방식을 사용한다.

표본 검사 시 ,가능한 한 적은 양의 데이터를 읽고도 전수 검사할 때의 통계치에 근 접하도록 해야


한다.

37. ②

해설 : 3번은 View Merging이 발생하기 때문에 함수호출 횟 수가 1번과 같다.

4번은 스칼 라 서브쿼리의 캐싱효과를 이용해 함수호출 횟수를 줄이려 했지만, 상품 테이블에서 상품


코드는 Unique 하기 때문에 캐싱 효 과 가 없고 오히려 캐시를 탐색하는 비용만 추가된다.
2 번은 R0WNUM을 이용해 View Merging을 방지했으므로 성능 개선에 도움이 된다.

38. 後

해설 : 뷰 (View) 안에 rownum 을 사용하면 뷰 머 징 (View Merging)을 방지하는 효 과가 나타난다.

39. ②

해설 : Group By를 포함한 뷰는 자주 Merging이 발생한다.


정답 및

3H

O 〇

26 2 | s q l 자격검 정 실전문 제
SQL 자격검정 실전문제 I 2 6 1
정 답 및 해설

{_________ 제4 장. 인덱스와 조인 I
50. ① ,③
해설 : 1 번과 같은 인텍스 구성에서 SQL을 오른쪽과 같이 변환하면 인텍스에서 가입일자 lik e 조건에 해당하는
범위를 2번 스캔하게 된다. 고객등급을 테이블에서 필터링하므로 테이블 Random 액세스량도 2배
42. ④ 증가한다.
해설 : ERD 에서 주 문 과 고 객 은 M :1 관계이고, 주문 테이블 고객 번 호 는 Null 값을 허용하지 않는다. 뿐만 2 번과 같은 인덱스 구성 에 서 는 SQL을 변환하기 전후 블록 발생량이 거의 동일하다.
아 니라 SQL문에서 조인 조건 외에 어디서도 고객 테이 블 을 참조하지 않고 있다. 따라서 고객과의 3 번과 같은 인덱스 구성에서는 고객등급을 인덱스에서 필터링하므로 테이블 Random 액세스량은 늘지
조인은 불필요 하 다 . 않지만, 인덱스에서 같은 범위를 2번 스캔하므로 블록 I/O 가 오히려 늘어난다.
4 번과 같은 인텍스 구 성에서는 SQL을 변환한 후 블 록 VQ 발생량이 크게 줄 어든다.
43. ②

해설 : 인덱스 정렬 순서 상 d e p tn o = 20 a n d s a l = 2 0 0 0 조건을 만족하는 첫 번째 레코드에서부터 수평적 51. ② ,④


탐 색을 시작한다, com m 조건이 le s s t h a n or e q u al 인 점에 주목하자. 해설 : T A B 1 _X 0 1 인텍스의 클러스터 링 팩터는 매우 나쁜 상태다. 테이블 액세스 횟수만큼 블록 "〇 가 발생한
comm 조건이 more than or equal 이 면 ,deptno ; 20 and sal = 2000 and comm = 100 조건을 것을 통해 이를 알 수 있다.
만족하는 첫 번째 레코드에서부터 스캔 을 시작한다. 511 개 인덱스 블 록을 스캔했는데, 이것은 인덱스 스캔 과정에서 얻는 266,476 개 레코드 수에 비하면
그리 큰 수치가 아닌다. 비효율이 크지 않다는 뜻이다. TABIXW 인덱스 컬럼 순 서를 조정하면 블록
44. ④ I/O 가 약간 감 소할 수 있을지 모 르 지 만 ,전체 성능에 미치는 영향은 크지 않을 것이다.
해설 : Index Range Scan 이 가능하려면 인덱스 선두 컬럼이 조건절에 사 용 되 어 야 한다.

52. ③
45. © 해설 : 인덱스를 설계하는 가장 중요한 선택 기준은, 조건절에 항상 또는 자주 시용되는지 여부와 느' 조건으로
해설 : Index Skip Scan을 활용하려면 인덱스 선행칼럼이 누락됐거나 부등호, between, like 같은 범위검색 자주 조회되는지 여부다, 인덱스 선두 칼럼이 일단 조건절에 사용돼야 해당 인덱스가 사용될 수 있으므로
조 건이어야 한다. 전자가 특히 중요하다.

1 번의 경 우 ,인덱스 선두 칼럼이 사 용 됐 지 만 성별 칼럼이 조건에서 누락됐으므로 In d e x Skip Scan


활용이 가능하다. 53. ③
해설 : 상 품 코 드 는 인덱스 구성컬럼이 아니므로 주 문 테이블 액 세스 (ID = 1 ) 단계의 필터조건이다.
46. ②, @

해설 : sal 컬럼을 선두로 갖는 인텍스가 없으므로 range scan은 사 용할 수 없다. 54. ②


fast full scan은 인덱스에 포함된 칼럼 으 로 만 조 회 할 때 사 용할 수 있다. 해설 : 고객 _IDX 가 연령+고객등급 구성이라면 순 서를 바꿨을 때 액세스량 개선 가능
한 달간 주문 건수는 평균 50만 건이므로 조인 순서 변경은 성능에 도움이 되지 않는다.

47. ①

해설 : 성별처럼 Distinct Value 개수가 적은 컬럼에 사용할 때 B* Tree인덱스보다 훨씬 적은 공간을 차지하기 55. ③

때문에 유리하 지 만 , 테이블 Random 액세스 발생 측면에선 그다지 잇점이 없다. 해설 : 직업코드 조건으로 인덱스를 R a n g e S c a n 하려면 직업코드를 선두로 갖는 인덱스여야 한다. 고객 _ X 0 1

인덱스가 여기에 해당한다,

48. ② 인텍스 구성컬럼 중 하나라도 NOT NULL 컬 럼 이 면 ,IS NULL 조회에 인덱스를 시-용할 수 있다.

해설 : 계좌번호 = ,지점번호 b e tw e e n 조 건 만 으 로 도 충분히 스캔 범 위 를 줄일 수 있다. 따라서 직업코드 IS NULL 조회에 고객 _ X 0 1 인덱스를 사 용할 수 있다.

49. ③ 56. ① ,③

해설 : 배송상태 = ‘ING’ 조건절이 없더라도 고객 ID ,연락처, 고객 등 급 을 읽기 위해 테이블을 액세스해야 해설 : 테이블 Alias 가 있은 상황에선 반드시 Alias를 사용해야 한다.

한다.
정답 및 해설

G -- ©—

s q l 자격검정 실전문제 I 263 2 6 4 | s q l 자 격 검 정 실전 문 제


정 답 및 해설

57. ② ,③
65, ④
해실 : 해시 조인할 때는 작은 집합으로 해시 테이블을 생성하는 것이 유리하다. OLTP 환경에서 수행빈도가 해설 : 윈도우 함 수가 사용된 SQL 실 행 계획에는 WINDOW SORT 오퍼레이션이 나 타 난 다 ‘
아주 높 은 쿼리를 해시 조인으로 처리하면 CPU Usage가 높아질 수 있다.

66. ②
58. ④ 해설 : union all 은 정렬 오퍼레이 션 을 발생시키지 않는다.
해설 :Result Cache가 아 니라 PGA에 캐싱한다. ④번 option 구 문 은 오 라클 ordered use_merge에 해당하는 MS-SQL Server 힌트다. Sort Merge

조인 이 므 로 정렬 오프레이션이 발생한다.
59. ③

해설 : 대량 집합을 기준으로 NL 조인하면 많은 랜덤 I 八3가 발생한다. 67. ④


S Q L 1 에서 판 매 시 작 일 자 조 건을 만족하 는 상 품 건수가 적다면, 일별매출보다 상 품 테이블을 먼저 해설 : union 을 union all 로 대체하려면 아래 두 조 건을 만족해야 한다.
드라이빙 하 는 게 유 리 할 수 있다. 1번은 위아래 두 집합이 서로 배타적이어야 한다.
S Q L 2 에서 v_ 판매시작일자 변수에 최근일자를 입력하면 판매시작일자 조 건을 만족하는 상품 건수가 2번은 위아래 각 집합에 중복 값이 없어야 한다.
적어지므로 그만큼 비효율이 커진다. 기준일자 B e tw e e n 조건에 해당하는 많은 일별매출 데이터를 3번은 위아래 두 집합이 서로 배 타 적 이 지 만 ,각 집합에 중 복 값이 있을 수 있다.
읽고 Group By 처리까지 마쳤는데, 상품 테이블과 조인하는 과정에 많은 데이터가 필터링되기 4번은 PK 컬럼을 포함하기 때문에 모든 레코드가 완전 배타적이다.
때문이다.

68. ①
60. ② 해설 : ①번 방식으로 처리할 경우,결과가 틀릴 수 있다.
해설 : Hash 조 인은 조 인 만 가능함

69. ③
61. ③ 해설 : 1번은 Random 액세스 방식이므로 전체 고객을 대상으로 조회할 때 비효율적이다. 2번은 고객변경이력
해설 : 선분이력 각각을 b e t w e e n 으로 조회하면 된다, 테이블을 2번 액세스하는 비효율이 있다. 4 번은 Top-N 쿼리 알고리즘이 작동하지 않아 3번에 비해

소트 부 하가 더 크다.
62. ③

해설 : 인텍스 파티션 키가 인덱스 선두 컬럼이어야 한 다는 제약은 Global 파티션 인텍스에 해당한다.

Local 파티션이든 G lo b a l 파티션이든,인덱스 파티션 키가 조건절에 없으면 인텍스 사용 시 비효율이


발생한다. 문제를 풀 때,L o c a l 파티션 인텍스의 경우,테이블 파티션 키가 인텍스 파티션 키가 된다는

점에 주의하기 바란다.

63. ① ,②

해설 : List 파 티 셔 닝 과 Range 파티셔닝 모두 가능하다. Range 파티셔닝의 경 우 ,예를 들어 , 매년 1〜 3,


4-6, 7, 8, 9, 10~12월 6개로 파티셔닝하면 된다.

H ash 파 티 셔 닝 은 정해진 파티션 개수로 파티션 키 값에 따라 DBM S가 기계적으로 분할 저장하기

때문에 월별 매출 특 성 을 고 려한 파 티 셔 닝 을 하 기가 곤란하다.

64. ③

해설 : 칼럼끼리 연산할 때 null 을 포함하면 결과는 null 이다.

레코드끼리 연산할 때 n u ll을 포함하면 결과가 n u ll이 아니 며,이유는 m ill을 연산에서 제외하기 때문

이다.





〇 O

SQL 자 격 검 정 실전 문 제 I 2 6 5 2 66 I s q l 자 격검 정 실전문제
정 답 및 해설

78. ①
저15장. 고급 SQL 튜닝
해설 : Local Prefixed 파티션 인덱스는 인덱스 선두 컬럼이 파티션 키인 경우를 말한다.
거래일시 기준으로 파티셔닝된 테이블에 인덱스를 Local 파티셔닝한다면 인덱스 파티션 키도 거래일
70. ③ 시가 된다.
해설 : INSERT ALL 구분에 APPEND 힌트를 사용하면 모든 테이블에 Exclusive 모드의 TM 락이 설정된다.
SID TYPE MODE_HELD MODE_REQD USN/TABLE SLOT SQN BLOCKING 79. ①, ④
해설 : Global 파티션 인덱스인 거래_ IDX1의 파티션 키는 거래일자이고 파티션 키가 인덱스 선두 컬럼이므로
100 TM Exclusive None 주식월별시세 ««< Prefixed 파티션이다.
100 TM Exclusive None 선물월별시세 거래_ IDX 2는 Local 인텍스이므로 파티션 키는 거래일자가 된다. 파티션 키가 인덱스 선두 컬럼이
100 TX Exclusive None 9 4 1421 아니므로 Nonprefixed 파티 션 이 디 '
200 TM None Exclusive 주식월별시세
80. ①
71. ① 해설 : 같은 시간대에 수 많 은 프로그램이 집중적으로 수행되면 총 수행시간이 더 늘어난다. 자 원 (CPU,
해설 : Append 모드로 INSERT하면 Exclusive 모드 테이블 Lock 이 걸린다. Memory, Disk 등 )과 Lock(Latch와 같은 내부 Lock까지 포함)에 대한 경합이 발생하면서 프로세스가

실제 일한 시간보다 대기하는 시간이 더 많아지기 때문이다.


72. ②

해설 : nologging 모드는 INSERT문일 때만 기능이 작동한다. 81. ④


해설 : 테이블을 nologging 모드로 바꾸면 Redo Log가 생성되지 않도록 할 수 있지만,이 기능은 append
73. ③ 또는 parallel 힌트를 사용해 Direct Load Insert 할 때만 작동한다.

해설 : (A) 의 서브쿼리를 세미조인 방식으로 변경해도 조인에 참여하는 테이블이 더 많으므로 (피보다 I 八)가

더 많이 발생한다. 82. ③
해설 : 주 문 테이블이 고객번호 기준으로 Hash 서브 파티 셔 닝 돼 있으므로 Partial Partition Wise Join 을
74. ③ 활 용 하 는 것이 유리하다.
해설 :Oracle에서 nologging 기능은 insert 문장 에 서 만 효과 가 있다.

75. ②

해설 : 테이블이나 인덱스를 파티셔닝하면 저장 효 율은 오히려 나빠질 수 있다.

76. ③

해설 • 파티션 칼럼에 대한 검색조건을 바인 드 변수로 제공하더라도 Partition Pruning 은 작동한다.

77. ①, ②

해설 : ③은 파티션 키 칼 럼을 가공했으므로 모든 파티 션 을 Full Scan하게 된다.

④은 주문 테이블이 월단위로 파티션돼 있는데 일 단위로 조회 조건을 제공하므로 각 월에 속한 일자


개수만큼 파티션 Full Scan을 반복하게 된다.
정답 및 해설

公 〇

SQL 자 격 검 정 실 전문 제 I 2hl 268 i s q l 자격 검 정 실전문 제


정 답 및 해설

SQL 전문가 실기문제 정답 및 해설 실기문제 1 - 해설

누적매출 (miming total)을 구할 때, 원도우 함수를 지원하는 DBMS 버전이라면 윈도우 함수가 가장 효과적이고
실기문제 1 - 정답
성능도 빠르다. 윈도우 함 수를 사용 할 때는 partition by 절을 정확히 작 성 하 는 것이 무엇 보 다 중요하다.

원도우 함수를 지원하는 DBMS 버전이라면 부등호 조인을 이용해 누적매출을 구할 수 있다. 스칼라 서브쿼 리를
① 윈도우 함 수 를 이용한 방식
이용하는 방법도 있지만, 전체범위처리에 결코 효과적이지 못하다.

select 지점,판매월
, 매줄
, sum(매줄) over (partition by 지점 order by 판매월) 누적매출
from 월별지점매출;

또는

select 지점,판매월
, 매줄
, sum(매줄) over (partition by 지점 order by 판매월 range between unbounded preceding and
current row) i f 적n제
from 월별지점매출;

② 윈도우 함 수를 이용하지 않는 방식

select t l . 지점, t l . 판매월


, 매출) 매출
, sum(t 2. 매출) 누적매출
from 월별지점매출 t l , 월별지점매출 t 2
where t 2. 지점 = t l . 지점
and t 2. 판 매 월 〈= t l . 판매월
group by t l . 지점,t l .판매월
order by t l . 지점,t l .판매월;

또는

select t l . 지점,t l .판매월


,t l . 매줄
,sum(t 2. 매출) 누적매출
from 월별지점매출 t l , 월별지점매출 t 2
where t 2. 지점 = t l , 지점
and t 2. 판매월 <= t l . 판매월
group by t l .지점,t l .판매월, t l .매출
order by t l . 지점,t l ,판매월;
정답 및 해설

〇 〇

s q l 자격검정 실전문제 I 26 9 2 7 0 I SQL 자격검정 실전문제


정 답 및 해설

실기문제 2 - 정답 실기문제 3 - 정답

create index 고객_idx on 고객(거주지역코드,고객명); [ S Q L 1 모범 답 안 ]

create index 주문_idx on 주문(고객번호, 주문일.시) local; s e le c t 주 문 번 호 , 업 체 번 호 , 주 문 일 자 , 주문 금 액

, c o u n t(* ) ov e r ( p a r titio n by 업체번호) 총 주 문 횟 수

, a v g ( 주 문 금 액 ) o v e r ( p a r t i t i o n b y 업 체 번 호 ) 평균 주 문 금 액
select /*+ leading(c) use_ nl (o) index(c 고객_ idx) index(o 주문_ idx) * /
, m a x (주 문 금 액 ) o v e r ( p a r t i t i o n b y 업체번호) 최대주문금액
〇 .주문일시,〇 . 주문번호, c. 고객번호,c. 고객명, o, 주문금액
fro m 주문
from 고객 c, 주문 〇
w h e re 주 문 일 자 l i k e '2 0 1 5 0 9 % '
where 〇 .주문일시 between to_ date('20150301', yyyymmdd')
o rd e r b y 평균주문금액 desc
and to_ date('20150314235959', 'yyyymmddhh24miss')
and o, 고객번호 = c. 고객번호
and (c. 거주지역코드,c.고객명) in ((’02’, ’김철수’), ('05', '홍길동1)) [ S Q L 2 모범 답 안 - 1]

s e le c t 주 문 번 호 ,업 체 번 호 ,주 문 일 자 ,주문 금 액
order by o. 주문일시, c, 고객명
fro m (

s e le c t r o w _ n u m b e r ( ) o v e r ( p a r t i t i o n b y 업 체 번 호 o r d e r b y 주 문 번 호 d e s c ) r n u m

,주 문 번 호 ,업 체 번 호 , 주 문 일 자 , 주문 금 액
fro m 주문
실기문제 2 - 해설 w h e re 주 문 일 자 l i k e '2 0 1 5 0 9 % '

)
w here r n u m = 1
고객 2〇 여 건을 읽어 주 문과 조 인한 후 최종적으로 5건을 출력하는 SQL문이다. 소량 데이터를 조인할 때는

가급적 인덱스를 이용한 NL 조인을 활용해 야 한다.


[ S Q L 2 모범 답 안 - 到

s e le c t 주 문 번 호 , 업 체 번 호 ,주 문 일 자 , 주 문 금 액
고객 테이블에 인덱스를 사 용 하 려 면 ,거 주 지 역 코 드 와 고객명 을 가공하지 않 아야 한다. 문 자 열 로 결합한
fro m (
부 분 을 아래와 같이 변경하면 된다.
s e le c t m a x ( 주 문 번 호 ) o v e r ( p a r t i t i o n b y 업체번호) 마지막주문번호

and (c.거주지역코드,c.고객명) in ((’02’,’김철수’), ('05', '흥길동'))


fro m
,주 문 번 호 ,업 체 번 호 , 주 문 일 자 ,주문금액
주문
w here 주 문 일 자 l i k e '2 0 1 5 0 9 % '
OR 또는 UNION ALL 방식을 사용해도 성능은 같다. OR 조건을 사용할 때는 가급적 USE_CONCAT 힌트를
)
같이 사용 하 는 것이 좋다. w h e re 주 문 번 호 = 마 지 막 주 문 번 호
인덱스는 「
거주지역 코 드 + 고 객명」 또는 「
고객명 + 거주 지 역 코 드 」 순으로 구성하면 된다.

인덱스를 이용해 주 문 테이블과 NL 조인하려면 고객번호 + 주문일시 순 으로 인덱스를 구 성 해 야 한다.


주문일시 + 고객번호 순으로 인덱스를 구성해도 인텍스 사용은 가능하지만, Between 조건이 선두컬럼이므로 실기문제 3 _ 해설
매우 비효율적이다.

실 무 적 으 로 활 용 도 가 매 우 높 은 윈 도 우 함 수 를 적절히 구 사 할 줄 아는 지 확 인 하 는 단 순 한 문 제 다 . 참 고 로 ,

S Q L 2 는 모 범 답 안 1 이 더 효 과 적 이 다 . 모 범 답 안 2 에 비해 소 트 공 간 을 덜 사 용 하 기 때문이다.
정답 및 해설

〇 〇

SQL 자 격 검 정 실 전 문 제 I 2 7 1 272 |s q l 자 격검 정 실전문 제


정 답 및 해설

厂 실 기 문제 4 - 정답 실기문제 4 - 해설

옵션조건에 대한 최적 SQL 작 성 능 력 을 확인하 는 문제다.


[ SQL 모범 답 안 1 ]
고객번호처럼 조회조건 포함 여부를 사용자가 선택할 수 있는 옵션조건을 처리할 때 모범답안 3처럼 UNION
s e le c t、
고 객 번 호 ,주 문 일 시 ,주 문 금 액 , 우 편 번 호 ,배송지
fro m 주문 ALL을 사용하면 가장 확실한 성능을 보장할 수 있다, 오라클의 경우 ,NVL 또는 DECODE를 사용하면 옵티마이

w h e re 고객번호 = n y l(:
c u s t_ n o , 고 객 번 호 ) 저가 UNION ALL 방식으로 자동 변환해 준다.

and 주문일 시 〉= t o _ d a t e ( : o r d _ d t l ,’y y y y m m d d ’) 오라클도 모든 NVL/ DECODE를 UNION ALL로 변환해 주지는 않는다. 또한,조건절 컬럼이 Null 허용컬럼일
and 주문일 시 < to _ d a te (:o r d _ d t2 , ’y y y y m m d d ’) + 1 때 NVL/ DECODE를 사용하면 결과집합에 오 류가 발생한다. 대개 옵션조건이 여러 개이고 그 중 Null 허용
order by 주문일 시 desc 컬럼을 포 함할 수 있으므로 실무적으로 NVL/ DECODE와 UNION ALL을 적절히 혼용 해 야 SQL을 최적화할

수 있다.
다행히 본 문제에서는 옵션조건이 단 하나뿐이고 Not Null 컬럼이므로 NVL/DECODE 사용이 가장 효과적이다.
[ SQL 모범 답 안 2 ]
s e le c t 고 객 번 호 ,주 문 일 시 ,주 문 금 액 ,우 편 번 호 ,배송지
프로그램 사용자가 고객번호를 입력할 때 가장 최적으로 수행하려면 인덱스를 고객번호 + 주문일시 순으로
fro m 주문 *
구 성 해 야 한다. 고 객 번 호 를 입력하지 않을 때는 주문일시만으로 조회하므로 인텍스를 주문일시 단일컬럼으로
w h ere 고 객 번 호 = d e c o d e (:
c u s t_ n o , n u ll, 고 객 번 호 ,:c u s t_ n o )
구성하면 최적이다.
and 주문일시 > = t o _ d a t e ( : o r d _ d t l , y y y y m m d d ')
인덱스를 주문일시 + 고객번호 순으로 구성하면 2가지 케이스를 모두 처리할 수 있다, 하지만, 특정 고객을
and 주 문 일 시 〈 t o _ d a t e ( : o r d _ d t 2 ,’y y y y m m d d ’) + 1
조 회 하 고 자 할 때마다 인덱스에서 평균적으로 6〇 ,000건을 스캔해야 하므로 매우 비효율적 이다. 주문일자에
o r d e r b y 주문일시 desc

최대 1주일까지 입력할 수 있다고 했으므로 이때는 14〇 ,〇 〇 〇 건을 스캔 해 야 한다.

[ SQL 모범 답 안 3 ] 실무적으로 많이 사용하는 옵션조건 처리방안이 2가지 더 있다.


s e le c t 고 객 번 호 ,주 문 일 시 , 주 문 금 액 ,우 편 번 호 ,배송지 첫째,아래와 같이 〇 R 조건을 사용하는 방법이다. 문 제는 ,OR 조건을 사용했으므로 고객번호를 인덱스 조건
fro m 주문 으로 사용할 수 없다는 점이다. 인덱스를 사용하려면 주문일시 인덱스를 사용해야 하므로 사용자가 고객번호를
w h ere : c u s t _ n o is n o t n u l l 입력하더라도 주문일시 조건에 해당하는 데이터를 모두 액세스하게 된디-. 따라서 고객번호처럼 변별력이 좋아
and 고 객 번 호 = :c u s t_ n o
인텍스 활용성이 높은 컬럼에 OR 조건을 사용해선 안 된다.
and 주문 일 시 ) = t o _ d a t e ( : o r d _ d t l , y y y y m m d d ')
and 주 문 일 시 〈 to _ d a te (:o rd _ d t2 , y y y y m m d d ') + 1
s e le c t 고 객번호, 주문일시, 주 문 금 액 ,우 편 번 호 ,배송지
u n io n a ll
fro m 주문
s e le c t 고 객 번 호 ,주 문 일 시 ,주 문 금 액 ,우 편 번 호 , 배송지
where (고객 번 호 = :cust_no or :
cust_no is null )
fro m 주문
and 주 문 일 시 〉= to_ date ( :
ord_dt 1, yyyymmdd')
w here ! c u s t _ n o is n u l l

and 주 문 일 시 〉= t o _ d a t e ( I o r d _ d t l , ,
yyyym m dd,
)
and 주문일시 < to_ date (: ord_ dt 2, ’yyyymmdd’) + 1

and 주 문 일 시 〈 t o _ d a t e ( : 〇 r d _ d t 2 ,,
yyyym m dd,
) + 1 order by 주문일시 desc
o rd e r b y 2 desc

둘째, 아래와 같이 LIKE 조건을 사용하는 방법이다. 문제는,고객번호가 Number 형인 상황에서 LIKE 조건을

사용하면 묵시적 형변환이 발생한다는 점이다, 따라서 고객번호를 선두로 갖는 인덱스로는 Index Range Scan이
[ 인덱스 구 성 안 ] 불가능해진다. Index Range Scan이 가능하게 하려면 주문일시 + 고객번호 순으로 인덱스를 만들어야 하므로,
X01 :고 객 번 호 + 주문일시 인덱스 스캔 과정에 많은 비효율이 발생한다.
X02 :주문일시
정답 및 해설

2 7 4 I SQL 자 격 검 정 실전문 제
s q l 자격검정 실전문제 I 273
정 답 및 히(설

select 고 객 번 호 ,주문일 시 , 주 문 금 액 ,우 편 번 호 ,배송지


실기문제 5 - 정답
from 주문
where 고객번호 like :cust_no | | '%'

and 주 문 일 시 〉= to_ date ( :


ord_ d tl , yyyymmdd')
and 주 문 일 시 〈 to_ date (: ord_ dt 2,,yyyymmdd,
) + 1 [ 페이징 처리용 SQL ]
order by 주문일시 desc s e le c t a . 고객번호,a , 고객명,a . 등록일시,a . 연락처,a . 주소

,( s e le c t m a x (접속일시)

fro m 고객접속이력
w h e re 고객번호 = a, 고객번호
and 접 속 일 지 〉= tru n c (a d d _ m o n th s (s y s d a te , 一1))) 최근접속일시
fro m (

s e le c t r o w n u m as no, a, *

fro m (

s e le c t 고객번호,고객명,등록일시, 연락처,주소
fro m 고객
w h ere 고객상태코드 = 'A C '

order by 등록일시,고객번호
) a
w h e r e r o w n u m 〈= :p a g e * 20

) a
w here no ) = (:page-1) * 2 0 + 1

[ 파일 출력용 SQL ]
s e le c t a . 고객번호,a . 고객명,a . 등록일시, a. 연락처, a . 주소, b . 최근접속일시
fro m 고객 a

, ( s e le c t 고객번호,m a x (접속일시) 최근접속일시


fro m 고객접속이력
w here 접속일지 )= tru n c (a d d _ m o n th s (s y s d a te , - 1 ))

group by 고객번호) b

w here a. 고객상태코드 - 'A C r

and b, 고객번호 = a. 고객번호


o rd e r b y a. 등록일시, a, 고객번호

[ 인덱스 설계 ]
고객 인덱스 : 고객상태코드 + 등록일시 + 고객번호
고객접속이력 인덱스 : 고객번호 + 접속일시
정답 및 해설

〇 O

27 6 I s q l 자 격검 정 실전문제
SQ L 자 격 검 정 실전 문 제 I 2 7 5
정 답 및 해설

( 실기문제 5 - 해귤 실기문제 6 - 정답
= )

1. 화면 페이징 처리용 SQL을 정확히 작성해야 한다.


a l t e r s e s s io n e n a b le p a r a l l e l d m l;
온라인 화면 페이징 처리용 SQL은 최초 응답속 도 최 적 화 (first_r0wS) 목표에 맞게 SQL을 작성 해 야 한다.
인덱스를 이용해 부 분 범 위 처 리 가 가 능하도록 구현해 야 한다.
in s e r t /* + p a r a l l e l ( t 4) * / i n t o 주문배송 t
모범답안으로 제시 한 SQL의 유 일 한 단점은 앞 페이지에서 읽은 데이터를 다시 읽어야 하므로 뒤 페이지로 s e le c t / * + le a d i n g ( d ) u s e _ h a s h ( o ) u s e _ h a s h ( c )

이동할수록 블록 I / O가 늘어난다는 점이다. 하지만 뒤족 페이지로 이동하는 경우가 흔치 않다는 요건을 명시 f u l l ( o ) f u l l ( d ) in d e x _ f f s ( c )

하였으므로 표준적인 페이지 처리 방안으로 가장 적합하다. 실제 대부분 시스템에서 이 방식을 사용하고 p a r a ll e l ( o 4) p a r a l l e l ( d 4) p a r a l l e l _ i n d e x ( c 4 ) * /

있다. 〇 ,주문번호,0 .주문일자,0 .주문상품수,◦.주 문 상 태 코 드 , 0.주문고객번호,C.고객명

참 고 로 ,앞 페이지에서 읽은 데이터를 다시 읽지 않게 구현하려면 UNION ALL 방식으로 매우 복잡하게 ,d. 배송번호,d . 배송일자, d. 배송상태코드,d. 배송업체번호, d . 배송기사연락처

fro m 주문 〇 , 배송 d, 고객 c
구 현 해 야 만 한다. 실제 구현해 본 독 자 라 면 ,order by를 명시할 수 없다는 사 실 을 알 것이다. sort order
w here 〇 .주문일자 b e tw e e n '2 0 1 6 0 6 0 1 ' a n d ’2 0 1 6 0 8 3 1 ’
by 연산이 나타나므로 의도했던 바와 다르게 전체범위 처리가 불가피해지기 때문이다. 결국,order by 절을
and 〇 . 주문번호 = d . 주문번호
생 략한 채 index 힌트를 이용해 정렬된 결과집합을 얻게 된다. 향후에 혹시 인텍스 구성이 변경되기라도
and d. 배송일자 - '2 0 1 6 0 6 0 1 '
하면 정확한 결과집합을 보 장 할 수 없게 되므로 시스템 운영 과정에 주 의 가 필요하다.
and c. 고객번호 = 〇 . 주문고객번호

2. 화면 페이징 처리용 SQL에서 최 근접속일시는 맨 바깥쪽 SELECT-LIST에서 스 칼 라 서 브쿼리로 구현해야

한다 . 화면에 출 력 하 는 20건에 대해서만 스칼 라 서브쿼리를 수행 하 도 록 하기 위함이다.


........................ \
, 기문제 6 _ 해 설 ____________ J
3. 파일 출력 용 SQL을 정확히 작 성 해 야 한다. 전체 데이터 출 력 용 SQL은 전체 응답속도 최 적 화 (all_r 〇 wS)
목표에 맞게 SQL을 작성해 야 한다.
1. 다른 트랜잭션에 의한 동시 DM L이 없는 야간 배치용 S Q L 이므로 병렬 DML 활용이 가능하다. 병렬로 In s e r t

4. 고객 인덱스를 정확히 설계해야 한다. 하려면 우선 아래와 같이 p a r a lle l D M L 을 활 성화해야 한다.

파일 출 력용 SQL은 인덱스를 사용하면 오히려 비효율적이다. 따라서 인덱스는 화면 페이징 처리용 SQL에
최적화되 도 록 설계해야 한다. a l t e r s e s s io n e n a b l e p a r a l l e l d m l ;

고객상태코드로 인덱스를 Range Scan하려면 선두 컬럼은 고객상태코드여야 한다. 부분범위 처 리 가 가능하

게 하려면, order by절 컬럼인 등 록 일 시 ,고객 번 호 를 뒤쪽에 추가하면 된다. O r a c le llg R 2 부터는 e n a b le _ p a r a lle l_ d m l 힌트도 제공된다.
p a r a lle l D M L 을 활성화 한 상태에서 in s e r t 바로 뒤에 p a r a lle l 힌트를 주가하면 된다.
3 , 0 0 0 만건 정도라면 D ir e c t P a t h L o a d 기능만 활용해 도 충분히 빠르게 In s e r t 할 수 있다, D ir e c t P a t h
5. 고객접속이력 인덱스를 정확히 설계 해 야 한다.
조건인 고 객번호를 선두에 두고, 부등호 조건인 접속일지를 뒤쪽에 추가하면 된다. Load 기능을 사용하려 면 in s e r t 바로 뒤에 append 힌트를 주가하면 된다. 참 고 로 ,p a r a l l e l In s e r t는 따로
append 힌트를 사용하지 않아도 기본적으로 D ir e c t P a t h Load 방식으로 작동한다.

2. 인텍스를 이용한 NL 조 인은 소량 데이터를 조인하는 데 적합하다. 수 십 만 건 이상 데이터를 조 인 할 때는


캐시히트율이 좋지 않는 한 결코 빠른 성능을 기대할 수 없다. 3 ,0 0 0 만 건에 이르는 데이터를 조인하면서

캐시히트율이 좋 기를 기대할 수는 없다. 따라서 주문, 배송을 F u ll S c a n 과 해시 조인으로 유 도 해 야 한다,


특히 주문 테이블은 주문일자 기준으로 월단위 Range 파티션된 상태다. 다른 조건절 없이 주문일자(파티션키)
조 건만으로 3 개월치를 조회 하 는 데 인덱스를 이용할 하등의 이유가 없다. 예를 들 어 ,어떤 초등학교에서
1층부터 6 층까지 각 층 을 한 학년씩 사용한다고 하자. 설문조사를 위해 3 학년 학생 전체를 만나고자 할 때,
정답 및 해설

교무실에 비치된 학적 부 가 필요할까? 3층 전체를 스캔하는 것이 가장 빠르다.


—ᄋ

2 78 | s q l 자격검정 실전문제
sq l 자격검정 실전문제 I 2 7 7
정 답 및 해설

3. 배송 테이블은 배송일자 기준으로 Range 파티션된 상태인데, 배송일자가 조건절에 없다. 따라서 Full & an 으
로 처리한다면 전체 파티 션 을 읽어야 한다. 3,000만건 조인하기 위해 수십억 건을 읽어야 할 수도 있다.
실행계획 W 번 라인 ‘PARTITION RANGE ALL’을 통해 이 사 실을 확 인 할 수 있다.

이 문 제 를 어떻게 해 결할 수 있을까? 배송은 주문이 완료된 후에 시작된다는 데서 힌트를 얻을 수 있다.


배송일자는 주 문 일자보다 크 고 ,주문 일 자 는 '20160601'보다 크다. 따라서 배송일자도 ’20160601’보다 크다.

아래 조건절을 추가해 주면 전체 파티션을 읽지 않아도 된다.

and 배 송 일 자 〉= '20160601'

설령 이 조건절을 추가하지 않아 전체 파티 션 을 읽더라도 인덱스를 이용한 NL 조인 보 다 Full Scan과 해시


조인이 빠르다,

4. 스 칼 라 서브쿼리는 NL 조인과 같은 방식으로 작동한다. 스 칼 라 서브쿼리는 입력 값과 결과 값을 PGA에

캐싱한다는 점이 다르다. 따라서 입력 값 종류가 적을 때 실제 조인 횟수를 줄여줌으로써 빠른 성능을 기대할

수 있다.
여기서는 고객 수 가 500만 명이라고 명시했다. 스칼라 서브쿼리 캐싱효과가 도움이 되지 않는 상황이다.
따라서 고객에 대한 스 칼라 서브쿼리를 일반 조인문으로 변경한 후 해시 조인으로 유도 해 야 한다.

5. 해시 조인이라고 해서 항상 Full Scan으로 처리해야 하는 것은 아니지만,고객 테이블에는 조인 외에 다른


조건절 없으므로 Full Scan을 피할 수 없다.
그리고 고객명 과 고 객번호만 읽으면 되는 상 황 이 므 로 테이블 전체를 스 캔 할 필요없이 고객 _NI 인덱스를

Fast Full Scan 방식으로 처리하면 된다. 인덱스 전체를 스 캔하므로 인덱스 컬럼순서 변경은 불필요하다.

6. 온 라인 트 랜잭션이 없는 야 간 배치 용 SQL 이 고 ,3,000만건에 이르는 대 용량 데 이 터 를 조 인 해 야 하 므로

병 렬처 리를 활용하지 않을 이유가 없다. 주문, 배송 테이블에 parallel 힌트를 사용하면 된다. 고객 테이블은
인덱스만 읽도록 유도했으 므 로 병렬 처리를 위해 pamllel_index 힌트를 사용해야 한다. (최근 버전에서는

테이블이나 인덱스명을 지정하지 않고 아 래와 같이 Degree만 지정한 parallel 힌트를 사 용 할 수 있다 .)

정답 및 해설

s q l 자 격 검 정 실전문 제 I 279

• •

국 ■가 ■공 ■인 국 ■가 • 공 • 인
SQL Pi-Jess^®

約 ip ®

MB*■料

SQL 전문가 가이드


ThaGud« fot SQL Profeaaonal
SQL 전문가 가이드
2013 Edition 출판사 : 한국데이터진흥원
내 용 : 데이터모델링의이해, S Q L 기본
및 활용, S Q L 고급 활용 및 튜닝
가 격 : 5만원
s a i 판매처 : 전국유명서점 (온, 오프라인)
Professional • Developer

妖data 안국대이6

데이터 분석 전문가 가이드(개정판)

- 출판사 : 한국데이터진흥원
- 내 용 : 데이터 이해,데이터처리기술이해,
데이터 분석 기획,데이터 분석,
데이터 시각화
_ 가 격 : 5만원
- 판매처 : 전국유명서점 (온, 오프라인)

데이터아키텍처 전문가 가이드

- 출판사 : 한국데이터진흥원
- 내 용 : 전사아키텍처이해,데이터요건분석,
데이터 표준하, 데이터 모델링,
데이터베이스 설계와 이용,
데이터 품질 관리이해
_ 가 :
격 : g만원

- 판매처 : 전국^명서점 (온, 오프라인)


SQL 자격검정 실전문제

2016년 11월 17일 초판 발행


2018년 11월 30일 5쇄 발행

발행처 I 한국데이터진흥원
우 )04513
서울특별시 중구 세종대로9길 42 부영빌딩 7층
전화) 02-3708-5300 팩스) 02-318-5040
w w w . k d a t a . o r.k r
인 쇄 I 동강프린텍
가 격 I 18,000원
ISBN 978-89—88474-84-6

• 본 「SQ L 자 격 검 정 실 전 문 제 」 내 용 의 무 단 전 재 를 금 합 니 다 .
단, 가 공 •인 용 시 에 는 반 드 시 ‘SQ L 자 격 검 정 실 전문제,한국데이터

진 흥 원 ’이 라 고 밝 혀 주 시 기 바랍니다.

• 「SQL 자 격 검 정 실 전 문 제 」 내 용 과 관 련 한 문 의 는 한 국 데 이 터 진 흥 원
으로 연락해 주시기 바랍니다.

You might also like