SQLD 30회 해설😊
1번 문제

정답 : 2번
-
제약조건
- PK(기본키), Unique Key(고유키), Foreign Key(외래키), NOT NULL, Check(입력값 범위 제한, NULL 무시)
-
도메인
-
정규화
- 함수의 종속성을 이용해 무손실 분해함 ( 의미적 동등한 릴레이션으로 분해, 자연조인하면 복원(O)
- 입력, 수정, 삭제 성능 향상 (반정규화는 조인 성능)
- 이상현상 방지
- SELECT : 정규화 이후 조인 때문에 느려짐
- INSERT, UPDATE : 테이블이 작아져서 빨라짐
- 정규화 방법
- 1차 : 원자성
- 2차 : 부분함수 종속제거 ( = 완전종속)
- 3차 : 이행함수 종속제거
-
식별자
- 주식별자 특징
- 유일성 : 유일하게 인스턴스 구분 O
- 최소성 : 주식별자 속성 수 = 유일성 만족 최소 수
- 불변성 : 주식별자 값이 바뀌지 않는다
- 존재성 : NOT NULL
2번 문제

정답 : 3번
- 반정규화 대상분석
- 대량범위, 범위처리(빈도수), 통계처리
- 디스크 I/O량이 많아 성능저하, 조인으로 성능저하 (경로가 멀어서)
- 컬럼 계산해 읽을 때 성능 저하 (2)
- 반정규화를 할땐 무조건 데이터 무결성이 깨짐
- 반정규화
- 테이블 반정규화
- 병합 : 1:1, 1:M, 슈퍼-서브타입
- 분할 : 수직분할(col단위), 수평분할(row단위)
- 추가
- 이력 : 마스터 테이블 레코드를 이력테이블에 중복
- 부분 : 자주 이용하는거 모으기
- 통계 : sum, avg 미리 수행
- 중복 : 서버 다르거나 다른 업무 -> 원격 조인 제거
- 속성
- 파생 : 미리 값 계산
- 오류 : 사용자 실수 대비 임시로 중복값 저장
- 이력 테이블 : 대량처리 를 위해 기능성 컬럼 추가 (최근값, 시작-종료일자)
- PK -> 컬럼추가 : PK에 데이터가 있지만 일반속성으로 포함
- 중복 : 조인처리할때 중복컬럼 위치 시킴
- 관계 : 중복 관계 추가
3번 문제

정답 : 3번
엔터티 : 관리 대상
유무형)
- 유형 : 물리적 형태 (사원)
- 개념 : 개념적 정보, 물리 X (조직)
- 사건 : 업무 수행 시 발생, 통계자료 (주문)
발생시점)
- 기본 : 원래 존재, 부모역할, 주식별자
- 중심 : 기본에서 발생, 행위엔터티 생성(계약)
- 행위 : 2개의 부모엔터티에서 발생, 자주 바뀜(주문 목록)
3번은 기본 엔터티임
1,2,4는 중심 엔터티
4번 문제

정답 : 3번
C에서 상품은 기본 엔터티이다.
5번 문제

정답 : 2번
물리적 스키마 설계를 하기 전 단계이므로 정답은 개념적 모델링
데이터 모델링 순서
개념적 모델링 -> 논리적 모델링 -> 물리적 모델링
(구체적)
6번 문제

정답 : 2번
카테시안 조인은 A,B를 서로 JOIN할때 JOIN 조건을 생략하고 A,B 모든 행이 조인됨
- A에는 기본키 1개 C는 기본키가 3개이므로 조인조건이 맞지 않아 카테시안 조인 발생
- N개 테이블 최소조인 조건은 N-1개 : 2개
7번 문제

정답 : 4번
반정규화 대상 분석!!
- 빈도수
- 대량범위
- 통계처리
- SORTING, ORDER BY는 대상이 아님
8번 문제

정답 : 1번
식별자 : 엔터티 내에서 인스턴스 구분함
- 대표성
- 주식별자 : 대표성, 참조관계 연결 O
- 보조 식별자 : 대표성 X, 참조관계 연결 X
- 스스로 생성
- 내부 식별자 : 스스로 생성
- 외부 식별자 : 타 엔터티에서 받아옴
- 속성 수
- 단일 식별자 : 하나의 속성
- 복합 식별자 : N개 속성
- 대체 여부
- 본질 식별자 : 업무에 의해 생성
- 인조 식별자 : 인위적으로 만듬
9번 문제

