기출문제&개념정리 출처: https://cafe.naver.com/sqlpd
- 데이터모델링의 이해 10문제
- SQL 3~40문제
- 주관식 8~10문제
* SQLD는 문제를 잘 읽어야 한다. 단어하나로 치사하게 꼬는 문제들이 많음.
[데이터 모델링의 이해]
1. 엔터티 문제
엔터티
엔터티는 사람, 장소, 물건, 사건, 개념 등의 명사에 해당한다.
엔터티는 업무상 관리가 필요한 관심사에 해당한다.
엔터티는 저장이 되기 위한 어떤 것(Thing)이다.
엔터티 특징
반드시 해당 업무에 필요하고 관리하고자 하는 정보여야 한다.
유일한 식별자에 의해 식별이 가능해야한다.
영속적으로 존재하는 인스턴스의 집합이어야 한다. (‘한 개’가 아니라 ‘두 개 이상’)
엔터티는 업무 프로세스에 의해 이용되어야 한다.
엔터티는 반드시 속성이 있어야 한다.
엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다.
Q. 다음 중 엔터티의 특징이 아닌 것은? 1. 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다. 2. 영속적으로 존재하는 인스턴스의 집합이다. 3. 유일한 식별자에 의해 식별이 가능해야 한다. 4. 속성이 없는 엔터티도 존재 할 수 있다. |
2. 주식별자
식별자의 개념
식별자는 엔터티를 구분짓는 논리적인 이름 / 엔터티 대표 속성 / 반드시 하나의 유일한 식별자가 존재
식별자의 특징
1) 유일성 : 모든 인스턴스들이 유일하게 구분되어야함
2) 최소성 : 유일성을 만족하는 최소의 수가 되어야함
3) 불변성 : 식별자가 한 번 특정 엔터티에 지정되면 값은 변하지 않아야함
4) 존재성 : 식별자는 반드시 데이터값이 존재해야함 (NULL 불가)
관련 기출
식별자의 특징 중 주식별자에 대한 특징이 아닌 것은? 1. 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구분되어야 한다 2. 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다. 3. 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다. 4. 주식별자가 지정이 되면 반드시 값이 들어오지 않아도 된다. |
3. 속성
1) 기본속성 : 일반적이고 많은 속성 EX) 제품이름, 제조년월
2) 설계속성 : 업무상 필요한 데이터의 속성을 새로 만들거나 변형하여 정의하는 속성
3) 파생속성 : 보통 다른 속성에서 계산된 값들이 이에 해당됨
4. 관계
관계 표기법
1) 관계명 : 관계이름
2) 관계차수 (CARDINAILTY) -> 1:1 , 1:M , M:N
3) 관계선택사양(OPTIONALLITY): 필수관계, 선택관계
5. 정규화
정규화 : 프로젝트 수행에서 정규화는 필수 사항/ 한 테이블의 데이터 용량이 최소화 되는 효과
1) 1차 정규형 : 모든 속성이 원자값으로 구성
2) 2차 정규형 : 부분적 함수 종속 / 식별자가 아닌 모든 속성들은 식별자 전체 속성에 완전 종속되야 한다.
3) 3차 정규형 : 이행적 함수 종속제거 / 2차 정규형을 만족하고 식별자를 제외한 나머지 속성들 간의 종속이 존재 하면 안된다.
*이해가 안되니깐 그림을 보면 이해가 쉽다.
*3차 이후는 잘 안나오는 것 같아서 생략
반정규화 :
1) 정규화된 시스템의 성능향상, 개발, 운영의 단순화를 위해 중복, 통합, 분리 등을 수행
사용이유
1) 데이터의 I/O량이 많아서 성능이 저하된 경우
2) 경로가 너무 멀어 조인으로 성능저하가 예상되는 경우
3) 칼럼을 계산하여 읽을 때 성능저하가 예상되는 경우
아래의 설명 중 반정규화 대상이 아닌 것은? 1) 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우 2) 테이블의 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없을 경우 3) 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계 테이블을 생성해야 하는 경우 4) 테이블에 지나치게 많은 조인과 Sorting, Order by 프로세스가 많은 경우 |
6. 데이터 모델링의 단계
1) 개념적 데이터 모델링 : 추상화 / 전사전(EA) 모델링 사용
2) 논리적 데이터 모델링 : KEY, 속성, 관계 등을 정확히 표현
3) 물리적 데이터 모델링 : 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계
데이터 모델링이 최종적으로 완료된 상태라고 정의할 수 있는, 즉 물리적인 스키마 설계를 하기 전 단계를 가리키는 말은 무엇인가? 1) 개괄적 모델링 2) 개념적 모델링 3) 논리적 모델링 4) 물리적 모델링 |
6. 파티셔닝 (3가지만 외우면 된다.)
테이블이 많은 양의 데이터가 예상 될 경우 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하는 방법을 적용할 수 있다.
ORACLE의 경우
1) Range Partition : 가장 많이 사용(보편적,일반적) / 대상 테이블이 날짜, 숫자 값으로 분리가능 / 데이터 보관 주기에 따라 데이터를 쉽게 지우는 것이 가능
2) List Partition : 대용량 데이터를 특정 값에 따라 분리,저장 가능 / 쉽게 삭제 안됨
3) Hash Partition : 저장된 해쉬조건의 알고리즘이 적용되어 테이블 분리 / 테이터 확인 어려움 / 쉽게 삭제 안됨
(4) COMPOSITE PARTITION : 범위와 해쉬가 복합
아래에서 설명하고 있는 파티셔닝은 어느 것인가? 대상 테이블이 날짜 또는 숫자 값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리될 때 적용한다. 데이터 보관 주기에 따라 테이블에 데이터를 쉽게 지우는 것이 가능하므로 데이터 보관주기 별 테이블 관리가 용이하다. 가장 많이 사용한다. 1. LIST PARTITION 2. HASH PARTITION 3. RANGE PARTITION 4. ORIGINAL PARTITION |
* 오리지날 파티션 따위는 없다.
7. 슈퍼/서브 타입의 모델링 변환 기술
1) 1:1 – ONE TO ONE TYPE : 개별 테이블로 접근이 많은 경우 선택
2) 슈퍼 + 서브타입 테이블 – PLUS TYPE : 슈퍼+서브 형식으로 데이터 처리
3) 하나의 테이블 – SINGLE TYPE : 전체를 일괄적으로 처리하는 경우
8. 분산 데이터베이스 투명성
1) 분할투명성
2) 위치투명성
3) 지역사상투명성
4) 중복 투명성
5) 장애 투명성
6) 병행 투명성
7. 은근 도메인(domain)을 좋아한다.
각 속성이 가질 수 있는 값의 범위
8. ERD 작업 순서
엔터티 도출(그린다.) -> 엔터티 적절하게 배치 -> 엔터티 간 관계 설정 -> 관계명 기술 -> 관계의 참여도 기술 -> 관계의 필수여부 기술
*[도->배->설->명->참->필]로 외워보자
ERD 작업 순서로 올바르게 나열된 것은? ㄱ. 엔터티를 적절하게 배치한다. ㄴ. 관계의 필수여부를 기술한다. ㄷ. 엔터티를 그린다. ㄹ. 관계명을 기술한다. ㅁ. 엔터티간 관계를 설정한다. ㅂ. 관계의 참여도를 기술한다. 1. ㄱ-ㄴ-ㄷ-ㄹ-ㅁ-ㅂ 2. ㄷ-ㄱ-ㅁ-ㄹ-ㅂ-ㄴ 3. ㄷ-ㄱ-ㄹ-ㅂ-ㄴ-ㅁ 4. ㄷ-ㄱ-ㅁ-ㄹ-ㄴ-ㅂ 5. ㄷ-ㄴ-ㅁ-ㄹ-ㄴ-ㅂ |
[데이터 모델의 성능]
* 데이터 모델링을 할 때 정규화를 정확하게 수행
* 데이터베이스 용량산정을 수행
* 데이터베이스에 발생되는 트랜잭션의 유형을 파악
* 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
* 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등을 수행한다.
* 성능관점에서 데이터모델을 검증한다.
9. 대량 데이터에 따른 성능
로우 마이그레이션 (ROW MIGRATION) : 수정된 데이터를 해당 데이터에 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식. *MIGRATION:이주
로우 체이닝 (ROW CHAINING) : 로우 길이가 너무 길어서 데이터 블록 하나에 모두 저장이 안되서 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어있는 형태
Row migration과 Row Chaining 에 대한 아래의 설명 중 바른 것은? 1) Row Chaining 과 Row Migration 이 많아지게 되더라도 성능 저하는 일어나지 않는다. 2) 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되는 현상을 Row Chaining 이라고 한다. 3) Row Migration 은 신규 데이터의 입력이 발생할 때 발생되는 현상이다. 4) Row Chaining 과 Row Migration 이 발생되면 디스크 I/O 가 발생 될 때 I/O 가 많아지게 되어 성능이 향상될 수 있다. |
[SQL] - 40문제
1. 트랜잭션의 특징/ 특성
원자성 – All Or Nothing (되던지 안되던지 한 개만 한다.)
고립성 – 트랜잭션 실행도중 다른 트랜잭션의 영행을 받아서는 안된다.
일관성 – 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어있지 않다면 실행 이후도 같아야한다.
지속성 – 한번 바뀌면 영구적으로 지속되어야 한다.
트랜잭션의 특징 중 옳지 않은 것은? 1. 일관성(consistency) 2. 원자성(atomicity) 3. 지속성(durability) 4. 중복성(duplication) 5. 고립성(isolation) |
트랜잭션의 특성 그 의미와 맞는 것은? 1. 일관성 : 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. 2. 원자성 : 트랜잭션이 실행되기 전 데이터의 내용이 잘못되면 실행 이후에도 내용이 잘못 되어 있지 않다. 3. 고립성 : 트랜잭션이 실행되는 도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다 4. 연관성 : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다. |
- 오라클은 DML사용 후 COMMIT 사용해야함, MS-SQL은 AUTO COMMIT
2. SQL 조작어
DDL(Data Definetion Language) - CREATE, ALTER, DROP,
DML(Data Manulation Language) - SELECT, UPDATE, DELETE, INSERT
DCL(Data Controll Language) - GRANT(권한생성), REVOKE (권한회수)
TCL(Tansaction Controll Language) - COMMIT, ROLLBACK
관련기출
DML에 대한 설명으로 옳은 것은? 1. DELETE 사용 시FROM 문구는 생략이 불가능하다. 2. 원하는 데이터 DELETE 시 WHERE 절은 반드시 붙이지 않아도 된다. 3. DML 문장은 실시간으로 테이블에 영향을 미친다. 4. DML은 반드시 COMMIT을 입력하여 TRANSACTION을 종료해야 한다. |
아래의 DML, DCL, DDL 이 잘못 짝지워진 것은? 1) DDL : CREATE 2) DML : UPDATE 3) DCL : ROLLBACK 4) DCL : SELECT |
SQL 명령어중 TCL 인 것은 어떤 것인가? 1) UPDATE 2) GRANT 3) SELECT 4) COMMIT |
3. SQL 실행순서
반드시 외웁시다. 외우기도 쉽습니다.
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
여러 가지 형태로 기출이 출제된다.
다음 중 옳지 않은 것은? 1) 기본적인 정렬 순서는 오름차순(ASC)이다. 2) Order by 절에는 Select 목록에 나타나지 않은 문자형 항목이 포함될 수 있다. 3) 4개의 테이블이 있다면 Join 조건은 적어도 3개 이상이 필요하다. 4) SQL 문장의 파싱 순서는 From – Where – Order by – Select 순이다. 5) Non Equi Join은 두 테이블 간 컬럼 값이 서로 정확하게 일치하지 않는 경우 사용한다. |
다음 설명 중 틀린 하나는? 1) ORDER BY 절에서 쿼리 내 SELECT 절에 정의되지 않은 컬럼도 사용할 수 있다. 2) 권장하진 않지만, 복수의 테이블을 JOIN하여 WHERE 절을 작성할 시, 문장 내 유일하게 사용하는 컬럼이라면 ALIAS를 붙이지 않아도 된다. 3) “=” 연산자가 아닌 다른 연산자를 사용할 JOIN은 모두 NON EQUI JOIN이다. 4) SELECT 문은 SELECT 절이 가장 먼저 실행된다. 5) GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없다. |
*이런식으로 치사하게 나오니 문제를 항상 꼼꼼하게 읽자!
4. NULL의 설명 (의미가 있다고 하는 건 다 오답)
다음 중 NULL의 설명으로 가장 부적절한 것은? 1. 모르는 값을 의미한다. 2. 값의 부재를 의미한다. 3. 공백문자(Empty String) 혹은 숫자 0을 의미한다. 4. NULL과의 모든 비교는 알 수 없음(Unknown)을 반환한다. |
*SQL 쿼리문에서 SUM() 같은거 할 때 0으로 치환할 수 도 있기 때문에
헷갈릴 수 있으나 이 것은 단순히 ‘NULL’에 대한 설명이므로 3번이 오답임.
Null 에 대한 설명으로 틀린 것은? 값이 존재하지 않거나 확정되지 않은 값을 의미한다. Null 과의 수치연산은 Null 값을 리턴한다. Null 과의 비교연산은 False(거짓)를 리턴한다. 공백과 같은 ASCII 값을 가진다. Is null, is not null이라는 정해진 문구만을 사용해야 한다. |
*NULL의 의미를 가진다는 답은 틀린것임
NULL 함수
-NVL(컬럼,0) : 컬럼이 NULL이면 0으로 치환한다.
-ISNULL : (컬럼, '대체값') - 컬럼이 NULL이면 '대체값'으로 치환한다.
-NULLIF(컬럼A, 컬럼B) : 컬럼A가 NULL이면 컬럼B로 치환한다.
-COALSECE(컬럼A, 컬럼B, 컬럼C...) : 헷갈릴 수 있다. 아래 문제를보자.
데이터가 아래와 같이 있을 때, 쿼리 결과값이 다음과 같이 출력이 되도록 쿼리를 작성하시오. N01 N02 N03 N04 N05 N06 1 2 3 4 5 6 2 10 20 30 40 50 3 300 400 4 4000 5000 5 5000 5 6 6000 3000 <결과> (Table 명은 편의상 Tab으로 한다.) 1 2 2 10 3 300 4 4000 5 5000 6 6000 답 : select coalesce(x.n01, x.n02, .n03, x.n04, x.n05, x.n06 ) from tab x |
*한줄씩 row를 읽는데, N01컬럼에서 NULL이 나오면 N02 컬럼으로 간다고 생각하면 된다.
그러면 1번째 row에서는 N01컬럼이 NULL이니깐 N02컬럼으로 가서 ‘2’를 갖고온다.
2번째 row는 N01이 바로 값이 있으니 ‘10’을 가져오고 3번째 row는 N01 =NULL, N02=NULL 이라서 N03값을 가지고 온다.
5. 연산자 우선순위
괄호() -> NOT연산자 -> 비교연산자 -> AND -> OR
(*참고
-비교연산자 : = , >, <, <=, >=
-SQL 연산자 : BETWEEN A AND B, IN(LIST), LIKE ‘비교문자열’, IS NULL
-논리 연산자 : AND, OR, NOT )
6. 숫자형 함수 (문제 내기 좋음)
ABS(숫자) : 절대값을 산출
SIGN(숫자) : 거의 안나옴
MOD(숫자1, 숫자2) : % (나머지)와 같다.
CEIL/CEILING(숫자) [천장] : 최대 정수! <-> FLOOR(숫자) [바닥] : 최소 정수!
ROUND(숫자, m) : 소수점 m자리 반올림 <-> TRUNC(숫자, m) : 소수점 m자리 절삭
*반올림 이라는 것에 주의!
다음 숫자형 함수 사용시 결과값이 올바르지 않은 것은? <양식> 함수 사용 - 함수 결과 1)CEIL(-38.123) - -38 2) FLOOR(-38.123) - -38 // 해설: -는 낮을수록 낮은 정수이기 때문에 –39가 되어야함. 3) MOD(8,3) - 2 4) SIGN(0) - 0 5) ROUND(38.5235) – 39 해설 : 소수점 M을 지정하지 않으면 첫째자리에서 반올림 |
숫자형 함수 적용과 그 결과값이 아닌 것은 ? 1. ABS(-20) = 20 2. SIGN(-50) = -1 3. MOD(7,3) = 2 // 해설 : 7을 3으로 나누면 나머지는 1이 된다. 4. CEIL(38,123) = 39 5. FLOOR(38,123) = 38 |
7. 그룹함수 (GROUP BY 바로 뒤에 이어서 쓴다.)
ROLLUP() / CUBE() / GROUPING SETS()
-> 기출에 보면 결과 모양 있는데, 모양만 비교해서 외워두면 꿀!
8. 집계함수
COUNT() - 숫자세기 / SUM() - 합계산출 / AVG() - 평균 산출
*NULL 값이 포함되어있는 한 컬럼의 SUM()의 경우 NULL값을 0으로 치환 후 계산
-COUNT(*) : NULL 포함한 행의 수
-COUNT(컬럼) : NULL 값을 제외한 행의 수
BUT, 조건절에 해당하는 데이터가 없을 때 COUNT(*)의 결과 값은 0
기출문제
COL1 | COL2 | COL3 | COL4 NULL | NULL | 50 | 30 30 | 20 | 10 | 30 NULL | 10 | NULL | NULL SUM(COL!) + SUM(COL2 + COL3) + SUM(COL4)의 값은? 1) 120 2) 180 3)NULL 4) 90 답은 120 해설: SUM(COL1) -> NULL 값 0으로 치환, 다 더하면 0 + 30 + 0 => 30 SUM(COL4) 도 동일 => 30 + 30 + 0 => 60 SUM(COL2 + COL3) NULL + 50 => NULL 20 + 10 => 30 10 + NULL => NULL 결론 : 30 다 더하면 30 + 30 + 60 = 120 |
9. 문자형 함수
-LOWER() : () 의 모든 문자를 소문자로 바꾼다.
-UPPER() : 모든 문자를 대문자로 바꾼다. (*잘나옴)
-SUBSTR() / SUBSTRING
-LENGTH / LEN : 두개가 조금 다름
-TRIM / RTRIM / TRIM : 공백을 지운다. R은 오른쪽, L은 왼쪽, 없는건 양쪽다.
-CONCAT() : 문자열 + 문자열 합치기
10. CHAR VS VARCHAR
CHAR | VARCHAR
비교 시 공백을 채워서 비교 | 공백은 비교안함, 공백도 하나의 문자로 취급
‘AA’ == ‘AA ’ | ‘AA’ <> ‘AA ’
11. 조인 함수
*그림으로 외우면 좋다.
-INNER JOIN : 기본형/ 그냥 JOIN 이라고 써있으면 INNER JOIN 이다. - 교집합
-LEFT OUTER JOIN : 왼쪽기준 동그라미 전체
-RIGHT OUTER JOIN : 오른쪽 기준 동그라미 전체
-FULL OUTER JOIN : 그냥 전체 다
-NATURAL JOIN : 자동으로 알아서 조인하는 테이블의 같은 이름을 가진 컬럼을 찾아서 조인한다. / 알아서 컬럼 조인하기 때문에 ON, USING, WHERE절에서 같은 컬럼 정의하는거 못함 / ALIAS나 테이블명과 같은 접두사 사용 불가 / 조인되는 컬럼들은 같은 데이터 유형이어야 함
*근데 이런 문제가 있으니깐 외우는건 그림만!
답: INTERSECT (교집합) |
-----------------------------------------------
-ON 절 : WHERE절의 = 과 같다. 같은 컬럼 조인시 사용
-USING 절 : ON이나 = 이랑 같은데, 같은 이름의 컬럼이면 USING(컬럼)으로 간단하게 사용
*조인시 <> non equal 조인일 경우 값이 달라진다.
조인에 따른 컬럼 수 구하는 문제가 출제된다.
12. 컴퓨터가 처리하는 조인방식 – SQL SET OPERATION
-NL조인
-SMJ(SORT MERGE JOIN) : 조인하기전 정렬! / 넓은 데이터 처리에 유용! / 데이터 많으면 디스크사용해서 성능이 떨어질 수 있음 / 인덱스 유무에 영향X, 정렬(SORT) 필요
-HASH 조인 : 동등조인(=)에서만 사용! / 대용량 테이블 조인작업에 유리(DW, OLAP성쿼리) / 인덱스 사용하지 않음, 대신 HASH함수 사용 / 한쪽 테이블의 크기가 작을수록 좋음 / NL조인의 랜덤, S M J의 정렬작업에 대한 부담으로 등장
-NESTED LOOP JOIN :프로그래밍에서 사용되는 중첩된 반복문과 유사한 방식으로 조인을 수행하는 방식
카테시안 조인
SQL Set Operation 에서 중복 제거를 위해 정렬 작업을 하지 않는 집합 연산자는? 1) UNION 2) UNION ALL 3) INTERSECT 4) MINUS |
*UNION 은 중복제거 / UNION ALL 은 중복제거 없이 다 보여준다.
SQL Set Operation 에서 중복 제거를 위해 정렬 작업을 하지 않는 집합 연산자는? [보기] 대용량 데이터를 정렬하여 조인한다 동등 조인, 비동등 조인에서 모두 사용 가능하다 각 테이블을 정렬한 후 조인한다. 1) Sort Merge Join 2) Hash Join 3) Nested Loop Join 4) Cartesian Join |
13. 서브쿼리 (중요!)
-SELECT 절에서 사용 : SCARLAR SUBQUERY (스칼라서브쿼리)/ = NESTED SUBQUERY랑 같은 개념
(SELECT 절에 나오는 서브쿼리는 단일행 이어야함. )
-FROM 절에서 사용 : INLINE VIEW
(단일행으로 사용해야할 때 : 비교연산자 =, <, <=, >=, <> 와 함께 사용 시
다중행으로 사용해야할 때 : 다중행 비교연산자 IN, ALL, ANY, SOME 과 함께 사용시)
-WHERE 절에서 사용 : 올바른 사용처,
서브쿼리는 레벨과 상관없이 항상 메인쿼리 레벨로 결과 집합생성
EX) 메인쿼리 조직(1) / 서브쿼리 사원(M) 테이블이 있다. => 결과 집합은 조직(1)레벨이된다.
메인쿼리는 서브쿼리 컬럼 사용불가 // 서브쿼리는 메인쿼리 컬럼 사용함
서브쿼리에서는 ORDER BY절을 사용하지 못한다.
다음 중 SELECT절에 사용하는 서브쿼리인 스칼라 서브쿼리(Scalar Subquery)에 대한 설명으로 가장 적절한 것을 2개 고르시오. 1) 내부적으로 Unique 작업을 실행한다. 2) 하나의 로우에 해당하는 결과 건수는 1건 이하여야 한다. 3) Min 또는 Max 함수를 사용해야 한다. 4) 결과 칼럼의 개수는 1개여야 한다. |
14. 계층형 쿼리 문제
계층형 쿼리에서 최대 계층의 수를 구할 땐? => MAX(LEVEL)
* 잘나오는 모양
SELECT EML.직원 , EMP.직급
FROM EMP
START WITH EMP.직원 IS NULL
CONNECT BY PRIOR EMP.직원 = EMP.직속상사
*사이사이 구멍 뚫어서 뭍는 문제가 나오니 외우는 것이 좋음.
*PRIOR옆에는 항상 자식이 온다.
계층형 질의 구문에 대한 설명이다. 빈칸 안에 알맞은 개념을 작성하시오. ( ) 은 계층 구조 전개의 시작 위치를 지정하는 구문이다. 즉, 루트 데이터를 저장한다. ( ) 은 다음에 전개될 자식 데이터를 지정하는 구문이다. ( ) 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타남을 막기 위해 이 옵션을 추가한다. 답: start with connect by no_cycle |
*루트 데이터는 LEVEL 1이다. (0이 아님)
-LEVEL
-CONNECT_BY_ISLEAF : 해당 데이터가 리프면1, 그렇지 않으면 0
-CONNECT_BY_ISCYCLE : 해당 데이터가 조상으로서 존재하면 1, 그렇지 않으면 0
-SYS_CONNECT_BY_PATH(칼럼,분리자) : 루트- 현재 전개할 데이터까지 경로 표시
-CONNECT_BY_ROOT(칼럼) : 현재 테이터의 루트 데이터 표시
15. WINDOW 함수
- RANK() over : 동일 동수를 허용 EX) 1등, 2등, 2등, 4등 ..
DENSC_RANK() over : 동일 동수를 비허용(동일 순위시 하나의 건수로 취급)
EX) 1등, 2등, 3등, 4등 ..
ROW_NUMBER() over : 동일한 순위는 없다.
*오라클의 ROWNUM이랑 헷갈리지 말것! : ROWNUM은 WHERE절에서 행의 개수를 제한하는 목적으로 사용한다.
PERCENT_RANK() over :파티션별 윈도우에서 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 하여 값이 아닌 행의 순서별 백분율을 구하는 Window Funciton
특정 그룹에서 특정 컬럼으로 정렬된 결과에서 첫번째 값을 구하는 Window Function 을 고르시오. 1) LAST_VALUE () OVER 2) FIRST_VALUE () OVER 3) MAX() OVER 4) 없다 |
16. 파티션! 잘나오는 단답형 문제
-FIRST_VALUE(칼럼) over (partition.. : 파티션의 가장 첫번째 값 가지고오기
-LAST_VALUE(칼럼) over (partition.. : 파티션의 가장 마지막 값 가지고 오기
-LAG(인자1,2,3) over (order by.. :
-LEAD(인자1,2,3) over (order by.. :
-반복 누적문제 시 :
SUM(매출액) OVER (PARTITION BY 매출월 ORDER BY 매출월
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
5번의 테이블 구조에서 아래와 같은 누적 SUM 을 구하기 위한 SQL 을 완성하시오.(COL3 기준으로 정렬된 누적평균임) <실행 결과> <수행 SQL> SELECT COL1, COL2, ROUND ( AVG (COL3) OVER( ) , 0) AS 누적평균 FROM TAB1 ORDER BY COL1, COL3; 답: SUM(매출액) OVER (PARTITION BY 매출월 ORDER BY 매출월 RANGE BETWEEN UNOBOUNDED PRECEDING AND CURRENT ROW) |
범위 지정 시 : ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
EX) ROWS BETWEEN 50 PRECEDING AND 150 FOLLOWING
17. ROLE – 유저를 생성하고 권한을 제어하일을 대신해주는 중간 역할 하는 애
18. 옵티마이저 종류
-성능기반 옵티마이저
-비용기반 옵티마이저
-스스로 ~~ 하는 옵티마이저 (거의 안나오는듯..)
19. INDEX
ORACLE에서 사용하는 INDEX 기법의 종류
-INDEX UNIQUE SCAN
-INDEX RANGE SCAN
-INDEX RANGE SCAN DESENDING
-INDEX FULL SCAN
-FAST FULL INDEX SCAN
-INDEX SKIP SCAN
기타 주관식 기출문제
데이터 입력 시 컬럼의 값이 지정되지 않을 때 자동 입력될 기본값은?
답: DEFAULT
데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로
종류로는 PK, FK, UNIQUE KEY 등이 있다.
답: 제약조건
CTAS 기법으로 생성한 테이블은 기존 테이블의 제약조건 중에 ** 만 새로운 복제 테이블에 적용된다.
답: NOT NULL
*CTAS : CREATE TABLE AS SELECT
DROP 명령어로 테이블의 구조삭제시 ** 옵션은 해당 테이블과 관계가 있었던
참조되는 제약 조건에 대해서도 삭제한다는 것을 의미한다.
답: CASCADE CONSTRAINT
SQL문장에서 집계함수의 조회조건을 제한하기 위해 사용되는 절은?
답: HAVING 절