SQLD 공부

청포도봉봉이·2022년 3월 9일
3

SQLD

목록 보기
2/2
post-thumbnail

SQLD 30회 해설😊

1번 문제

정답 : 2번

  1. 제약조건

    • PK(기본키), Unique Key(고유키), Foreign Key(외래키), NOT NULL, Check(입력값 범위 제한, NULL 무시)
  2. 도메인

    • 데이터 타입, 크기, 제약사항을 지정함
  3. 정규화

    • 함수의 종속성을 이용해 무손실 분해함 ( 의미적 동등한 릴레이션으로 분해, 자연조인하면 복원(O)
    • 입력, 수정, 삭제 성능 향상 (반정규화는 조인 성능)
      - 이상현상 방지
    • SELECT : 정규화 이후 조인 때문에 느려짐
    • INSERT, UPDATE : 테이블이 작아져서 빨라짐
    • 정규화 방법
      - 1차 : 원자성
      - 2차 : 부분함수 종속제거 ( = 완전종속)
      - 3차 : 이행함수 종속제거
  4. 식별자

  • 주식별자 특징
    - 유일성 : 유일하게 인스턴스 구분 O
    - 최소성 : 주식별자 속성 수 = 유일성 만족 최소 수
    - 불변성 : 주식별자 값이 바뀌지 않는다
    - 존재성 : NOT NULL

2번 문제

정답 : 3번

  1. 반정규화 대상분석
  • 대량범위, 범위처리(빈도수), 통계처리
    - 디스크 I/O량이 많아 성능저하, 조인으로 성능저하 (경로가 멀어서)
    - 컬럼 계산해 읽을 때 성능 저하 (2)
  1. 반정규화를 할땐 무조건 데이터 무결성이 깨짐
  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 모든 행이 조인됨

  1. A에는 기본키 1개 C는 기본키가 3개이므로 조인조건이 맞지 않아 카테시안 조인 발생
  2. 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번

  1. COALESCE()
  • NULLL이 아닌 최초값 출력 : AB 출력
  1. CASE 'AB' WHEN 'BC' THEN 'CD' END FROM DUAL
  • AB = DB면 CD출력 -> 아니니까 NULL 출력
  1. DECODE('AB', 'CD', 'DE') FROM DUAL;
  • AB가 CD이면 DE를 출력 아니니까 NULL 출력
  1. 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개 추출

  1. HR.EMP 선택 위에서 10줄 선택 -> SALARY로 정렬 (정렬 전에 10줄 뽑음)
  2. WITH TIES
  • HR.EMP에서 SALRAY로 정렬
  • 상위 10개 뽑되, 같은 SALARY 받은 사람 같이 출력
  1. HR.EMP에서 FIRST_NAME, JOB_ID 선택하고, ROWNUM이 먼저 시행, 그 후 SALARY로 정렬
  2. HR에서 FIRST_NAME, JOB_ID 선택, SALARY로 정렬 -> 10줄 추출

27번 문제

정답 : 3번

28번 문제

정답 2번

  1. UNION : 중복 제거 합집합
  2. UNION ALL : 중복 안제거 합집합
  3. INTERSECT : 교집합
  4. MINUS : 차집합

29번 문제

정답 : 1번

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

  1. LAST_VALUE() OVER : 가장 마지막 값
  2. FIRST_VALUE() OVER : 제일 처음 값
  3. 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() : 동일한 값이면 중복 순위를 부여하고, 다음 순위는 중복 순위와 상관없이 순차적으로 반환한다.

profile
서버 백엔드 개발자

0개의 댓글