정답 : 2번
분산 데이터베이스 : 논리적으로 같은 시스템, 물리적 분산, 데이터 무결성 해침
분산 데이터베이스의 투명성
- 분할 - 분할되서 여러군데 저장
- 위치 - 저장장소 명시 불필요, 위치정보는 시스템 카탈로그에 유지
- 지역사상 : 지역DBMS와 물리적DB 사이 Mapping 보장
- 중복 - 여러 site 중복된지 몰라도 괜찮음
- 장애 - 장애 발생해도 무관
- 병행 - 다수 트랜잭션 동시에 해도 결과 일관성
10번 문제

정답 : 2
Row Chaining : row가 너무 길어서 여러 블록에 걸쳐서 저장
Row Migration : 수정 후 다른 블록 빈공간에 저장
- 디스크 I/O 많이 발생 -> 성능 저하
- 1:1 관계로 분리
- 해결책 : 파티셔닝
- 리스트 파티셔닝 - 기업 / 대량 데이터
- 레인지 파티셔닝 - 관리 쉽다 / 가장 많이 쓰임 / 숫자값으로 분리 O
- 해시 파티셔닝 - 관리가 어렵다 / 데이터 저장 위치를 모름
11번 문제

정답 : 1번
VARCHAR2 타입인데 > 0 으로 숫자로 비교 연산자를 사용
12번 문제

정답 : 1번
SELECT
A.COL1
,(SELECT COL3 FROM TABLE2 B WHERE A.COL1 = B.COL1) AS B_COL3
FROM TABLE1 A
WHERE A.COL2 > 10;
형광펜 친 부분에서 A.COL1 = B.COL1 인데
TABLE1 TABLE2
1 1
2 2
3 3
A A
A
TABLE1 의 A가 TABLE2의 A와 겹치는데 1대 2의 관계이므로 에러
13번 문제

정답 1번
JOB_ID에 대한 합과, 총합을 구하기 때문에
- ROLLUP(JOB_ID, MANAGER_ID)
- 인수 순서 바뀌면 값이 달라짐
CUBE였으면 JOB_ID MANAGER_ID합 , 총합을 다 구함
- 결합 가능한 모든 값에 대하여 다차원 집계 생성, 인수들 간 평등한 관계
- 순서가 바뀌어도 상관없음
GROUPING SET은 합 없음
- 인스들에 대한 개별 집계, 평등한 관계
- 인수의 순서가 바뀌어도 결과가 같다
14번 문제

정답 : 2번
WHERE (COL1, COL2) IN (('A', 50));
COL1 = 'A' AND COL2 = 50; 을 나타냄
15번 문제

정답 2번
IN ('A', 'X', NULL) 을 한다고 해서 NULL이 나오진 않는다.
16번 문제

정답 : 1번
TALBE ACEESS (FULL)로 전체를 파악하고
INDEX를 찾는다 그리고 INDEX로 ROWID를 찾아 TABLE ACESS를 하고
2번을 실행
7번 실행 : 그리고 INDEX를 찾아서
6번 실행 : ROWID로 TABLE ACCESS를 한다
1번 실행
0번 실행
17번 문제

정답 2번
나는 4번을 했는데
WHERE 1=2를 하면 애초에 성립하지 않기 때문에
NULL이 반환되어 NVL(NULL, 9999) 이므로
정답은 2번 - 9999 인듯 하다.
20번 문제


정답 3번
DELETE ON TRIGGER에서 OLD(삭제 전 데이터) / NEW (삭제 후 데이터)
UPDATE TRIGGER에서 OLD(수정 전) / NEW (수정 후)
트리거는 DB자체에 저장, 테이블, 뷰에 가능
3번에 DB작업에는 정의할 수 없다고 하는데 이게 틀린말이라 3번.
21번 문제

정답 1번
- COALESCE()
- CASE 'AB' WHEN 'BC' THEN 'CD' END FROM DUAL
- AB = DB면 CD출력 -> 아니니까 NULL 출력
- DECODE('AB', 'CD', 'DE') FROM DUAL;
- AB가 CD이면 DE를 출력 아니니까 NULL 출력
- NULLIF('AB', 'AB') FROM DUAL;
- 'AB'가 'AB'와 같다면 NULL 같지 않다면 AB출력
23,24번 문제

