과목 Ⅰ. 데이터 모델링의 이해
1.데이터 모델링의 이해
3번 데이터 모델링의 유의점
- 중복(Duplication) : 데이터 모델은 같은 데이터를 사용하는 사람, 시간 그리고 장소를 파악하는데 도움을 줌으로써 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못을 하지 않도록한다.
- 비유연성(Inflexibility) : 데이터 모델을 어떻게 설계했느냐에 따라 사소한 업무변화에도 데이터 모델이 수시로 변경됨으로써 유지보수의 어려움을 가중시킬 수 있다. 데이터의 정의를 데이터의 사용 프로세스와 분리함으로써 데이터 모델링은 데이터 혹은 프로세스의 작은 변화가 애플리케이션과 데이터베이스에 중대한 변화를 일으킬 수 있는 가능성을 줄인다.
- 비일관성(Inconsistency) : 데이터의 중복이 없더라도 비일관성은 발생할 수 있는데, 예를 들면 신용 상태에 대한 갱신 없이 고객의 납부 이력 정보를 갱신하는 경우이다. 개발자가 서로 연관된 다른 데이터와 모순된다는 고려 없이 일련의 데이터를 수정할 수 있기 때문에 이와 같은 문제가 발생할 수 있다. 데이터 모델링을 할 때 데이터와 데이터 간의 상호 연관 관계에 대해 명확하게 정의한다면 이러한 위험을 사전에 예방하는데 도움을 줄 수 있다. 사용자가 처리하는 프로세스 혹은 이와 관련된 프로그램과 테이블의 연계성을 높이는 것은 데이터 모델이 업무 변경에 대해 취약하게 만드는 단점에 해당한다.
5번 데이터 모델링 개념
- 개념적 데이터 모델링 : 추상화 수준이 높고 업무 중심적이고 포괄적인 수준의 모델링 진행. 전사적 데이터 모델링, EA수립시 많이 이용
- 논리적 데이터 모델링 : 시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계 등을 정확하게 표현, 재사용성이 높음
- 물리적 데이터 모델링 : 실제로 데이터 베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계
6번 데이터베이스 스키마 구조 3단계
- 외부 스키마 (External Schema) : 각 사용자 단계의 개인적 DB 스키마, 사용자 관점, 응용 프로그램이 접근하는 DB를 정의함
- 개념 스키마 (Conceptual Schema) : 조직 전체의 통합된 DB 스키마, 설계자 관점 데이터 모델링의 지향점
- 내부 스키마 (Internal Schema) : 물리적으로 데이터가 저장되는 방법을 표현하는 스키마, 개발자 관점, 물리적 저장 구조임
10번 엔터티의 특징
- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보이어야 한다.
- 유일한 식별자에 의해 실별이 가능해야 한다.
- 영속적으로 존재하는 (두 개 이상의) 인스턴스의 집합이어야 한다.(“한 개”가 아니라 “두 개 이상”)
- 엔터티는 업무 프로세스에 의해 이용되어야 한다.
- 엔터티는 반드시 속성이 있어야 한다.
- 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다.
단답형 14번 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위를 무엇이라 하는가? 속성(ATTRIBUTE)
15번 엔터티, 인스턴스, 속성, 속성값의 관계
- 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 한다.
- 한 개의 엔터티는 두 개 이상의 속성을 갖는다.
- 한 개의 속성은 한 개의 속성값을 갖는다.
16번 속성의 특성에 따른 분류
- 기본 속성 (Basic) : 비즈니스 프로세스에서 도출되는 본래의 속성
- 설계 속성 (Designed) : 데이터 모델링 과정에서 업무 규칙화를 위해 발생하는 속성
- 파생 속성 (Derived) : 다른 속성에 의해 만들어지는 속성 (↔ 저장 속성은 유도 속성을 생성하는 데 사용되는 속성)
18번 도메인 - 각 속성은 가질 수 있는 값의 범위가 있는데 이를 그 속성의 도메인(Domain)이라하며, 엔터티 내에서 속성에 대한 데이터타입과 크기 그리고 제약사항을 지정하는 것이다.
20번 데이터 모델링의 관계
- ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않지만 클래스다이어그램에서는 이것을 구분하여 연관관계와 의존관계로 표현한다.
- 데이터모델링(ERD??)에서는 존재적 관계와 행위에 의한 관계를 구분하는 표기법이 없으며, UML(클래스다이어그램??)에서는 연관관계와 의존관계에 대해 다른 표기법을 가지고 표현하게 되어 있다.
21번 관계
- 관계 표기법은 관계명, 관계차수, 선택성(선택사양)의 3가지 개념으로 표현
- 관계는 존재적 관계와 행위에 의한 관계로 나누어볼 수 있다.
- 부서와 사원 엔터티 간의 ‘소속’관계 -> 존재적 관계의 사례
- 주문과 배송 엔터티 간의 ‘배송근거’관계 -> 행위에 의한 관계의 사례
“
23번 두 개의 엔터티 사이에 정의 관계 체크 사항 중 업무기술서, 장표에 관계연결을 가능하게 하는 “동사(Verb)”가 있는가?
29번 식별자관계, 비식별자관계
항목 식별자관계 비식별자관계
목적 강한 연결관계 표현 약한 연결관계 표현
자식 주식별자 영향 자식 주식별자의 구성에 포함됨 자식 일반 속성에 포함됨
표기법 실선 표현 점선 표현
연결 고려사항 반드시 부모엔터티 종속, 자식 주식별자구성에 부모 주식별자포함 필요, 상속받은 주식별자속성을 타 엔터티에 이전 필요 약한 종속관계, 자식 주식별자구성을 독립적으로 구성, 자식 주식별자구성에 부모 주식별자 부분 필요, 상속받은 주식별자속성을 타 엔터티에 차단 필요, 부모쪽의 관계참여가 선택관계
2.데이터 모델과 성능
단답형 32번 데이터 모델링 단계에서 성능을 충분히 고려하기 위한 성능 데이터 모델링 수행 절차 - ㉠ 정규화, ㉡ 반정규화(역정규화)
1. 데이터 모델링을 할 때 ( ㉠ )를 정확하게 수행한다.
2. 데이터베이스 용량산정을 수행한다.
3. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
4. 용량과 트랜잭션의 유형에 따라 ( ㉡ )를 수행한다.
5. 이력모델의 조정, PK/FK조정, 슈펴타입/서브타입 조정 등을 수행한다.
6. 성능관점에서 데이터모델을 검증한다.
36번 정규화 단계 ★★★문제랑 해설지 다시 보기
- 1차 정규화: 속성의 원자성 확보, 다중값 속성을 분리함
- 2차 정규화: 부분 함수 종속성 제거, 일부 기본키에만 종속된 속성을 분리함, 기본키가 하나의 칼럼일 때 생략 가능
- 부분 함수 종속성
- 3차 정규화: 이행 함수 종속성 제거, 서로 종속관계가 있는 일반속성을 분리함, 주식별자와 관련성이 가장 낮음
- 이행 함수 종속성
- 보이스코드 정규화(BCNF; Boyce-Codd Normal Form): 후보키가 기본키 속성 중 일부에 함수적 종속일 때 다수의 주식별자를 분리함
- 4차 정규화, 5차 정규화: 다치 종속 분리, 결합 종속 분리
37번 정규화 단계 ★★★문제랑 해설지 다시 보기
40번 반정규화
- 반정규화는 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다.
- 반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있고 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다.
- 데이터 무결성이 꺠질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.
41번 반정규화 기법
- 반정규화의 기법은 테이블, 속성, 관계에 대해서 반정규화를 적용할 수 있으며, 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아 놓는 반정규화 기법은 테이블 추가 반정규화 기법 중에서 부분테이블 추가에 해당한다.
42번 칼럼에 대한 반정규화 기법
- 중복칼럼 추가 -> 조인감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 한다.
- 파생칼럼 추가 -> 조회 선능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 한다.
- 이력테이블에 기능칼럼 추가 -> 최신값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가한다.
43번 반정규화 기법 ★★★문제랑 해설지 다시 보기
단답형 46번 반정규화의 대상에 대해 다른 방법으로 처리
- 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용하면 해결할 수도 있다.
- 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우에 클러스터링을 적용하거나 인덱스를 조정함으로써 성능을 향상시킬 수 있다.
- 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리할 수 있다. 즉, 파티셔닝 기법(Partitioning)이 적용되어 성능저하를 방지할 수 있다.
- 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있다.
47번 슈퍼/서브 타입 데이터 모델의 변환기술 ★★★문제랑 해설지 다시 보기
- 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성
- 슈퍼타입+서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼타입+서브타입 테이블로 구성
- 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성
48번 슈퍼/서브 타입 데이터 모델의 변환기술
- 트랜잭션은 항상 전체를 대상으로 일괄 처리하는데 테이블은 서브타입 별로 개별 유지하는 것으로 변환하면 Union 연산에 의해 성능이 저하될 수 있다.
- 트랜잭션은 항상 서브타입 개별로 처리하는데 테이블은 하나로 통합하여 변환하면 불필요하게 많은 양의 데이터가 집적되어 있어 성능이 저하될 수 있다.
- 트랜잭션은 항상 슈퍼+서브 타입을 함께 처리하는데 개별로 유지하면 조인에 의해 성능이 저하될 수 있다.
- 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 슈퍼-서브타입이 하나의 테이블로 통합되어 있으면 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에 다른 형식에 비해 더 성능이 우수한다.(조인 감소)
PK순서를 결정하는 기준은 인덱스 정렬구조를 이해한 상태에서 인덱스를 효율적으로 이용할 수 있도록 PK순서를 지정해야 한다. 즉, 인덱스의 특징은 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자로 있어야 인덱스가 좋은 효율을 나타낼 수 있다. 앞쪽에 위치한 속성 값이 가급적 ‘=‘(EQUAL 조건) 아니면 최소한 범위 ‘BETWEEN’ ‘< >’가 들어와야 인덱스를 이용할 수 있는 것이다.
52번 분산 데이터베이스 환경에서 데이터베이스 분산설계를 적용하여 효율성을 증대시킬 수 없는 것은?
- O 공통코드, 기준정보 등 마스터 데이터는 분산데이터베이스에 복제분산을 적용한다.
- O 거의 실시간(Near Real Time) 업무적인 특성을 가지고 있을 때 분산 데이터베이스를 사용하여 구성할 수 있다.
- O 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다.
- X Global Single Instance(GSI)를 구성할 때 분산데이터베이스를 활용하여 구성하는 것이 효율적이다. -> GSI는 통합된 한 개의 인스턴스 즉, 통합 데이터베이스 구조를 의미하므로, 분산데이터베이스와는 대치되는 개념
과목 Ⅱ. SQL 기본 및 활용
1.SQL 기본
1번 SQL 문장들의 종류
- DML 데이터 조작어 : SELECT, INSERT, UPDATE, DELETE - 데이터를 조작하는 언어
- DDL 데이터 정의어 : CREATE, ALTER, DROP, RENAME - 데이터의 구조를 정의하는 언어
- DCL 데이터 제어어 : GRANT, REVOKE - 데이터에 접근하는 객체들을 사용하도록 권한을 주고 회수하는 언어
- TCL 트랜잭션 제어어 : COMMIT, ROLLBACK - 논리적인 작업 단위인 트랜잭션을 제어하는 언어
4번 데이터 언어와 SQL 명령어에 대한 설명
- As - Is : 비절차적 데이터 조작어(DML)는 사용자가 무슨(What) 데이터를 원하는 지만을 명세함
- To - Be : 비절차적 데이터 조작어(DML)는 사용자가 무슨(What) 데이터를 원하는 지만을 명세하지만, 절차적 데이터 조작어는 어떻게(How) 데이터를 접근해야 하는지 명세 한다. 절차적 데이터 조작어로는 PL/SQL(오라클), T-SQL(SQL Server) 등이 있다.
7번 테이블 칼럼에 대한 정의 변경
- [Oracle] : ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터유형 [DEFAULT 식][NOT NULL], 칼럼명2 데이터 유형…);
- [SQL Server] : ALTER TABLE 테이블명 ALTER 칼럼명 데이터유형 [DEFAULT 식][NOT NULL];
- SQL Server에서는 여러 개의 칼럼을 동시에 수정하는 구문은 지원하지 않고 괄호를 사용하지 않는다.
- NOT NULL 구문을 지정하지 않으면, 기존의 NOT NULL 제약조건이 NULL로 변경된다.
9번 참조조건 DELETE CASCADE, DELETE SET NULL
- FK 제약조건으로 부모테이블을 참조할 때 참조하는 부모테이블의 데이터를 삭제할 때 DELETE CASCADE 조건이 걸려있으면 자식 테이블의 조건이 걸린 데이터도 함께 삭제되고 SET NULL 조건은 FK 데이터가 NULL로 변경된다.
10번 UNIQUE 제약조건에 NULL 입력 가능
12번 테이블 구조 정의 (DEFAULT값, Index 생성)
- DEFAULT값을 지정해주더라도 NOT NULL 제약조건을 생성하지 않으면, 명시적으로 NULL 데이터를 삽입했을떄 NULL이 입력되게 된다.
- 인덱스 생성 : CREAT INDEX 인덱스명 ON 테이블명 (인덱스를 생성할 컬럼명);
13번 NULL값과 COUNT함수
- COUNT(*) : NULL값을 포함해서 카운트
- COUNT(컬럼명) : NULL값을 뺴고 카운트
- COUNT(PK컬럼명) : PK 컬럼엔 NULL이 올 수 없으므로, COUNT(*)과 결과 수가 같다.
16번 테이블의 불필요한 칼럼 삭제
- ALTER TABLE 테이블명 DROP COLUMN 칼럼명;
18번 테이블 이름 변경(ANSI 표준)
19번 테이블 참조관계 상의 참조동작
-
Delete(/Modify) Action
1) Cascade : Master 삭제 시 Child 같이 삭제
2) Set Null : Master 삭제 시 Child 해당 필드 Null
3) Set Default : Master 삭제 시 Child 해당 필드 Default 값으로 설정
4) Restrict : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용
5) No Action : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음
-
Insert Action
1) Automatic : Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력
2) Set Null : Master 테이블에 PK가 없는 경우 Child 외부키를 Null 값으로 처리
3) Set Default : Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력
4) Dependent : Master 테이블에 PK가 존재할 떄만 Child 입력 허용
5) No Action : 참조무결성을 위반하는 입력 액션을 취하지 않음
23번 데이터 삭제 시 로그를 남기는 것을 원칙으로 할 때 테이블 데이터 삭제 - DELETE FROM 테이블명;
- TRUNCATE TABLE, DROP TABLE은 로그를 남기지 않는다.
- DELETE * FROM 테이블명; - 문법에 맞지 않는다.
- TRUNCATE TABLE 테이블명 -> 테이블 구조, 스키마 유지하고 데이터만 삭제
- DROP TABLE 테이블명; -> 테이블 정의 자체를 삭제
27번 트랜잭션의 특성
- 원자성(atomicity) : 트랜잭션에서 정의된 연산들을 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (all or nothing)
- 일관성(consistency) : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.
- 고립성(isolation) : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.
- 지속성(durability) : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
28번 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점
- Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
- Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션의 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
- Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상
29번 Oracle, SQL Server의 커밋 롤백(AUTO COMMIT FALSE 시)
- Oracle에서는 DDL 문장 수행 후 자동 COMMIT
- SQL Server에서는 DDL 문장 수행 후 자동 COMMIT 수행하지 않음
31번 ROLLBACK 구문은 COMMIT되지 않은 상위의 모든 Transaction을 모두 rollback한다.
37번 Oracle에서 Null 값이 허용되는 컬럼에 ‘’(공백) INSERT시 Null 값이 입력되고 SQL Server는 ‘’(공백)이 입력된다.
40번 내장 함수 설명
- 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE의 SET절에 사용이 가능하다.
- 1:M 조인이라 하더라도 M쪽에서 출력된 행이 하나씩 단일행 함수의 입력값으로 사용되므로 단일행 함수를 사용할 수 있다.
- 다중행 함수도 단일행 함수와 동일하게 단일 값만을 반환한다.
41번 단일행 문자형 함수
- CHR : 주어진 ASCII 코드에 대한 문자를 반환하는 함수(CHR(10) -> 줄바꿈)
- REPLACE : 문자열을 치환하는 함수(REPLACE(C1, CHR(10)) -> 줄바꿈 제거)
42번 날짜형 함수
- SELECT TO_CHAR(TO_DATE(‘2015.01.10 10’, ‘YYYY.MM.DD HH24’) + 1/24/(60/10), ‘YYYY.MM.DD HH24:MI:SS’) FROM DUAL;
- 특정 날짜에 1을 더하면 하루를 더한 결과와 같다 -> 1/24/60 = 1분을 의미 -> 1/24/(60/10) = 10분을 의미
- 2015.01.10 10:10:00
43번 SEARCHED_CASE_EXPRESSION, SIMPLE_CASE_EXPRESSION 변형
- CASE WHEN LOC = ‘NEW YORK’ THEN ‘EAST’
ELSE ‘ETC’
END
- CASE LOC WHEN ‘NEW YORK’ THEN ‘EAST’
ELSE ‘ETC’
END
46번 NULLIF - NULLIF(MGR, 7698) : MGR이 7698이면 NULL 아니면 MGR 값 리턴
49번 NVL/ISNULL, NULLIF, COALESCE
- NVL/ISNULL(표현식 1, 표현식2) : 표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다.
- NULLIF(표현식1, 표현식2) : 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다.
- COALESCE(표현식1, 표현식2, …) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다.
C1 C2 C3
1 2 3
2 3
3
- SELECT SUM(COALESCE(C1, C2, C3)) FROM TAB1; -> 첫번째로 Null이 아닌 값 반환 C1 - 1, C2 - 2, C3 -3 -> 6
53번 GROUP BY 오류 찾기
- SELECT 메뉴ID, 사용 유형코드, AVG(COUNT(*)) AS AVGCNT
FROM 시스템사용이력
GROUP BY 메뉴ID, 사용유형코드;
- 중첩된 그룹함수의 경우 최종 결과값은 1건이 될 수 밖에 없기에 GROUP BY절에 기술된 메뉴ID와 사용유형코드는 SELECT절에 기술될 수 없다.
56번 ORDER BY 오류 찾기
- SELECT 지역, SUM(매출금액) AS 매출금액
FROM 지역별매출
GROUP BY 지역
ORDER BY 년 DESC;
- GROUP BY를 사용할 경우 GROUP BY 표현식이 아닌 값은 기술될 수 없다.
59번 SELECT 문장 실행 순서
- FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
2.SQL 활용
65번 순수 관계 연산자
- SELECT, PROJECT, JOIN, DIVIDE
71번 Cartesian Product -> CROSS JOIN
- CROSS JOIN은 E.F.CODD 박사가 언급한 일반 집합 연산자의 PRODUCT의 개념으로 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다. 조건절이 없거나 CROSS JOIN 키워드를 사용할 수 있다.
72번 LEFT OUTER JOIN
- 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어온다. 즉, Table A와 B가 있을 때(Table ‘A’가 기준이 됨). A와 B를 비교해서 B의 JOIN 칼럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고, B의 JOIN 칼럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다.
79번 EXCEPT 차집합 연산
- EXCEPT는 차집합에 대한 연산이므로 NOT IN 또는 NOT EXISTS로 대체하여 처리가 가능하다.
88번 Oracle 계층형 질의
- START WITH절은 계층 구조의 시작점을 쩡하는 구문이다. 즉, 루트 데이터를 지정한다.(액세스)
- ORDER SIBLINGS BY절은 형제 노드(동일 LEVEL) 사이에서 정렬을 지정하는 구문이다.
- 순방향전개란 부모 노드로부터 자식 노드 방향으로 전개하는 것을 말한다.
- 루트 노드의 LEVEL 값은 1이다.
89번 ★★★문제랑 해설지 다시 보기
90번 계층형 질의
- SQL Server에서의 계층형 질의문은 CTE(Common Table Expression)를 재귀 호출함으로써 계층 구조를 전개한다.
- SQL Server에서의 계층형 질의문은 앵커 멤버를 실행하여 기본 결과 집합을 만들고 이후 재귀 멤버를 지속적으로 실행한다.
- 오라클의 계층형 질문에서 WHERE 절은 모든 전개를 진행한 이후 필터 조건으로서 조건을 만족하는 데이터만을 추출하는데 활용된다.
- 오라클 계층형 질의문에서 PRIOR 키워드는 SELECT, WHERE 절에서도 사용할 수 있다.
95번 서브쿼리
- 서브쿼리는 단일 행(Single Row) 또는 복수 행(Multi Row) 비교 연산자와 함께 사용할 수 있다.
- 서브쿼리는 SELECT 절, FROM 절, HAVING 절, ORDER BY 절 등에서 사용이 가능하다.
- 서브쿼리의 결과가 복수 행 결과를 반환하는 경우에는 IN, ALL, ANY 등의 복수 행 비교 연산자와 사용하여야 한다.
- 연관(Correlated) 서브쿼리는 서브쿼리가 메인쿼리 컬럼을 포함하고 있는 형태의 서브쿼리이다.
- 다중 컬럼 서브쿼리는 서브쿼리의 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 비교되는데, SQL Server에서는 현재 지원하지 않는 기능이다.
103번 뷰(View)
- 뷰는 단지 정의만을 가지고 있으며, 실행 시점에 질의를 재작성하여 수행한다.
- 뷰의 장점중 독립성은 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.
- 뷰는 보안을 강화하기 위한 목적으로도 활용할 수 있다.
- 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 있다.
123번 PL/SQL
- 변수와 상수 등을 사용하여 일반 SQL 문장을 실행할 때 WHERE절의 조건 등으로 대입할 수 있다.
- Procedure, User Defined Function, Trigger 객체를 PL/SQL로 작성할 수 있다.
- PL/SQL로 작성된 Procedure, User Defined Function은 작성자의 기준으로 트랜잭션을 분할할 수 있으며, 또한 프로시저 내에서 다른 프로시저를 호출할 경우에 호출 프로시저의 트랜젝션과는 별도로 PRAGMA AUTONOMOUS_TRANSACTION을 선언하여 자율 트랜젝션 처리를 할 수 있다.
- Procedure 내부에 작성된 절차적 코드는 PL/SQ엔진이 처리하고 일반적인 SQL 문장은 SQL실행기가 처리한다.