Professional Documents
Culture Documents
SQL 자격검정 실전문제-2페이지
SQL 자격검정 실전문제-2페이지
과목 E . S Q L 기본 및 활용 . ......................................................................................................37
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% / 수험표 발행일부터 환불불가
!_ 시험안내
시험과목 과목별 세부 내용 C】툐;卜
入^
구분 nr〇 nr 배점 시험시간
■ 합격 기준
합격기준 과락기준
필기와 실기 총점 60점 이상인 자 과목별 40% 미만 취득 불합격
정 응시 자격
■응시자격
제한없음
■ 응시료
응시료 환불규정
50,000원 수험표 발행 이전일 24시까지 100% / 수험표 발행일부터 환불불가
응시절차
SQL Professional
시험접수
]' 〇 <19
buL Developer f___
며]S S £>!
시험접수 최종합격
발생시점(發生時點) 에
데이터 모델링의 이해
① 현실세계를 일정한 형식에 맞추어 표현하는 추상화의 의미를 가질 수
따른 엔터티 분류
있음
• 기본/키엔터티
(Fundamental Entity, ② 시스템 구현만을 위해 진행하는 사전단계의 직-업으로서 데이터베이스
제 1절 데이터 모델의 이해
제 2절 엔터티 데이터모델링이란 다음 설명 중 데이터 모델링이 필요한 주요 이유로 가장 부적절한 것은?
• 정보시스템을 구축하기
제 3절 속성
위한 데이터 관점의 ① 업무정보를 구성하는 기초가 되는 정보들에 대해 일정한 표기법에 의해
제 4 절 관계
업무 분석 기법 표현한다.
제 5 절 식별자
• 현실세계의
② 분석된 모델을 가지고 데이터베이스를 생성하여 개발 및 데이터관리에
데이터(what)에 대해
약속된 표기법에 의해
사용하기 위한 것이다.
③ 데이터베이스를 구축하기 위한 용도를 위해 데이터모델링을 수행하고
표현하는 과정
• 데이터베이스를 업무에 대한 설명은 별도의 표기법을 이용한다.
구축하기 위한 ④ 데이터모델링 자체로서 업무의 흐름을 설명하고 분석하는 부분에 의미를
분석/설계의 과정 가지고 있다.
〇 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)
④ 일 ^^
〇 〇
핵심정리 다음 중 타RD에 대한 설명으로 가장 부적절한 것은? 핵심정리 11 다음 중 엔터티의 일반적인 특징으로 가장 부적절한 것은?
아래 ③ 행위 엔터티
④ 개념 엔터티
s 병원은 여러 명의 환자가 존재하고 각 환자에 대한 이름, 주소 등을
관리해야 한다.
(단,업무범위와 데이터의 특성은 상기 시나리오에 기술되어 있는
사항만을 근거하여 판단해야 함)
엔터티의 특징 I s 다음 중 엔터티의 이름을 부여하는 방법으로서 가장 부적절한 것은?
• 반드시 해당 업무에서
필요하고 관리하고자
① 가능하면 약어를 사용하여 엔터티의 이름을 간결하고 명확하게 한다.
① 병원
하는 정보이어야 한다. ② 현업의 업무 용어를 사용하여 업무상의 의미를 분명하게 한다.
② 환자
(예. 환자,토익의 ③ 모든 엔터티에서 유일한 이름이 부여되어야 한다.
③ 이름
응시횟수, …) ④ 엔터티가 생성되는 의미대로 자연스럽게 부여하도록 한다.
④ 주소
• 유일한 식별자에 의해
식별이 가능해야 한다.
• 영속적으로 존재하는
인스턴스의 집합 엔터티, 인스턴스, 14 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상
이어야 한다. 속성, 속성값의 관계 분리되지 않는 최소의 데이터 단위를 무엇이라 하는가?
1〇 다음 중 엔터티의 특징으로 가장 부적절한 것은?
(’한 개’가 아니라 • 한 개의 엔터티는 두 개
'두 개 이상’) ① 속성이 없는 엔터티는 있을 수 없다. 엔터티는 반드시 속성을 가져야 이상의 인스턴스의 [ ]
• 엔터티는 업무 집합이어야 한다.
한다.
프로세스에 의해 • 한 개의 엔터티는 두 개
② 엔터티는 다른 엔터티와 관계가 있을 수 밖에 없다. 단, 통계성 엔터티나,
이용되어야 한다. 이상의 속성을 갖는다.
코드성 엔터티의 경우 관계를 생략할 수 있다. 15 다음 중 속성에 대한 설명으로 가장 부적절한 것은?
• 엔터티는 반드시 • 한 개의 속성은 한 개의
③ 객체지향의 디자인패턴에는 싱글턴패턴이 있어 하나의 인스턴스를
속성이 있어야 한다. 속성값을 갖는다. ① 엔터티에 대한 자세하고 구체적인 정보를 나타낸다.
• 엔터티는 다른 엔터티와 ‘ 가지는 클래스가 존재한다. 이와 유사하게 엔터티는 한 개의 인스턴스를
② 하나의 엔터티는 두 개 이상의 속성을 갖는다.
최소 한 개 이상의 가지는 것만으로도 충분한 의미를 부여할 수 있다.
③ 하나의 인스턴스에서 각각의 속성은 하나 이상의 속성값을 가질 수 있다.
관계가 있어야 한다. ④ 데이터로서 존재하지만 업무에서 필요로 하지 않으면 해당 업무의 엔터티로
④ 속성도 집힙-이다.
성립될 수 없다.
-公-
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가지 개념을 사용한다.
③ 부서와 사원 엔터티 간의 '소속’ 관계는 존재적 관계의 사례이다.
④ 주문과 배송 엔터티 간의 ’배송근게 관계는 행위에 의한 관계의 사례이다.
③ 업무기술서, 장표에 관계연결을 구]능하게 하는 명사<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)
28 다음 중 아래에서 엔터티 내에 주식별자를 도출하는 기준을 묶은 것으로 30 다음 중 비식별자 관계로 연결하는 것을 고려해야 하는 경우로 가장
핵심정리
가장 적절한 것은? 부적절한 것은?
주식별자의 특징
• 유일성 : 주식별자에 아래 ① 부모엔터티에 참조값이 없어도 자식엔터티의 인스턴스가 생성될 수
의해 엔터티내에 모든 있는 경우
인스턴스들을 유일 가. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
② 부모엔터티의 인스턴스가 자식 엔터터와 같이 소멸되는 경우
나. 명칭, 내역 등과 같이 이름으로 기술되는 것들을 주식별자로 지정
하게 구분함
한다. ③ 여러 개의 엔터티를 하나로 통합하면서 각각의 엔터티가 갖고 있던
• 최소성 : 주식별자를 다. 복합으로 주식별자를 구성할 경우 너무 많은 속성을 포함하지 여러 개의 개별 관계가 통합되는 경우
구성하는 속성의 수는 않도록 한다.
④ 자식쪽 엔터티의 주식별자를 부모엔터 티와는 별도로 생성하는 것이
유일성을 만족하는 라. 자주 수정되는 속성을 주식별자로 지정한다.
최소의 수가 되어야 함 더 유리하다고 판단하는 경우
• 불변성 : 주식별자가
한 번 특정 엔터티에
① 가,나
② 가,다 식별자의 분류체계
지정되면 그 식별자의
fc i gsa
값은 변하지 않아야 함 ③ 다, 라 식별자 설명
• 존재성 : 주식별자가 ④ 나,라 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티
주식 별자
지정되면 반드시 대표성 와 참조관계를 연결할 수 있는 식별자
데이터 값이 존재 여부 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을
1 29 1 프로젝트를 전개할 때는 식별자관계와 비식별자관계를 선택하여 연결 보조식 별자
(Null 안됨) 가지지 못해 참조관계 연결을 못함
해야 하는 높은 수준의 데이터모델링 기술이 필요하다. 다음 중 비식별자
스스로 내부식 별자 엔터티 내부에서 스스로 만들어지는 식별자
관계를 선택하는 기준으로 가장 부적절한 것은?
생성여부 외부식 별자 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
① 관계의 강약을 분석하여 상^간에 연관성이 약할 경우 비식별자관계를 속성의 단일식 별자 하나의 속성으로 구성된 식별자
고려한다. 수 복합식 별자 둘 이상의 속성으로 구성된 식별자
② 자식테이블에서 독립적인 Primary Key의 구조를 가지기 원할 때 비식 본질식 별자 업무에 의해 만들어지는 식별자
대체
별자관계를 고려한다. 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지
여부 인조식별자
③ 모든 관계가 식별자 관계로 연결되면 SQL Where절에서 비교하는 항목이 고 있기 때문에 인위적으로 만든 식별자
증가되어 조인에 침며하는 테이블에 따라 SQL문장이 길어져 SQL문의
복잡성이 증가되는 것을 방지하기 위해 비식별자관계를 고려한다.
④ 부모엔터티의 주식별자를 자식엔터 티에서 받아 손자엔터 티까지 계속
흘려보내기 위해 비식별자관계를 고려한다.
식별자와 비식별자관계 비교
〇 —I 식별자관계 비식별자관계
목적 강한 연결관계 표현 약한 연결관계 표현
자식 주식별자
자식 주식별자의 구성에 포함됨 자식 일반 속성에 포함됨
영향
표기법 실선 표현 점선 표현
- 반드시 부모엔터티 종속 - 약한 종속관계
- 자식 주식별자구성에 부모 - 자식 주식별자구성을 독립적으로 구성
연결
주식별자포함 필요 - 자식 주식별자구성에 부모 주식별자 부분 필요
고려사항
- 상속받은 주식별자속성을 타 - 상속뻗은주식별자속성을타 엔터티에 치단필요
엔터티에 이전 필요 - 부모쪽의 관계참여가 선택관계
아래
아래
① 가-나-다-라-마-바
② 가-나-다-라-바-마
③ 가-다-라-바-나 一 마
④ 가-다-라-나-바-마
과목 I ■
끙매각글건수
생성 등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소가 된다. S 유찰물건수
데이터모델링의이해
가능성이 높아 특별히 성능을 고려하여 칼럼 등을 추가하도록 설계해야
^다 .
① 1차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:
M
관리 점번호
관서명
싱-태
관서등록일자
직급명
통신 번호
상태, 관서등록일자}
③ 2차 정규화 - 정규화테이블{관서번호. 관리점번호,관서명,상태,관서
등록일자}
④ 3차 정규화 - 정규화테이봄{관서번호. 관리점번호,관서명,상태, 관서
등록일자}
37 아래의 데이터 모델처럼 동일한 유형의 속성이 칼럼단위로 반복되는 핵심정리 38 다음 중 아래 '일재고' 엔터티에 대한 설명으로 가장 적절한 것은?
경우가 실제 프로젝트를 하면서 많이 발생 될 수 있다. 다음 중 아래와
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)
① 1차 정규형 - 2차 정규화 대상
② 2차 정규형 - 3차 정규화 대상
③ 3차 정규형 - 보이스코드 정규화대상
④ 보이스코드정규형 - 4차 정규화 대상
핵심정리 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
-公
과목
다른 방법으로 처리
조회성능저하가 발생할 수 있다, 트랜잭션이 접근히는 칼럼유형을 분
• 지 나 치 게 많은
I
.데이터 모델링의 이해
석하여 1:1로 테이블을 분리하면 디스크 I/O 가 줄어들어 조회 성능을
조 인 (JOIN )이 걸려
데이터를 조회 하 는 향상 시킬 수 있다.
작업이 기 술 적 으 로 ④ 로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우
부 분 처 리 에 의해
성능이 저 하 되 는
경우에 클 러 스 터 링 을
적용하거나 인덱스를
조 정 함 으 로 써 성능 을
46 아래 설명에서 데이터 액세스 성능을 향상시키기 위해 적용하는 방법에
향 상 시 킬 수 있다.
대해서 _ 을 채우시오.
• 대량의 데 이 터 는
① 공급자별로 최근에 변경된 전화번호,메일주소,위치와 공급자 이름을
Primary Key의 성격에
같이 조회할 때 이 값들을 공급자 테이블에 반정규화로 갖고 있는 경우 아 래
따라 부 분 적 인
에 비해 조회 성능이 저하되지 않는다. 테이블로 분 리 할 수
하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고
② 데이터를 조회할 때 과도한 조인으로 인해 조회성능이 저하될 수 있으 있다. 즉 파티셔닝 기법 테이블을 몇 개로 쪼개도 성능이 저하되는 경우가 있다. 이때 논리적
므로 공급자 테이블에 가장 빈번하게 조회되는 값인 최근 변경값에 (Partitioning)0| 으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리
적용되어 성 능 저 하 를 하여 데이터 액세스 성능도 향상시키고,데이터 관리방법도 개선할
해당하는 전화번호, 메일주소, 위치를 반정규화하여 조회 성능을 향상
방 지 할 수 있다. 수 있도록 테이블에 적용하는 기법을 I 石) I 이라고 한다.
시킬 수 있다.
• 응용 애 플 리케이션에서
③ 전화번호,메일주소, 위치에 대한 가장 최근에 변경된 값을 알 수 있도
로직을 구사하는
록 최신여부 라는 속성을 추가함으로써 최근 값을 찾기 위한 조회 성능
방 법 을 변경 함 으 로 써
저하를 예방할 수 있다. 성능을 향상시킬 수
④ 조회 성능을 위해서는 하나의 테이블로 통합하여 전화번호, 메일주소, 있다.
-分
슈퍼/서브 타입 데이터
아 래 아 래
모델의 변환기술
• 개별로 발생되는
[긴 급 사 건 ] [특 수 사 건 ] [일 반 사 건 ] 현 금 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 인덱스는 설계된 순서 그대로 생성함)
트랜잭션이 발생할
① UNION ALL로 조회하면 정렬로 인한 성능이 저하되므로 UNION으로 번호로 구성된 PK인텍스는 최적의 효율성을 가지고 있음.
조합하여 조회한다. ② 乂!
■무소코드가 로 상수값이 들어 왔고, 거래일자가 범위 'BETWEEN’
② 긴급사건, 특수사건, 일반사건을 하나의 테이블로 통합하고 P뜬를 사건 으로 들어왔기 때문에 PK의 순서를 사무소코드 + 출급기번호 + 명세
분류코드 + 사건번호로 조합하여 구성하도록 한다. 표번호 + 거래일자로 바꾸고 인덱스를 생성하는 것이 성능에 유리함.
③ 사무소코드가 로 싱수값이 들어 왔고,거 래일자가 범위 ’BETWEEN’
③ 긴급사건, 특수사건,일반사건 테이블을 개별로 유지하되 … 에 사건
분류코드를 포함하도록 한다. 으로 들어왔기 때문에 PK의 순서를 거래일자 + 출급기번호 + 명세표
번호 + 사무소코드로 비꾸고 인덱스를 생성하는 것이 성능에 유리함.
④ 세 개의 테이블을 그대로 유지하되 반정규화된 형태의 통합테이블을
④ A ]•무소코드가 로 4 V수값이 들어 왔고,거 래일자가 범위 ’BET W EEN
하나 더 생성하여 조회의 성능을 향상하도록 한다.
으로 들어왔기 때문에 PK의 순서를 시-무소코드 + 거래일자 + 출급기
번호 + 명세표번호로 바꾸고 인덱스를 생성하는 것이 성능에 유리함.
될 수 있다.
② 트랜잭션은 항상 서브타입 개별로 처 리하는데 테이블은 하나로 통합
저하될 수 있다.
③ 트랜잭션은 항상 슈퍼+서브 타입을 함께 처리하는데 개별로 유지 하면
〇 分
핵심정리 I 50 1 다음 중 아래의 엔터티와 이 엔터티를 매우 빈번하게 참조하는 SQL 의 5 1 __ 다음 중 아래 데이터모델에 표현된 FK(Foreign Key )에 대한 설명으로
핵심정리
성능에 대한 설명으로 가장 적 절한 것 은 ? 가장 적절 한 것을 2 개 고 르 시 오 .
으로 이용할 수 있도록
PK 순 서 를 지 정 해 야 한다.
즉 인 덱 스 의 특 징 은 여러
개의 속 성 이 하나의
인 덱 스 로 구 성 되 어 있을
때 앞쪽에 위 치 한 속 성 의
값이 비 교 자 로 있 어 야
인덱스가 좋은 효율을
단,학사기준과 수강신청은 조인하여 정보를 조회할 업무가 많음
나타낼 수 있다. 앞쪽에
위 치 한 속성 값이 가급적 ① 학사기준번호는 부모 테이블에 이미 인덱스가 존재하기 때문에 상속받아
'=' 아니면 최 소 한 범위
생긴 수강신청에는 학사기준번호 칼럼에 대한 별도의 인덱스가 필요
' BETWEEN ' ‘< 가 ① 명세번호를 실적 테이블에 맨 처음 칼럼으로 옮기면 PK 인텍스의 이용
하지 않다.
들 어 와 야 인덱스를 이용할 효율성이 향상된다.
② 학사기준번호는 부모 테이블에 이미 인덱스가 존재하나 수강신청과
수 있는 것이다. 분산 데이터베이스 장단점
② 지사코드에 대해 입력 값이 EQUAL 조건으로 사용되므로 지사코드를
조인에 의한 성능저하 예방을 위해 상속받아 생긴 수강신청에도 학사기
장점
실적 테이블의 맨 처음 위치로 옮겨서 일자 칼럼의 앞에 두면 인텍스
• 지역 자 치 성 , 점증적 준번호 칼럼에 대한 별도의 인덱스가 필요하다.
이용 효율성이 높아진다.
시스템 용 량 확 장 ③ 데이터모델에서는 관계를 연결하고 데이터베이스에 FK제약조건 생성을
③ 일자가 SQL문장의 Where절에 첫 번째 조건으로 나왔으므로 칼럼 순서
• 신 뢰 성 과 가용성 생략하는 경우에 학사기준번호에 대한 인덱스를 생성할 필요가 없다.
에서도 첫번째에 위치하는 것이 효율성이 높다. • 효용성 과 융통성 ④ 데이터모델에서는 관계를 연결하고 데이터베이스에 FK제약조건 생성을
④ 일자, 명세번호,지사코드로 칼럼 순서를 바꾸어야 일자 범위에 대한 • 빠른 응 답 속 도 와
생략하는 경우에도 데이터의 조인관계가 필요하므로 학사기 준번호에
내용을 먼저 식별하고,그 다음으로 지사코드를 찾기에 용이할 수 있으 통신비용 절감
대한 인덱스를 생성할 필요가 있다.
므로 이때 인덱스의 효율성이 가장 높다. • 데이터의 가 용 성 과
신뢰 성 증 가
• 시스 템 규 모 의 적절한
단점
① 공통코드,기준정보 등 마스터 데이터는 분산데이터베이스에 복제분산을
• 소 프 트 웨 어 개 발 비용
적용한다.
• 오류 의 잠재성 증대
② 거의 실시간 (Near Real Time) 업무적인 특성을 가지고 있을 때 분산
• 처리 비용의 증대
• 설계, 관 리 의 복 잡 성 과 데이터베이스를 사용하여 구성할 수 있다.
• 불규칙한 응답 속도 있다.
• 통제의 어려움 ④ Global Single Instance(GSI)를 구성할 때 분산데이터베이스를 활용
• 데이터 무 결 성 에 대한
하여 구성하는 것이 효율적이다.
위협
객체들을 사용하도록
권한을 주고 회수하는
명 령 어 를 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이라고 부른다.
아 래
① CREATE
② GRANT
③ ALTER
④ DROP
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
과목
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)
③ DDL은 스키마, 도메인,테이블,뷰, 인덱스를 정의하거나 변경 또는 ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK
제거할 때 사용되며 CREATE, ALTER, DROP, RENAME 등이 있다. PRIMARY KEY (PRODJD) ;
④ 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어들을 데이터 ③ CREATE TABLE PRODUCT
아래와 같이 데이터가 들어있지 않은 왼쪽의 기관분류 테이블 (가 )를 핵심정리 아래 테이블 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 데이터 유형
과목
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;
NU니—
(ASCII 코 드 다음 중 NULL의 설명으로 가장 부 적 절 한 것 은 ?
0 0 번 )은 공 백 ( BLANK ,
ASCII 코 드 32번 )이 나 ① 모르는 값을 의미한다.
• 테 이 블 명은 다른 (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,
지정하고 각 칼럼들은
과목
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) 값이 존재할 수 있기 때문이다.
# 문 자 만 허용 된 다 .
o 내
"
…
-
과목
(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
19 표준 SQL (SQ L :1999>에서 테이블 생성시 참조관계를 정의하기 위해 핵심정리 11 J 아래와 같은 데이터 모델에서 데이터를 조작하려고 한다. 다음 중 오류가
④ DEPENDENT
① INSERT INTO BOARD VALUES (1,,
Q6A,
, Y , SYSDATE, rQ&A 게시판);
INSERT INTO 테이블명
VALUES (D INSERT INTO BOARD (BOARD_ ID , BOARD_ NM, USE_ YN,
과목
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;
〇 o
-〇
시오.
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 매출; 내용은 영 구 적 으 로
삭 제 한 데이터에 대하여 가 능 )으 로 트 랜 잭 션 을
[품목] [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 )을
■용
할 때 트랜잭션에 포함된
되지 않았다.
전체 작 업 을 롤 백 하 는 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 ]
- 문天!■
, 숫자, 표현식 ~ 와 같지 않다.
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]
① NULL ② 80 @ 150 ④ 50
10 NULL
60 NULL
38
핵심정리 아래와 같이 월별매출 테이블에 데이터가 입력되어 있다. 다음 중 2014년 39 아래 테이블 스키마를 참조하여 SQL 문장을 작성하였다. 다음 중 결과가
11월부터 2015년 03월까지의 매출금액 합계를 출력하는 SQL 문장으로 다른 SQL 문 장 은 ?
BETWEEN a AND b
a와 b의 값 사이에 옳은 것 은 ?
있으면 된다.(a와 b 값이 아 래
과목
,
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')
AND 월 IN ('11', '12', '03', ’04’, ’05’); ③ SELECT SVCJD, COUNT(*) AS CNT
AND (월 BETWEEN '01' AND '03' OR 월 BETWEEN ’11’ ’1幻; AND JOINJHH = '00'
O
〇
과목
부정
,、 : 같지 않다. ② 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)와 동일하다.
Q— 分
모든 사용자가 액세스
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,
종류 내용 함수의 에
② 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 ,
과목
함수 을 반환한다.
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,
[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 ;
O 〇
과목
더 하 거 나 빼도 결고는 ③ 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 값의
일반형 함수 함수 설명
표현식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 을 리턴한다.
公
〇
49
핵심정리 아래의 각 함수에 대한 설명 중 S , 에 들어갈 함수I 핵심정리 1 51 | 어 느 기업의 직원 테 이 ■ 티 ^ P》
이 직급( GRADE) 별 로 사 원 5 0 0 명,대리
50 다 음 중 아 래 각 각 3 개 의 SQL 수 행 결 과 로 가 장 적 절 한 것 은 ?
① 670, 15, 5 ② 645, 40, 5
과목
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] 표현식) 표현식의 분산을 출력한다.
기타 통계 함수 벤더별로 다양힌: 통계식을 제공한다.
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 광고시작일자
출력한다.
• HAVING 절은
일반적으로 GROUP BY
절 뒤에 위치 한 다 .
o G
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 지역, 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
〇
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 문 장 으 로
과목
• 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;
두 개 이상의 테이 블 들 을 아 래
① 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%
FROM 배우,영화,출연
[SQL]
WHERE 출 연 료 〉= 8888 SELECT GOUNT(*) GNT
AND 영화번호 = 영화. 영화번호 FROM EMP_TBL A, RULE_TBL B
AND 배우번호 = 배우.배우번호; WHERE A.ENAME LIKE B.RULE
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 비선호컨"!! 츠 컨텐츠
[설명]
우리는 매일 배치작업을 통하여 고객에게 추천할 컨텐츠를 생성하고
고객에게 추천서비스를 제공한다.
추천 컨텐츠 엔터티에서 언제 추천을 해야 하는지를 정의하는 추천
대상일자가 있어 해당일자에만 컨텐츠를 추천해야 한다. 또한 고객
이 컨텐츠를 추천 받았을 때 선호하는 컨텐츠가 아닌 경우에는 고객
이 비선호 컨텐츠로 분류하여 더 이상 추천 받기를 원하지 않는다.
그러므로 우리는 비선호 컨텐츠 엔터티에 등록된 데이터에 대해서는
추천을 수행하지 않아야 한다.
78 I SQL 자 격 검 정 실전 문 제
n . SQL 기 본 및 활용
o 〇
과목
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) 이다.
o o
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 公
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
◦.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)
핵심정리
74 아 래 의 티여P 테 이 블 과 CEPT 테 이 블 에 서 밑 줄 친 속 성 은 주 키 이 며 I 중 〇m ^ 데이터 ^ m 〇\
\Msql° i 로^
티, . C 는 DEPT 오유 연 결 된 외 래 키 이 다 , EMP 테 이 블 과 DEPT 테 이 블 을
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;
o o
게시판 게시글
1 78 I 다 음 과 같 은 2 개 의 릴 레 이 션 이 있 다 고 가 정 하 자 . student의 기 본 키 는
〇 O
[SQL]
SELECT A, B
FROM TAB1
EXCEPT
SELECT A, B
FROM TAB2;
과목
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
집 합 연산자의 종류
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
〇
가장 적절한 것은?
아 래
① UNION
卷) INTERSECT [테이블 : TBL1] [테이블 : TBL到
과목
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
-公-
핵심정리
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 회원상세정보) 연산을
과목
③ 회원 ID 컬럼을 대상으로 (회원기본정보 INTERSECT 회원상세정보)
① 가: 5개,나 3개 연산을 수행한 결과의 건수악 두 테이블을 회원ID로 JOIN 연산을 수행한
n
,
② 가: 5개,나 5개 결과의 건수는 동일하다.
S Q L
③ 가: 3개,나 3개 ④ 회원ID 컬럼을 대상으로 (회원기본정보 INTERSECT 회원상세정보)
기본 및 활용
④ 가: 3개,나 5개 연산을 수행한 결과와 (회원기본정보 UNION 회원상세정보) 연산을
수행한 결과는 다르다.
7
1K TAB1
따
계층구조에서 부모
-I =
연 산 은 INTERSECT
SELECT C3
B
!합
-}1 데이터에서 자식 Cl C2 C3
C
W
기능으로, FROM TAB1
따
-I
전 개 를 한다.
SQL 자 격 검 정 실 전 문 제 I 9 3 94 I SQL 자 격 검 정 실 전 문 제
n . SQL 기본 및 활 용
o o
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
96 I SQL 자 격 검 정 실전문제
SQL 자 격 검 정 실 전 문 제 1 9 5
n . SQL 기본 및 활 용
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
과목 표 ■
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
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
94 다 음 중 아 래 의 SQL 수 행 결 과 로 가 장 적 절 한 것 은 ? 95 아 래 는 서 브 쿼 리 에 대 한 설 명 이 다 . 다 음 중 올 바 른 것끼 리 묶 인 것 은 ?
아 래 아 래
과목
③ 나 ,다 ,라
① 〇 © ᅪ, ᅪ ,〇 }■
I
•
② 1
S Q L
③2
기본 및 활용
④ 3 I 96 I 아래 테이블은 어느 화사의 사 원 들 과 이들이 부양하는 가족에 대한 것으로
밑 줄 친 칼 럼 은 기 본 키 (Primary Key )를 표 시 한 것 이 다 . 다 음 중 ‘현 재
메인쿼리와 서브쿼리 부 양 하 는 가 족 들 이 없 는 사 원 들 의 이 름 을 구 하 라 는 질 의 에 대해 아 래
SQL 문 장 의 _ , [ © ] 에 들어 갈 내 용 으 로 가 장 적 절 한 것 은 ?
아 래
[테이블]
사 원 凶 넷 , 이 름 ,나 이 )
가족 (으l f i ,나 이 ,부 양 사 번 )
(단일 행 서브쿼리) 단일 행 비교 연산자에는 =, <, <=, >, >=, ◊이 있다, FROM 사원、
④ 色 > : 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 (* )
ORD ER BY A. 회원번호;
④ S E L E C T A . 회 원 번 호 , A 회원명
FROM 회원 A , 동 의 항 목 B
G R O U P B Y A . 회 원 번 호 ,A . 회원명
O RD ER BY A 회원번호;
〇
o
102 I SQL 자격 검정 실전 문 제
SQL 자 격 검 정 실전 문 제 I 1 〇 1
n . SQL 기본 및 활 용
평 가 결 과 를 추 출 하 는 SQL 문 장 으 로 옳 은 것 은 ?(단 , 평 가 항 목 에 대 한
① 단일 행 서브쿼리는 서브쿼리의 실행 결과가 항상 한 건 이하인 서브쿼
FROM 절에서 사 용 되 는 평 가 {평 가 등 급 )가 기 대 수 준 에 미 치 지 못 할 경 우 해 당 평 가 항 목 에 대해
리로서 IN, ALL 등의 비교 연산자를 사용하여야 한다.
서 브 쿼 리 를 인라 인 뷰 서만 재평가를 수행한다)
② 다중 행 서브쿼리 비교 연산자는 단일 행 서브쿼리의 비교 연산자로도 (Inline View )라 고 한다.
사용할 수 있다. 서 브 쿼 리 의 결 과 가 마치
동 적 인 뷰 이 기 때문에
데 이 터 베 이 스 에 해당
정 보 가 저 장 되 지 않 는다.
서 브 쿼 리 의 결 과 가 마치
실행 시에 동 적 으 로
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
〇
과목
해외마케팅팀 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 〇
"~0"
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. 부서코드 [테이블 : 서비스]
이용하면 편리하게
[테이블 :서비스가입]
사용할 수 있다. ① 뷰는 단지 정의만을 가지고 있으며, 실행 시점에 질의를 재작성하여
회 워 변호 (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
감출 수 있다.
① 서 비 스 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 이용월
〇 公
.
卜.
.
』 —
—.
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
...
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
分
과목
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
과목
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. 에너지코드;
[결과]
o
1 14 I SQL 자격 검 정 실전문 제
SQL 자 격 검 정 실 전 문 제 I 1 1 3
n . SQL 기 본 및 활용
111 다음 중 월 별 매 출 테 이 블 을 대 상 으 로 아 래 S Q L 을 수 행 한 결 과 인 것 은 ?
핵심정리
다 음 중 원 도 우 함 수 (Window Function , Analytic Function ) 에 대 한
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 ;
003 강감찬 35 0 4 건 수 로 취 급 하 는 것이
다른 점이다.
001 35 0 4 [결과 예제 ]
홍길동
003 강감찬 350 5 게 임 상 품 ID 고객 ID 활동점수 등 수 (순 위 )
00 1 121 150 1
과목
004 이상화 700 1 00 1 212 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
〇
公
[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
0
o
과목
부 세 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 함 수 를 이용해
파 티 션 별 윈도우 에 서
가 져 오 는 것은 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로 가장 적절한 것은?
과목
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
Q'■
■
■
■ ■
핵심정리 I 122 | 사 용 자 Lee 가 릴레이션 될 생 성 한 후 , 아 래 와 같 은 권한부여 SQL문들을 124 아 래 는 임 시 부 서 ( TMP_D 티자■) 테 이 블 로 부 터 부 서 (D 타5T ) 테 이 볼 에
핵심정리
실 행 하 였 다 . 그 이 후 에 기 능 이 실 행 가 능 한 SQL 을 2 개 고 르 시 오 . 데 이 터 를 입 력 하 는 PL/SQL 이 다 . 부 서 테 이 블 에 데 이 터 를 입 력 하 기
(단 ,A , B 의 데 이 터 타 입 은 정 수 형 이 다 ) 전에 부 서 테 이 블 의 모 든 데 이 터 를 R01丄 BACK 이 불 가 능 하 도 록 삭 제
과목
• 변수, 상 수 듕 을
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절의
수 있다.
126 다음 중 T r ig g e r 에 대한 설명 으 로 가장 부 적 절 한 것 은 ?
과목
① PROCEDURE
I
② USER DEFINED FUNCTION
■S
@ PACKAGE
Q L
④ TRIGGER
기본 및 활용
프 로 시 저 와 트리거의 차이점
프로시저 트리 거
〇-
아 래
SQL 최적화 기본 원리 테 이 블 및 인 덱 스 등의 통계 정 보 를 활 용 하 여
될 처리시간 및
SQL문 을 실 행 하 는 데 소 요
CPU, I/O 자 원 량 등 을 계 산 하 여 가 장 효 율 적 일 것 으 로
예상되는 실행계획을 선택하는 옵티마이저를 l O I 라 한
다.
① 액 세 스 기법
제 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 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
■公
131 다음 중 실행계획에 대한 설명으로 가장 부적절한 것은? 134 다음 중 관계형 데이터베이스의 인덱스(In d e x )에 대한 설명으로 가장
적절한 것은?
① 실행계획은 SQL 처리를 위한 실행 절차와 방법을 표현한 것이다.
② 실행계획은 조인 방법,조인 순서, 액세스 기법 등이 표현된다. ① 기본 인텍스(Primary Key Index)에 중복된 키 값들이 나타날 수 있다.
③ 동일 SQL문에 대해 실행계획이 다르면 실행 결과도 달라질 수 있다. ② 기본 인덱스에 널 값 (Null Value)들이 나타날 수 없다.
④ CBO(Cost Based Optimizer)의 실행계획에는 단계별 예상 비용 및 ③ 보조 인덱스(Secondary Index) 에는 고유한 키 값들만 나타날 수 있다.
건수 등이 표시된다. ④ 자주 변경되는 속성은 인덱스를 정의할 좋은 후보이다.
설 명 으 로 가 장 적절한 것을 2개 고 르 시 오 . 적 절 한 것을 2개 고 르 시 오 .
과목
하는 것이 좋다.
I
*
S Q L
136 I 아래의 |NDEX에 대한 설명에서 [ ^ ,[S , [ H I 에 들 어 갈 인덱 스
기본 및 활용
종 류 가 순서대로 바르게 나열된 것 은 ?
아 래
③ SQL 처리 흐름도는 인덱스 스캔 및 전체 테이블 스캔 등의 액세스 ③ BITMAP 인덱스,CLUSTERED 인덱스,REVERSE KEY 인덱스
아 래
① 가,나,다
[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의
① 가 ,다
① 인덱스의 목적은 조회 성능을 최적화하는 것이다. _ ② 가 ,나 ,다
② 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)이 비효율
④ 유니크 인덱스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 온라인 경우에도 사용할 수 ② 자연조인 (Natural join) 시 드라이 빙(driving) 집합 쪽으로 조인 액세스
있는 조인 기법이다. 량이 많아 Random 액세스 부하가 심할 때
조회하는 경우 유용하다,
Hash Jo in 은 해 쉬
⑤ 소트 머지 조인 (Sort Merge Join)을 하기에는 두 테이블이 너무 커서
함수를 이용하여
소트(Sort) 부하가 심할 때
조인을 수행하기
④ 유니크 인텍스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 온라인
143 다음 중 아 래 와 같은 就 «_에서 나타날 수 있는 Join 기법으로 가 장 적절한 때 문 에 ’= ’로 수 행 하 는
조회하는 경우
조인 즉 , 동 등
것은?
조인에서만 사용할 수
있다.
과목
칼럼을 기준으로 데이터를 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
모 든 정렬 작업을
떨어질 수 있다.
① 조인 칼럼에 적당한 인덱스가 없어서 NL 조인 (Nested Loops)가 비효
율적일 때 사용할 수 있다
② Driving Table의 개념이 중요하지 않은 조인 방식이다
③ 조인 조건의 인덱스의 유무에 영향 받지 않는다
④ EQUI(=) 조인 조건에서만 동작한다.
과목 I
SQL 고급활용 및 튜닝 ,
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■■■■■■룰
제 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 ) 하면 사용자가 데이터베이스 서버에 연결 요청을 할 때마다 서버 프로
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
쿼리 본 연 의 오 퍼 레 이 션 ② Elapsed
수 행 을 위해 소 비 한 ® Idle 아 래
시간인지를 분석한다. ④ Queue (1) select 고 객 번 호 , 고 객 명 ,휴 대 폰 번 호 from 고 객 where
Wait Time은 각 각 발 생 한 고 객 명 like '010% ';
대기 이 벤 트 들 을 분석해 ⑵ SELECT 고 객 번 호 ,고 객 명 ,휴 대 폰 번 호 FROM 고 객 WHERE 고
가 장 시 간 을 많이 소 비 한 객 명 LIKE '010% ';
〇
O
〇 o
〇
〇
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 고객명;
비 율 을 말 한다.
I/O 튜닝의 핵심 원리
I 20 I 다 음 중 데 이 터 베 이 스 I八) 원 리 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ?
■ Sequential 액 세스에
-分
2 5 _ 아 래 는 두 세 션 에 서 각 각 UPDATE 문 을 수 행 한 후 의 오 라 클 Lock 관 련
핵심정리 I 23 I 다 음 중 오 라 률 PL / SQL 로 작 성 한 아래 프 로 그 램 을 MSᅳSQL Server
SQL S e rv e r의 공유
T-SQL tfCK 아래 FOR UPDATE 대신하기 조회 결과이다. 다음 중 ® ] , [g ] 에 들어갈 용어로 가장 적절한
가장 적절한 것은?
① 원자성 가 . ,격리성 - 나.
① 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
Concurrency Control,
① 읽기 일관성을 위해 Undo 세그먼트 (또 는 버전 저장소)에 저장된 Undo
이하 MVCC)
(또 는 Snapshot) 데이터를 활용한다.
■ 데 이 터 를 변경할
때마다 그 변경사항을 ② MVCC 모델은 기본적으로 완벽한 문장 수준 읽기 일관성을 보장한다.
Undo 영역에 저장해 ③ MVOC 모델은 기본적으로 완벽한 트랜잭션 수준 읽기 일관성을 보장한다
시 작 시점 이후에
변 경 된 (변 경 이 진행
중 이 거 나 이미
커밋된) 값을
발견하면, Undo
이용해 쿼 리 (또 는
트랜잭션)
시 작 시점의 일관성
있는 버 전 (CR
Copy)을 생 성 하 고
그 것 을 읽 는 다 ..
옵티아미저 원리
규칙기반 옵티마이저
① 비용이란 기본적으로, SQL 수행 과정에 수반될 것으로 예상되는 V0
(Rule-Based Optimizer,
일랑을 계산한 것이다.
이하 RBO)는 다른 말로
---- ------ *
^
‘휴 리 스 틱 ( Heuristic)
© 데이터베이스 C a ll 발생량도 옵티마이저의 중요한 비용 요소다.
세 ③ 옵티마이저가 비용을 계산할 때, CPU 속도, 디스크 I/O 속도 등도
몹 티 마 이 저 ’라고 불 리 며 ,
우 선 순 위 로 서 ,인 덱 스
구 조 ,연산자, 조 건 절
제1절 옵티마이저 형태가 순위를 결정짓는
제2절 쿼리변환 주요인이다. 다음 중 규칙 기반 옵티마이저 ( R B O )가 사용하는 규칙으로 가장 부적절한 것은?
소트 연산을 대체한다.
s e le c t * f r o m 고객 o rd e r by 고객명
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 ) -
② 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) 당일매출,
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’
38
핵심정리 O ra c le 에서 no_m erge 힌트를 사용하지 않고도 아래 S Q L 문에 뷰 머징 4〇 다음 중 아래 S Q 니게 대한 설명으로 가 장 적 절한 것 은 ? (단 ,쿼리 변 환
옵션 으 로 가장 부 적 절 한 것 은 ?
과목
② 뷰 안에 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
SQL 자 격 검 정 실전문제 I 1 6 3
164 | SQL 자 격 검 정 실전문 제
M. SQL 고 급 활 용 및 튜닝
아래
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
과목
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
43 인 덱 스 탐색 과 정 은 수 직 적 탐 색 과 수 평 적 탐 색 으 로 나눠 서 설 명 할 수
핵심정리
있다. 수 평 적 탐 색 은 인덱 스 리프 블 록 에 저장된 레코드 끼 리 연결된
순서 에 따라 좌에서 우 ,또 는 우에서 조!
■로 스캔하기 때문에 •수평적’이라고
인덱스오ᅡ 조 인
........... ■ mmmmmm 【■■■
표 현 한 다 . 수직적 탐색은 수평적 탐색을 위한 시작 지점을 찾는 과정
아 래
< 인 텍 스 구 성 )、
emp_idx I deptno + sal + comm
公 o
49 다 음 중 아래 SQL 문 을 튜 닝 하 기 위 한 분 석 을 진행 중 분 석 한 내 용 으 로 아래 트 레 이 스 결 과 를 가 장 적 절 히 설 명 한 보 기 를 2 개 고 르 시 오 .
핵심정리
가장 부적절한 것은?
아 래
인덱스 설계 를 위해
아 래
고 려 해 야 할 요소 (M Cbmt CHJ Time Elapsed Tirm Disk Qjery Current Rm
■ 업무상 중요도
Fkse 1 0.010 0.012 0 0 0 0
구 성 을 보 기 와 같이 (於!後後) 순 으 로 바꿔 가며 就 IL을 실 행 할 때, 오 른 쪽
(단 ,한 달 간 주 문 건 수 는 평 균 5 0 만 건 이 다 .)
아 래
아 래
< 인덱스 구 성 〉
create index 주문_ ID X on 주문 ( 주문일자 , 고객번호); select c . 고객명,c . 연령,c . 전화번호, 〇 , 주문일자,〇 . 주문총금액, 〇 ,배송지주소
from 고객 c, 주문 〇
select / * + ordered u se _n l(o ) * / * where 〇 .고객번호 = c ,고객번호
③ 주 문 _ I D X 인텍스에 칼 럼 을 추 가 한 다 .
② 〇 .주문일자 = '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
좌우하는 키 포인트 아 래
아 래
■ 한 쪽 테이볼이 가용
메모리에 담길 정도로
田
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. 기준일자 ;
하나의 값 만 을 리 턴 하 는 ① 스칼라 서브쿼리를 이용한 조인은 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
과목 ■ •
유사한 실행계획을 수립하기도 한다.
① 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. 종요일자
〇 o
Local 파티 션 인 덱 스 :
① 테이블 파티션과 1:1 대응 관계 1) Range 파티셔닝
테이블 파 티 션 과 1:1 로
② 테이블에 파티션 ADD/ DROP/ SPLIT/EXCHANGE 작업 시,인덱스 ■ 파 티 션 키 값의 범위( Range)로 분 할
대응되도록 파티셔닝한
o ja iA . 파티션도 자동 관리됨 ■ 파티셔닝의 가 장 일반적인 형태이며, 주 로 날짜 칼럼 을 기준으로 함예) 판매 데이터를
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
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 활용 집계 를 수 행 할 때
정렬된 결 과 집 합 을
얻고자 할 때 아 래
나타 난 다 .
3) Sort Group By :
1 Id | Operation I 1 Id I Operation |
Sorting 알 고 리 즘 을
사용해 그룹별 집계를 1 〇 | SELECT STATEMENT | 1 〇 | SELECT STATEMENT |
사 용 할 때가
대 표 적이다.
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 고급활용 및 튜닝
대신 un io n a ll 을 사 용 해 도 가능한 것으로 가 장 적 절한 것 은 ?
① r o w n u m 조 건 을 인라인 뷰 안에 사 용 한 다 .
과목
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;
••_〇
的 다음 중 아래의 고객과 고객변경이력 테이블에서 전체 고객을 대상으로 핵심정리 70 아래 S Q L 은 v_주식선물구분 바인드 변수 입력에 따라 선택적으로 주식
2010년 12월 4일자 이력을 조회하려고 할 때, 가장 효과적인 SQ L인 월별시세 또는 선물월별시세 테이블에 데이터를 입력한다. 실행 정보와
Path Insert 방식으로 (SID =200) 세션에서 순차적으로 수행하였을 때 200번 세션의 상태로
데이터를 입 력 든 방 법 을바 른 것 은 ?
과목
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
〇 o
(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
입력한다.
⑶
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 . 월급여
마찬가지다.
③ 오라클의 수정가능 조인 뷰는 키-보존 테이블에만 입력,수정,삭제가
블 록 를 디스크에서 없다.
적 재 한 후에 갱신
■ 내 부 적 으 로 Redo오卜
Undo 정보 생성
■ 블록 에 빈 공간이
없으면 새 블 록
할 당 (一 Row
Migration 발생)
〇
〇
〇 O
스로 가장 적절한 것은?
① 시스템 사용자의 업무시간이 종료되자마자,동시에 수행 가능한 모든
파티션 인덱스 배치 프 로그램의 특징
배치 프로그램을 집중적으로 수행함으로써 총 소요시간을 단축한다.
■ 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 다 음 중 오 라 클 병렬 프 로 세 싱 에 대 한 설 명 으 로 가 장 부 적 절 한 것 은 ?
① Global Prefixed
② Global Nonprefixed
③ Local Prefixed
핵심정리 I 82 1 주 문 테 이 블 은 주 문 일 자 기 준 으 로 Range 파 티 셔 닝 ,고 객 번 호 기 준 으 로
Hash 서 브 파 티 셔 닝 되어 있 는 상 태 다 . 고 객 테 이 블 은 비 파 티 션
사용함으로써 평 균 주 문 레 코 드 는 2 ,0 0 0 만 건이다. 이 상 태 에 서 두 테 이 블 을 조 인 하 는
옵티마이저의 선택을 병렬 쿼 리 를 수 행 했 더 니 평 소 보 다 3 배 이 상 오 래 걸 렸 고 ,실 행 계 획 을
무 시 하 고 사 용 자 가 직접 확 인 해 보 니 아 래 와 같 았 다 . Oracle 에 서 이 병렬 쿼 리 의 속 도 를 향 상
조 인 을 위 한 데이터 분배
시키기 위해 추 가 해 야 할 힌트로 가 장 적 절 한 것 은 ?
방 식 을 결 정 할 수 있다.
아 래
■ 옵티마이저가
SQL 자 격검 정 실 전 문 제 I 1 9 5
실기문제 1
지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
실기문제 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
[ 인텍스 구성 ]
고객 테 이 블
고 객 _ P K :고 객 번 호
주 문 테이블
주 문 _PK :주 문 번 호
실기문제 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)
두 조회 버튼에 대한 ① 최적의 SQ L 을 각 각 작 성 하 고 . ② 최 적 의 인 덱 스 구 성 안 을 제 시 하 시 오 .
아 래
고적변호 주문일자 j 2014,12.11 - I 2014.12.13 히
AC상 태 고 객 조 회 _ ■逐•技!/다S I 탁일 s 출력
m m m m m m m
m m m
■■■■■ 圖 ■ _■ ■■ ■■
wmmm
會력 a 수 |ᅮ__〇
아 래
실기문제 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 . (조 회 /다 옥 버튼 큼럭 시) 화며 페이징 처리 요거
조 회 하 고 멈추 는 업무임(수 페 이 지 마 다 인덱스 스 캔 시 작 점 을 찾기 위해 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 버 전을
사 용 중임
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
아 래 병 렬 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
and o. 주 문 번 호 = d . 주 문 번 호
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
3 - a c c e s s (" 고 객 번 호 ”= :B 1 )
■
SQL Professional
^9 ^
.■지쑤 ■
■田편
液
I
S-WRW ’作
’,*1
@ 출하.
SQL
■ 1 □ 〇
자 겨 거 정 | ^ |
실전문제 古
정답 및 해설
■■
《 data 한국데이터진흥원
과목 I . 데이터 모델링의 이해
제 1장 . 데이터 모델링의 이해
제 1장 . 데 이터 모 델 링 의 이해 .• 212 1. ②
해설 : 모 델 링 은 단지 시스템 구현 만 을 위해 수행 하 는 타스크가 아니며, 시스템 구현 을 포함 한 업무분석
제 2장. 데 이터 모 델 과 성 능 217
및 업무형상화를 하는 목적도 있음.
2. ③
해설 : 데이터 모델링을 하는 주요한 이유는 업무정보를 구성하는 기초가 되는 정보들에 대해 일정한 표기법에
과목 I . S Q L 기본 및 활용 … 222 의해 표현함으로써 정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석 하 는 것이 첫 번째
목 적이다. 두 번째는 분석된 모 델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터관리에
제 1장 . SQL 기 본 ........................ 222
사용하기 위한 것이 두 번째 목적이다. 다시 말하면, 데이터모델링이라는 것은 단지 데이터베이스만을
제 2장 . SQL 활 용 ........................ 235 구축 하기 위한 용도로 쓰이는 것이 아니라 데이터모델링 자체로서 업무를 설명하고 분석하는 부분에
3. ③
해설 : 데이터모델링을 할 때 유 의할 사항은 중 복 성 ,비유연성, 비일관성 등이다.
유 의 사 항 1 : 중 복 (Duplication )
과목 1 . S Q L 고급활용 및 튜닝 •,
•,
• 254 데이터 모 델은 같은 데이터를 사용하 는 사람, 시 간 ,그리고 장 소를 파악하는데 도움을
줌으로써 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못 을 하지 않도록 한다.
제 1장 . 아 키 텍 처 기 반 튜닝 원리 •+•••• 254
유 의 사 항 2 :비 유 연 성 (Inflexibility )
저12장. Lock 과 트 랜 잭 션 동 시 성 제 어 257 데이터 모 델을 어떻게 설계했느냐에 따라 사소 한 업무변화에도 데이터 모델이 수시로
G ©
4. ② 10. ③
해설 : 데이터 모델링 시의 유의점에 대한 사 항 중 비유연 성 (Inflexibility ) 에 대한 설명이다. 해설 : 엔터티의 특징 은 다음과 같다.
데이터 모델을 어떻게 설계했느냐에 따라 사소한 업무변화에도 데이터 모델이 수시로 변경됨으로써 ^ 첫 번째,반드시 해당 업무에서 필요하고 관 리 하 고 자 하는 정보이어야 한다.
유지보수의 어려움을 가중시킬 수 있다. 데이터의 정의를 데이터의 사용 프 로 세 스 와 분리함으로써 (예. 환자, 토익의 응 시 횟 수 …)
데이터 모델링은 데이터 혹은 프로세스의 작은 변화가 애플리케이션과 데이터베이스에 중대한 변화 辭 두 번째, 유 일 한 식별자에 의해 식별이 가능해야 한다.
를 일으킬 수 있는 가능성을 줄인다. ^ 세 번째, 영속적으로 존재 하 는 (두 개 이상의) 인스턴스의 집합이어야 한다.
11. ①
6. ② 해 설 : 엔터티의 중요한 특징의 하나는 다른 엔터티와 관계를 가져야 한다는 것이다. 그러나 공통코드,통계성
해설 : 데이터베이스 스키마 구 조는 3단계로 구분 되 고 각각 은 상호 독립적인 의미를 가지고 고 유한 기능을 엔터티의 경우는 관계 를 생 략할 수 있다.
가진다. 그 중 통합관점의 스 키 마 구 조 를 표현 한 것을 개 념 스 키 마 (Conceptual Schema) 라고 하며,
데이터 모델링은 통합관점의 뷰를 가지고 있는 개념 스키 마 를 만들어가는 과정으로 이해할 수 있디-. 12. ①
해설 : 기 본 엔 터 티 (키 엔 터 티 )란 그 업무에 원래 존재 하 는 정보로서 다른 엔터티와의 관계에 의해 생성되지
7. ④ 않고 독립적으로 생성이 가능하고 자신은 타 엔터티의 부모의 역할을 하게 된다. 다른 엔터티로부터
해설 : 부모 엔터티에 데이터가 입력될 때 자식 엔터티에 해당 값이 존재하는지의 여부와 상관없이 입력될 주식별자를 상속받지 않고 자신의 고유한 주식별자를 가지게 된다. 예를 들어 사 원 ,부서,고객,상품,
수 있는 구조로 표현되어 있기 때문에,고객 엔터티에 새로 운 고객번호 데이터를 입력하는 것은 주문 자재 등이 기본엔티티가 될 수 있다.
엔터티에 해당 고객 번 호 가 존재하고 있는지의 여부와 상관없이 가능하다.
13. ①
8, ④ 해설 : 엔터티를 명명하는 일반적인 기준은 다 음과 같다. 용 어를 사용 하 는 모든 표기법이 다 그렇듯이 첫
해설 : 엔터티를 어디에 배치하는가에 대한 문제는 필수사항은 아니지만 데이터 모델링 툴 사용 여부와 상관없이 번째는 가능하면 현업업무에서 사용하는 용어를 사용한다. 두 번째는 가능하면 약어를 사용하지 않는
데이터 모델의 가독성 측면에서 중요한 문제이다. 일반적으로 사람의 눈은 왼쪽에서 오 른 쪽 ,위쪽에서 다. 세 번째는 단수명사를 사용한다. 네 번째는 모든 엔터티를 통틀어서 유일하게 이름이 부여되어야
아래쪽으로 이동하는 경향이 있기 때문에, 데이터 모 델 링 에 서 도 가장 중 요 한 엔터티를 왼쪽 상단에 한다. 다섯 번째는 엔터티 생 성 의미대로 이름을 부여한다.
배치하고,이것을 중심으로 다른 엔터티를 나열하면서 전개하면 사람의 눈이 따라가기에 편리한 데이터
배치하여 전체 엔터티와 어울릴 수 있도록 하면 향후 관련 엔터티와 관계 선 을 연결할 때 선이 꼬이지 해설 : 속성이란 사전적인 의미로는 사물(事物)의 성질,특징 또는 본질적인 성질이다. 그것이 없다면 실체를
않고 효 과적으로 배치할 수 있게 된다. 생 각할 수 없는 것으로 정의할 수 있다. 본질적 속 성 이 란 어떤 사물 또는 개념에 없어서는 안 될
징표(徵表)의 전부이다. 이 징표는 사물이나 개념이 어떤 것인지를 나타내고 그것을 다른 것과 구별하
9. ② 는 성질이라고 할 수 있다. 이런 사전적인 정의 외에 데이터모델링 관점에서 속성을 정의하자면, "업무
해설 : 병원은 S 병원1개이므로 엔터티로 성립되지 않으며, 이름, 주소는 엔터티의 속성으로 인식될 수 있다. 에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단 위 ”
엔터티는 2개 이상의 속 성과 2개 이상의 인스턴스를 가져 소위 면적으로 표현될 수 있어야 비로소 로 정의할 수 있다. 업무상 관 리 가 가능한 최소의 의미 단위로 생 각할 수 있고, 이것은 엔터티에서
기본적인 엔터티의 자격을 갖췄다 할 수 있으므로 ‘여러 명’의 복수 인스턴스와 이름, 주소 등의 복수 한 분 야 를 담당하고 있다.
속 성을 가진 ᅳ환자’가 엔터티로 가장 적절하다고 할 수 있다.
15. ③
16. ③ 26, ④
해설 : 이자는 계산된 값으로 파생속성이 맞 지만,이자율은 원래 가지고 있어야 하는 속성이므로 기본속성에 해설 : 사 번은 업무적으로 의미 있는 식별자로 시스템적으로 부여된 인조식 별자가 아니 라 일반적으로 사원
해당한다. 인스턴스의 탄생과 함께 업무적으로 부여되는 사원 인스턴스의 본질적인 속성에 해당한다 할 수 있기
때문에 본 질 식 별 자 로 볼 수 있다.
17. ①
계와 의존관계에 대해 다른 표기법을 가지고 표현하게 되어 있다. 해설 : 부모엔터티의 주식별자를 자식엔터티에서 받아 손자엔터티까지 계속 흘려 보내기 위해서는 식별자관
계를 고려 해 야 한다, ③의 경우는 비식별자관계를 선택하는 기준으로 고려하기에 가장 마지막으로
21. ② 고려 할 만 한 비중을 갖는다고 할 수 있다. 즉 ,비식별자관계의 선택이 단순히 SQL 문장의 복잡 도 를
해설 : 관계 표 기 법 은 관 계 명 ,관계차수, 선택성(선택사양)의 3가지 개념으로 표현한다. 낮 추는 목적에서 고려되는 것은 바람직하지 않음을 의미한다.
22. ② 30. ②
해설 : 관계의 기수성을 나타내는 개념은 관계차수에 해당함 해설 : 엔터티별로 데이터의 생명주기 (LIFE CYCLE)를 다르게 관리할 경우,예를 들어 부모엔터티의 인스턴스
가 자식의 엔터티와 관계를 가지고 있었지만 자식만 남겨두고 먼저 소멸될 수 있는 경우 비식별자관계
23. ③ 로 연결하는 것이 적절하다. 부모엔터티의 인스턴스가 자식 엔터티와 같이 소멸되는 경우는 비식별자
해설 : ③ 업무기술서, 장표에 관 계 연 결 을 가능하게 하는 동 사 (Verb)가 있는가? 가 되어야 한다. 관계 보 다 식별자관계로 정의하는 것이 더 적합하다.
24. ④
25. ④
O O
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민건 第
5 천건
33. ④ 특정 매각장소메 대해 매각일자1 참마 매각내역용 조회하려면
900건의 매각기1 과 매각일자i 매각내역고ᅡ 조인미 된다.
해설 : 성능을 고려한 데이터모델링은 정규화를 수행한 이후에 용량산정과 트랜잭션 유형을 파악하여 반정규
화를 수행한다. 또한 PK/ FK등을 조정하여 인덱스의 특징을 반영한 데이터모델로 만들고 이후에 데이
해설 : 정규화가 항상 조회 성능을 저하시킨다는 것은 잘못된 생각이며 기본적으로 중복된 데이터를 제거함으 이 때 어느 하나의 속성이라도 인덱스가 정의되어 있지 않게 되면 or’로 연결된 모든 조건절들이
로써 조회 성 능 을 향상시킬 수 있음을 알아야 한다. 인덱스를 사용하지 않고 한 번의 전체 데이터 스캔으로 처리되게 되어 성능 저하가 나타날 수 있게
되며, 또한 모든 반복 속성에 인덱스를 생성하게 되면 검색 속 도 는 좋 아 지 겠 지 만 반대급부적으로
35. ③ 너무 많은 인덱스로 인해 입력, 수 정 ,삭제의 성능이 저하 되 므 로 ,1차 정규화를 통해서 자연스럽게
39. ① 45. ③
해설 : PK에 대해 반복이 되는 그 룹 (Repeating) 이 존재하지 않으므로 1차 정규형이라고 할 수 있으며,부분 해설 : 한 테이블에 많은 칼럼들이 존 재 할 경우 데이터가 물리 적 으 로 저장되는 디스크 상에 넓게 분 포할
함수종속의 규칙을 가지고 있으므로 2차 정규형이라고 할 수 없음. 2차 정규화의 대상이 되는 엔터티임. 가능성이 커지게 되어 디스크 "〇 가 대량으로 발 생할 수 있고, 이로 인해 성능이 저하될 수 있음.
따라서 트랜잭션이 접근하는 칼럼유형을 분석해서 자주 접근하는 칼럼들과 상대적으로 접근 빈도가
40. ① 낮은 칼럼들을 구분하여 1:1로 테이블을 분리하면 디스크 I 八3가 줄어들어 성능을 향상 시킬 수 있다.
해설 : • 다량 데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클러스터링 등의 다양한 물리 저장 기법을 테이블 내에서 칼럼의 위치를 조정하는 것은 데이터 주로 채워지는 칼럼을 앞 쪽에 위치시키고,데이터
활용하여 성능 개선을 유도할 수 있다. 다만,하나의 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 가 채워지지 않고 주로 NULL 상 태로 존재하는 칼럼들을 뒤쪽에 모아둠으로써 로우의 길이를 어느
처리가 반 복적으로 빈번하게 발생한다면 이때는 반정규화를 고려하 는 것이 좋다. 정도 감소시킬 수 있 으 나 ,NULL 상태이던 칼럼에 나중에 데이터가 채워지게 될 경우 더 많은 로우
• 이전 또 는 이후 위치의 레코드에 대한 탐 색은 window function 으로 접근 가능하다. 체인이 발생할 수도 있기 때문에 바람직한 해결책이라고 보기에 부족하며, 무엇보다도 데이터가 채워
• 집계 테이블 이외에도 다 양한 유 형 (다 수 테이블의 키 연결 테이블 등)에 대하여 반 정 규 화 테이블 지지 않고 NULL 상태로 존재하게 되는 칼럼들이 많이 나타나는 경우는,너무 많은 엔터티들에 무리하
적용이 필요할 수 있다. 게 동질성을 부여하여 통합을 수행했거니-, 예측하기 어려운 미래 시점을 겨냥하여 과도하게 의욕적으
42. ③
해설 : ③ FK에 대한 속성 추가는 반정규화 기법이라기 보다는 데이터모델링에서 관계를 연결할 때 나타나는 47. ②
자 연스러운 현상이다. 해설 : 개별 테이블을 모두 조회하는 트랜잭션이 대부분이라는 가정이 있으므로 UNI0 N/ UNI0 N ALL할
경우 개별조회에 따른 시간소요와 이것을 조합 하 는 성 능저하가 발생된다. 따라서 하나의 테이블로
금액을 추가하게 되면 하나의 주문에 포함된 제품번호마다 동 일한 합계 금액을 반복적으로 저장해야 해설 : 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 슈퍼-서브타입이 하나의 테이블로 통합되어 있으면
해서 일관성 문 제가 발 생할 수 있다. 또한 제품 엔터티에 최근값 여부 칼럼을 추가 하 는 것은 단가 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에 다른 형식에 비해 더 성능이 우수하다.
합계 금액을 빠르게 얻기 위한 반정규화와 무관한 조치이다. 그러므로 주문 엔터티에 전체를 통합한 (조인 감소)
계산된 칼럼을 추가하는 것이 한번에 데이터를 조회하는 방법이 되므로 가장 효과적인 반정규화 기법
이다. 49. ④
44. ① 칼럼이 가장 앞으로 나오고 범위조회 하는 유형의 칼럼이 그 다음에 오도록 하는 것이 인덱스 액세스
50. ②
해설 : [=’로 들어온 조건에 해당하는 칼럼이 인덱스의 가장 앞쪽에 위치할 때 인덱스의 이용 효율성이 가장
높 다고 할 수 있다.
정답 및 _설
51. ② ,④
과목 E . SQL 기본 및 활용
해설 : 엔터티 간에 논리적 관 계 가 있을 경우 즉, 엔터티 간에 관 계 (Relationship)을 정의하여 관련 엔터티
상호간에 업무적인 연관성이 있음을 표현한 경우에는, 이 데이터들이 업무적으로 밀접하게 연결되어
상호간에 조인이 자주 발생한다는 것을 의미하는 것이기 때문에,데이터베이스 상에서 DBMS가 제공
제 1장 . S Q L 기본
하는 FK Constraints를 생성했는지 여부와 상관없이 조인 성능을 향상시키기 위한 인텍스를 생성해주
는 것이 좋다. 그러므로 수강신청테이블의 학사기준번호에 인텍스가 필요하다.
데이터베이스에 생성하는 FK Constraints는 데이터 모델 상에 표현된 논리적 관계에 따라 관련 인스 1. ④
턴스 간에 일관성을 보장하기 위해 설계된 제약조건을 구현할 수 있도록 DBMS가 제공해주는 하나의 해설 : 데이터 제어어(DCL:Data Control Language)는 데이터베이스에 접근하고 객체들을 사용할 수 있도록
52. ④ 2. ②
해설 : Global Single Instance(GSI)는 통합된 한 개의 인스턴스 즉, 통합 데이터베이스 구조 를 의미하므로, 해설 : 데이터의 구 조를 정의하는 명령어는 DDL(데이터 정의어)에 해당하며 DDL 문으로 는 CREATE,
을 하는 방법으로 분산데이터베이스를 구성할 수 있다. 또한 백업 사이트 구성에 대해서도 분산 환경으 해설 :Transaction를 제어하는 명령어는 TCL(Transaction Control Language) 이다.
5 , ① ,②
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) ;
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 갖이 삭제
해설 : 테이블명과 칼럼명은 반드시 문 자로 시작해야 한다. 3) Set Default : Master 삭계 시 Child 해당 필드 Default 값으로 설정
사용되는 글 자는 A-Z, a-z, 0-9, $, # 만 허용함. 4) Restrict :Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용
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 표준 기준, 오라클과 동일함)
13. ③
14. ② , ③
② 외래키 값은 널 값을 가질 수 없다. 습 있다
③ 한 테이블에 하나만 존재 해 야 한다. 승 여러 개 존 재 할 수 있다.
④ 외래키 값은 참조 무결성 제약을 받을 수 있다.
정답 및 해 설
〇
O
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 고객지역
3) Set Default :Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력 ③ DROP TABLE은 테이블의 데이터를 모두 삭제하고 디스크 사용량도 없앨(초기화) 수 있지만,테이
5) No Action :참조무결 성 을 위반하는 입력 액션을 취하지 않음 ④ DELETE TABLE FROM은 존재하지 않는 명령어이다.
20. ④ 26. ①, ④
23. ①
해설 : TRUNCATE TABLE과 DROP TABLE은 로 그를 남기지 않으므로 개발 기준과 상충된다.
지문2는 문법에 맞지 않다.
정 답 및 해설
해설 : 데이터베이스 트랜잭션의 4가지 특성 : 일관성과 지속성의 설명이 바뀌었다. 해설 : WHERE 절은 SQL을 이용하여 데이터베이스로부터 데이터를 검색할 때 조회되어야 하는 데이터를
특성 설명
필터링하는데 사용된다.
50+ N U LL-N U LL
28. ① ,④
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
40. ② 45. ②
해설 : 다) 1:
M 조인이라 하더라 M쪽에서 출력된 행이 하나씩 단일행 함수의 입력값으로 사용되므로 사용할 해설 : I S N U L L 함 수는 결과값이 NULL일 경우 지정된 값을 반환한다. 칼럼의 NULL 값을 확 인 할 때는 IS
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)
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이 아닌 최초의 표현 식 을 나타낸다.
END as AREA
FROM DEPT;
44. ④
해설 : 지문 4는 CASE 문장에서 데이터가 없는 경우를 0으로 표 시 해 야 (ELSE 0),
다른 3개의 지문과 같은 결과가 나온다.
정 답 및 해설
〇 O
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 결과이다.
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
〇 O
2 3 4 I SQ L 자격검정 실전문제
sq l 자격검정 실전문제 I 2 3 3
정 답 및 해설
56. ③ 62. ④
해설 ② SQL 실행 순서에 의하면 SELECT절 이후에 ORDER BY 절이 수행되기 때문에 SELECT 절에 해설 : 영화명과 배우명은 출연 테이블이 아니라 영화와 배우 테이블에서 가지고 와야 하는 속성이므로 출연테
기술되지 않는 ‘년’ 칼럼으로 정렬하는 것은 논 리 적 으 로 맞지 않다. 하 지만 오 라 클 은 행기반 이블의 영화번호와 영화테 이블의 영화번호 및 출연테 이블의 배우 번 호 와 배우테 이블의 배우번호를
DATABASE 이기에 데이터를 액세스할 때 행 전체 칼럼을 메모리에 로드한다. 이와 같은 특성으로 조인 하 는 SQL문 을 작성 해 야 함.
인해 SELECT절에 기술되지 않은 칼럼으로도 정렬을 할 수 있다.
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. ③
58. ②
하였다.
59. ④
60, ④
61. ③
〇 〇
71. CROSS JO IN
제 2장. SQ L 활 용
해설 : CROSS JOIN 은 E . F.CODD 박사가 언급한 일반 집합 연산자의 PRODUCT의 개념으로 테이블 간
해설 : ① NOT EXIST 절의 연관서브쿼리에 X. 컨텐츠ID = B. 컨텐츠ID가 존재하지 않아 단 하나의 컨텐츠라도 절에 A . 고객번호 IN (11000, 12000) 조 건을 넣었기 때문에 모든 고객에 대해서 출 력을 하되 JOIN
비선호로 등록 한 고객에 대해서는 모든 컨텐츠가 추천에서 배재 된다. 대상 데이터를 고객번호 11000과 12〇 00으로 제한되어 ① 번과 같은 결과가 출력된다.
(고객이 비선호로 등록하지 않은 컨텐츠는 추 천 컨 텐 츠 에 만 등 록 되어있으므로) 해설 : 보기의 3개의 SQL은 모두 Full Outer Join 과 동 일 한 결과를 반환한다.
67. ① , ② 74. ①
해설 : ③ 데이터 모 델을 보면 제품과 생산라인 엔터티에는 생 산 제 품 과 대응되지 않는 레코드가 있을 수 해설 : 주 키 와 외래키는 영향을 미치지 않는다.
68. ②
해설 : 구매이력이 있어야 하므로 INNER JO IN 이 필 요 하 며 ,구매 횟수이므로 COUNT함 수를 사용한다,
69. ③
70. ①
① 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 칼럼에서 같은 값이 있을 때 표테이블에서
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 이다.
해설 : 보기는 게시판별 게시글의 개수를 조회하는 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. ①
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
생성된다.
⑪ S E L E C T A , B , C F R O M R1
80. ② U N IO N
① 이용된 적이 있었던 서비스를 추출 하 는 것은 동 일 하 나 서비스와 서 비 스이용은 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을 수 행 하 였 으 므 로 , 이용된 적이 없었던 서비 스 만 출력된다.
출 력 할 수 있다.
정 답 및 해설
〇 ᄋ
85. ③ 91. ①
해설 : ① 1:1, 양쪽 필수 관계를 시스템적으로 보장하므로 두 엔터티간의 EXCEPT 결과는 항상 공집합이다. 추출된 것을 짐작할 수 있다.
② 1:1, 양쪽 필수 관계를 시스템적으로 보장하므로 UNION을 수행한 결과는 회원기본정보의 전체건수와 ② 최상위 노드인 아 시 아 지 부 (1 0 0 ) 를 시작으로 하위의 모든 부 서를 추 출 (순 방 향 전개)하므로 아래와
동일하지만, UNION ALL을 수행하였으므로 결과건수는 회원기본정보의 전체건수에 2배가 된다. 같은 결과가 추출된다.
④ 1:1, 양쪽 필수 관 계 를 시스템적으로 보 장하므로 연산 수행결과는 같다. 부서코드 부서명 상위부서코드 매출액 LVL
100 아시아지 부 NULL NULL 2
생성될 것이다.
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 으로 처리하였다. 또한
데 ,SQL Server에서는 현재 지원하지 않는 기능이다,. 해설 : 이벤트 시작일자가 ‘2014.10.01.’과 같거 나 큰 이벤트를 기준으로 단 한차례라도 이메 일 발송이 누락된
회원을 추출 하 는 S Q L 문장이다.
해설 : ‘현재 부양하는 가족들이 없는 사원들의 이름을 구하라’를 구현하는 방법은 가족 테이블에 부양사번이 계산할 수 없으므로 원하는 결과를 추 출할 수 없다.
없는 사원 이름을 사원 테 이블에서 추출 하면 되고 ,SQL 문장으로 NOT EXISTS, NOT IN , LEFT GROUP BY 및 집계함수를 사용하지 않고 H A V IN G 절을 사용하였다고 하여 S Q L 문장이 오류가 발생하
FROM 사원 해설 : ① 단일 행 서브쿼리의 비교연산자로는 =,<, <=, > , 〉=, ◊ 가 되어야 한다. IN , A L L 등의 비교연산자는
WHERE NOT EXISTS (SELECT * FROM 7) •족 WHERE 사■번 = 부 0士 4번 ) 다중 행 서브쿼리의 비교연산자 이다.
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 이다.
지 못하므로 삭제 되 어 도 무방하다.
정답 및 해설
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 이며,
해설 : ② 뷰의 장점중 독립성은 테이블 구 조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 GROUP 대상 컬럼의 값은 NULL을 반환한다.
된다.
10 9. ② , ③
104. ② 해설 : SQL의 결과를 보면 설 비 ID와 에너 지코드의 모 든 조합에 대하여 사용량합계를 추출하고 있다. ⑶ BE
해설 : 조회 SQL 실행시 V_TBL은 뷰 스크립트로 치환되어 수행된다. 뷰 생성 스크립트에서 부여된 조건과 함 수는 인수로 니-열된 항목의 기_능 한 모 든 조합에 대하여 GROUPING을 수행한다. 또한 GROUPING
조회 SQL 에서 부여된 조건 모두를 만족해야 한다. SETS은 사용자가 원하는 다양한 조합을 인수로 사용할 수 있다. 위 문제에서 ②번은 CUBE를 사용하였
으므로 CUBE절에 나열된 컬럼의 모 든 조합 즉 ,((설 비 1的 ,(에 너 지 코 드 ), (설 비 ID , 에너지 코 드 )) 에
해설 : ROLLUP은 계층 구조 를 가진 SUB TOTAL을 생성하는 함수로 나열된 컬럼의 순 서 가 변경되면 수행 기술 하였다. ① ,④의 보기별 결과는 아래와 같다.
결과도 변경된다. 위의 SQL문장은 서비스 ID 에 대해서 가입일자별 가입건수 및 소계와 전체 가입건수
를 구하되 Outer Join 을 수행하였으므로 가입내역이 없는 서비스 ID (004)에 대해서도 SUB TOTAL을
출력하고 있다.
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
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 월별매출
사 원 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 , 연봉
RANK WINDOW 함수는 OVER절의 ORDER BY에 대한 결과에 따라 동 일한 값을 동 일한 등수로 처 리 WHERE 연봉 = 최고연봉
함과 동시에 중간 순위를 비우는 반면, DENSE_RANK WINDOW 함수는 중 간 순위를 비우지 않는다.
정 답 및 해설
〇 O
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
122. ① ,③
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. ① ,④
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. ③
인덱스가 존재하는 상황에서 데이터를 입력하면, 매번 인텍스 정렬이 일어나므로 데이터 마이그레이 해설 :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 보다는
〇 〇
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. ④
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 기법의 활용이
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
나타나지 않는다. RAC 같은 클러스터링 데이터베이스 환경에선 메모리도 I 八) 성능에 영향을 미친다.
14. ②, ③
15. ①
28. ②
[ 제 2장. L o c k 고ᅡ 트 랜 잭 션 동시성제어
해설 : 대부분 DBMS가 Read Committed를 기본 트랜잭션 격리성 수준으로 채택하고 있으므로 Dirty Read가
발생 할 까 걱정하지 않아도 되지만, Non-Repeatable Read, Phantom Read 현상에 대해선 세심한
21. ③ 주 의 가 필요하다.
nowait이나 wait 옵 션 을 잘 활용하면 select for update 문장을 통해 오히려 동시 성 을 높일 수도 해설 : 트랜잭션 격리성 수준 (Transaction Isolation Level)을 상향 조정할수록 일관성은 높아지지만 동시성은
있다. 낮아진다.
해설 : 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 모델은 문장 수준의 읽기 일관성을 완벽히 보장하지만, 트랜잭션 수준의 읽기 일관성을 보장하지는
24. ③
해설 : 테이블 Lock(=TM Lock)이 Exclusive 모드이므로 Append 모드로 입력한 ③번 SQL 실행 후 Lock
발생현황을 모니 터 링 한 결과이다.
25. ②
26. ④
27, ④
해설 : 100번 세션의 트랜잭션 격리성 수준을 Serializable 요해선로 설정하였으므로 쿼 리 ⑴ 은 5건이 출력되고
쿼 리(2)는 COMMIT이 수행되어 트랜잭션 격 리성 수준이 Read Comitted이므로 200번 세션의 결과가
公
〇
40. ③
제 3장. 옵티아미저 원리
해설 : d e p tn o 조건이 인라인 뷰 안으 로 파 고 들 어 간 다 . 따라서 다 음 과 같 은 S Q L 을 기 준 으 로 문 제 를 풀 면
쉽다.
해설 : 데이터베이스 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
fro m em p
34. ④ 41. ①
35. ① ,④
해설 : Selectivity = 1 / NDV
Cardinality - 총 로우 수 x Selectivity - 총 로우 수 / NDV
36. ②
37. ②
38. 後
39. ②
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. ②
52. ③
45. © 해설 : 인덱스를 설계하는 가장 중요한 선택 기준은, 조건절에 항상 또는 자주 시용되는지 여부와 느' 조건으로
해설 : Index Skip Scan을 활용하려면 인덱스 선행칼럼이 누락됐거나 부등호, between, like 같은 범위검색 자주 조회되는지 여부다, 인덱스 선두 칼럼이 일단 조건절에 사용돼야 해당 인덱스가 사용될 수 있으므로
조 건이어야 한다. 전자가 특히 중요하다.
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 -- ©—
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. ③
68. ①
60. ② 해설 : ①번 방식으로 처리할 경우,결과가 틀릴 수 있다.
해설 : Hash 조 인은 조 인 만 가능함
69. ③
61. ③ 해설 : 1번은 Random 액세스 방식이므로 전체 고객을 대상으로 조회할 때 비효율적이다. 2번은 고객변경이력
해설 : 선분이력 각각을 b e t w e e n 으로 조회하면 된다, 테이블을 2번 액세스하는 비효율이 있다. 4 번은 Top-N 쿼리 알고리즘이 작동하지 않아 3번에 비해
소트 부 하가 더 크다.
62. ③
점에 주의하기 바란다.
63. ① ,②
때문에 월별 매출 특 성 을 고 려한 파 티 셔 닝 을 하 기가 곤란하다.
64. ③
레코드끼리 연산할 때 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까지 포함)에 대한 경합이 발생하면서 프로세스가
해설 : (A) 의 서브쿼리를 세미조인 방식으로 변경해도 조인에 참여하는 테이블이 더 많으므로 (피보다 I 八)가
더 많이 발생한다. 82. ③
해설 : 주 문 테이블이 고객번호 기준으로 Hash 서브 파티 셔 닝 돼 있으므로 Partial Partition Wise Join 을
74. ③ 활 용 하 는 것이 유리하다.
해설 :Oracle에서 nologging 기능은 insert 문장 에 서 만 효과 가 있다.
75. ②
76. ③
77. ①, ②
公 〇
누적매출 (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 월별지점매출;
② 윈도우 함 수를 이용하지 않는 방식
또는
〇 〇
실기문제 2 - 정답 실기문제 3 - 정답
, 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문이다. 소량 데이터를 조인할 때는
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 업체번호) 마지막주문번호
실 무 적 으 로 활 용 도 가 매 우 높 은 윈 도 우 함 수 를 적절히 구 사 할 줄 아는 지 확 인 하 는 단 순 한 문 제 다 . 참 고 로 ,
S Q L 2 는 모 범 답 안 1 이 더 효 과 적 이 다 . 모 범 답 안 2 에 비해 소 트 공 간 을 덜 사 용 하 기 때문이다.
정답 및 해설
〇 〇
厂 실 기 문제 4 - 정답 실기문제 4 - 해설
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
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
정 답 및 히(설
,( 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
group by 고객번호) b
[ 인덱스 설계 ]
고객 인덱스 : 고객상태코드 + 등록일시 + 고객번호
고객접속이력 인덱스 : 고객번호 + 접속일시
정답 및 해설
〇 O
27 6 I s q l 자 격검 정 실전문제
SQ L 자 격 검 정 실전 문 제 I 2 7 5
정 답 및 해설
( 실기문제 5 - 해귤 실기문제 6 - 정답
= )
참 고 로 ,앞 페이지에서 읽은 데이터를 다시 읽지 않게 구현하려면 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. 고객번호 = 〇 . 주문고객번호
파일 출 력용 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 ;
게 하려면, 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 78 | s q l 자격검정 실전문제
sq l 자격검정 실전문제 I 2 7 7
정 답 및 해설
3. 배송 테이블은 배송일자 기준으로 Range 파티션된 상태인데, 배송일자가 조건절에 없다. 따라서 Full & an 으
로 처리한다면 전체 파티 션 을 읽어야 한다. 3,000만건 조인하기 위해 수십억 건을 읽어야 할 수도 있다.
실행계획 W 번 라인 ‘PARTITION RANGE ALL’을 통해 이 사 실을 확 인 할 수 있다.
and 배 송 일 자 〉= '20160601'
수 있다.
여기서는 고객 수 가 500만 명이라고 명시했다. 스칼라 서브쿼리 캐싱효과가 도움이 되지 않는 상황이다.
따라서 고객에 대한 스 칼라 서브쿼리를 일반 조인문으로 변경한 후 해시 조인으로 유도 해 야 한다.
Fast Full Scan 방식으로 처리하면 된다. 인덱스 전체를 스 캔하므로 인덱스 컬럼순서 변경은 불필요하다.
병 렬처 리를 활용하지 않을 이유가 없다. 주문, 배송 테이블에 parallel 힌트를 사용하면 된다. 고객 테이블은
인덱스만 읽도록 유도했으 므 로 병렬 처리를 위해 pamllel_index 힌트를 사용해야 한다. (최근 버전에서는
정답 및 해설
s q l 자 격 검 정 실전문 제 I 279
一
• •
국 ■가 ■공 ■인 국 ■가 • 공 • 인
SQL Pi-Jess^®
約 ip ®
뼈
MB*■料
妖data 안국대이6
- 출판사 : 한국데이터진흥원
- 내 용 : 데이터 이해,데이터처리기술이해,
데이터 분석 기획,데이터 분석,
데이터 시각화
_ 가 격 : 5만원
- 판매처 : 전국유명서점 (온, 오프라인)
- 출판사 : 한국데이터진흥원
- 내 용 : 전사아키텍처이해,데이터요건분석,
데이터 표준하, 데이터 모델링,
데이터베이스 설계와 이용,
데이터 품질 관리이해
_ 가 :
격 : g만원
발행처 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 자 격 검 정 실 전 문 제 」 내 용 과 관 련 한 문 의 는 한 국 데 이 터 진 흥 원
으로 연락해 주시기 바랍니다.