DDL : CREATE, DROP, MODIFY (오라클), ALTER (SQL 서버)
DML : SELECT, UPDATE, INSERT, DELETE
DCL : GRANT, REVOKE
TCL : COMMIT, ROLLBACK
26번 문제

정답 4번
ROWNUM : 그냥 상위 N개 추출
TOP : ORDER BY가 있다면 정렬 후 상위 N개 추출
- HR.EMP 선택 위에서 10줄 선택 -> SALARY로 정렬 (정렬 전에 10줄 뽑음)
- WITH TIES
- HR.EMP에서 SALRAY로 정렬
- 상위 10개 뽑되, 같은 SALARY 받은 사람 같이 출력
- HR.EMP에서 FIRST_NAME, JOB_ID 선택하고, ROWNUM이 먼저 시행, 그 후 SALARY로 정렬
- HR에서 FIRST_NAME, JOB_ID 선택, SALARY로 정렬 -> 10줄 추출
27번 문제

정답 : 3번
28번 문제

정답 2번
- UNION : 중복 제거 합집합
- UNION ALL : 중복 안제거 합집합
- INTERSECT : 교집합
- MINUS : 차집합
29번 문제

정답 : 1번
- Sort Merge Join
- 등가, 비등가 조인 가능
- 조인키 기준 정렬 각 테이블 정렬 후 조인
- Hash Join
- 등가조인만 가능
- 대량이 포인트
- 함수 처리함
- 선행 테이블 작다
- 별도 저장공간 필요
- 인덱스 없으면 유리
- Nested Loop Join
- 랜덤 엑세스
- 대용량 sort 작업 유리 (sort가 포인트)
- Cartesian Join
30번 문제

정답 1번
INNER JOIN을 2번써서 모든 회원의 총 주문 금액을 구하는 것인데
서로 겹치는 것만 구하기 때문에 정답 X
33번 문제

정답 : 4번
Unique Index Scan은 1개 값 추출하는 방식
PK는 KEY1, KEY2 인데
4)은 KEY1에만 조건을 줌 1개 이상이 나올 수 있다.
34번 문제

정답 4번
3번 FK는 같거나 NULL이면 에러가 안남
4번은 C002가 고객 테이블에 C002가 없는데 insert 하려고 하므로
정답은 4번
35번 문제

정답 1번
- Cross Join
- Where 절에 조건을 걸 수 있다
- Join Key가 없을 경우 발생
- Natural Join
- Where 절에서 조건을 걸 수 없다.
- 특정 Join 컬럼을 명시적으로 적을 수 없다. (OWNER명 불가) (ex.. EMP.DEPT)
- Join Key는 컬럼명으로 결정된다.
36번 문제

정답 : 2번
- RANGE
- 관리 쉽다
- 가장 많이 쓰임
- 숫자값으로 분리 O
- List
- 대량 데이터
- 특정 컬럼 없음
- PK
- Hash
- 관리가 어렵다
- 데이터 위치를 모른다
Interval이라는건 없다.
38번 문제

정답 2번
- LAST_VALUE() OVER : 가장 마지막 값
- FIRST_VALUE() OVER : 제일 처음 값
- MAX() OVER : 제일 큰 값
43번 문제

정답 : 3.8, 3, 3, 4
ABS : 절대값
FLOOR : 내림
TRUNC : 소수 점 버림
ROUND : 반올림
CEIL : 올림
44번 문제

정답 : VIEW
- view
- 사용자 정보 감추기 O, 실제데이터 X
- 독립성 ( 테이블 변하면 같이 변경 )
- 편리성 ( 복잡한 질의 단순하게 , 편리함)
- 보편성
45번 문제

START WITH 상위계층번호 IS NULL
-> 2건 선택
CONNECT BY 계층번호 = PRIOR 상위계층번호
-> PRIOR 자식 = 부모
-> PRIOR 상위계층 번호 = NULL인 계층번호가 없으니까 종료
-> 2건 출력
46번 문제

ALTER TABLE , MODIFY COLUMN -> ORACLE
ALTER TABLE, ALTER COLUMN -> SQL Server
47번 문제

정답 : 10
DEFAULT 10은 값을 안적은 경우 10으로 채움
49번 문제

정답 : 주문금액 DESC
RANK : 동일한 값이면 중복 순위를 부여하고, 다음 순위는 해당 개수만큼 건너뛰고 반환
DENSE_RANK() : 동일한 값이면 중복 순위를 부여하고, 다음 순위는 중복 순위와 상관없이 순차적으로 반환한다.