SQLD 공부(2)

청포도봉봉이·2022년 3월 6일
2

SQLD

목록 보기
1/2
post-thumbnail

SQLD 34회 기출 해설

도메인의 특징

  • 데이터 타입, 크기 지정
  • 제약조건 지정
    - PK (기본키)
    - UNIQUE KIE(고유키)
    - FOREIGN KEY(외래키)
    - CHECK 조건 (입력값 범위제한, NULL 무시)
    - NOT NULL 지정

정답 : 4번

주식별자 / 보조식별자 : 대표성 유무
내부 식별자 : 스스로 생성
외부 식별자 : 받아옴
단일 식별자 : 속성 1개
복합 식별자 : 속성 N개
본질 식별자 : 업무에 의해 생성
인조 식별자 : 인위적으로

정답 : 3번

주식별자 특징 : 유최불존

  • 유일성 : 유일하게 인스턴스 구분 가능
  • 최소성 : 주식별자 속성수 = 최소
  • 불변성 주식별자 값은 변경 x
  • 반드시 값이 들어와야함 (NOT NULL)

정답 : 4번

엔터티 : 업무상 관리하려는 대상
정답 : 2번

반정규화 종류 : 테속관 (테이블 + 속성 + 관계)
테이블

  • 병합 : 1:1 / 1: M / 슈퍼 - 서브타입
  • 분할 : 수직분할 (col 단위) / 수평분할 (row 단위)
  • 추가 : 이부분 통중
  • 이력 : 마스터테이블 레코드를 -> 이력테이블에 중복 시킴
  • 부분 : 자주 이용하는거 모음
  • 통계 : sum, avg 미리 수행
  • 중복 : 서버 다르거나, 다른 업무면 -> 원격조인 제거

속성 : 파오이 P중

  • 파생 : 미리 값 계산 -> 칼럼에 보관
  • 오류 : 사용자 실수 -> 복구 (임시적 데이터 중복 보관)
  • 이력 : 대량 처리 -> 기능성 칼럼 ( 최근값, 시간-종료일자)
  • PK 의한 컬럼추가 : PK에 존재한 -> 일반속성으로 추가
  • 중복 : 조인 처리할때 중복컬럼 위치

관계 : 중복관계

정답 4번 - FK 추가가 아닌 PK추가임

정답 4번

해쉬마크 + 까마귀발 + 점선 : 1개는 여러제품(N)을 가질 수 있다.

정답 : 3번

속성의 특징

  • 엔터티는 2개 이상의 속성으로 구성
  • 엔터티 설명하고, 인스턴스 구성요소이다.
  • 하나의 속성은 하나의 값을 갖는다
  • 속성의 특성에 따른 분류 : 기설파
    - 기본 속성 : 모든 일반적 속성
    - 설계 속성 : 새로 만듦 (일련번호)
    - 파생 속성 : 영향을 받아 발생함, 빠른 성능, 계산 (합)

정답 : 2번

정답 : 4번

SELECT 절에 없는 애를 ORDER BY 할 수 없음.

정답 1번

TRIGGER

  • 특정한 테이블에서 INSERT, UPDATE, DELETE 등의 DML문이 수행되었을때 DB에서 자동으로 동작하도록 작성된 프로그램, 사용자 호출이 아닌 DB자동 수행

  1. PATH를 보면 확인 가능 (-KING만 써있음)
  2. CONNECT_BY_LEAF는 최하위 값이면 1, 아니면 0 반환
  3. PRIOR 자식 = 부모 면 순방향
  4. LEVEL은 계층의 깊이, KING은 최상위 계층이다

정답 : 1번

WHERE 절에 별도의 조건절이 없을 경우 NESTED LOOP JOIN이 반드시 좋다고 할 수 없음

  1. HASH 조인(성능향상)이 NL JOIN, SORT MERGE JOIN의 대안이다
  2. 가장 많이 들여쓴 코드부터 실행 2 - 3- 1 - 0
  3. DEPARTMENT 테이블이 소량이라 먼저 실행하는게 유리
  4. 조인조건이 NON-EQUAL이면 MERGE JOIN (HASH JOIN X)

정답 : 3번

  1. SELECT SUM(COL1 + COL2 + COL3 + COL4) FROM TABLE;
    1. 1+1+1+1 = 4
    2. NULL + 1 + NULL + NULL = NULL
    3. 3 + NULL + 3+ 3 = NULL
    4. NULL + 4 + NULL + 4 = NULL
    5. 결과 : 4
같은 칼럼의 sum은 null을 더해도 결과 값이 null이 아니지만
다른 칼럼과의 sum은 null을 더하면 결과 값이 null

정답 2번

  1. sale1/2/3 중에 순서대로 비교해서 null 이 아닌 첫번째 값을 가져오고 모두 null이면 0을 리턴
    SELECT COALESCE(sale1,sale2,sale3,0)
  2. NULLIF(A, B) : A = B -> NULL 반환 A != B -> 1 반환

정답 3번

  1. START WITH부터 N2가 NULL인 곳 부터 선택,
    • CONNECT BY PRIOR N1 = N2 (PRIOR 자식 = 부모)(N1 이전값 = N2 다음값)
    • WHERE N1 = 4 이므로 3번째 ROW 선택
  2. C2 = 'B'인곳부터 시작
    • 부모 N1 자식 N2가 같아야함
    • AND C2 <> 'D' --> C2 != D
    • 3번째 ROW 선택
  3. 2번째 ROW 선택 PRIOR C2 = 'B' 의미는 자식 C2가 B일때니까 2번째 로우

정답 2번

  1. GROUP BY ROLLUP
    • ROLLUP은 총 합계도 나타내줌 따라서 2번이 정답
  1. CUBE() 일때의 결과값
    • ID, DEPT_NM 각각 총합, 전체 총합 출력

정답 1번

ROLLUP : 인수 순서중요 (계층적) / 계층 간 정렬 가능(계층 내 정렬 불가, ORDER BY 사용)
CUBE : 모든 값에 다차원집계 생성 / 시스템에 많은 부하
GROUPINGSETS : 인수 순서무관(평등)

정답 : NULL (0이 아님)

정답 3번

트랜잭션 특성

  • 원자성 : 트랜잭션에서 연산들이 모두 성공 OR 전혀 실행 X
  • 일관성 : 트랜잭션 실행 전 DB 내용이 잘못 되지 않으면 실행 후도 잘못 되지 않아야함
  • 고립성 : 트랜잭션 실행 도중 다른 트랜잭션의 영향을 받아 잘못된 결과로 만들어서는 안된다.
  • 지속성 : 트랜잭션이 성공적으로 수행되면 DB의 내용은 영구적으로 저장된다.

정답 1번
1. WHERE T1.COL1 = T2.COL1(+) --> LEFT OUTER JOIN

정답 2번

    1. RANK() 사용하기때문에 DEPT_NM = 10 에서 1등이 2명
    1. SALARY = 5000이 나옴
    1. SALARY = 5000이 나옴


정답 4번

RATIO_TO_REPORT : 전체 SUM값에 대한 행별 칼럼값, 0~1 사이값


정답 1번

UNION 은 합집합이니 중복허용을 안함

  1. A,B 고객 ID, 이용 일자 중복없이 모두 선택해서 CROSS JOIN
    • CROSS JOIN : 상호조인 한쪽 테이블의 모든 행들과 다른 테이블의 모든 행을 조인

정답 2번
( ) 안에 있는게 중복되는 이름 중 아이디가 제일 작은것만 남도록 하는 SQL
삭제 시키는데 제일 작은거 빼고 삭제시켜야 작은게 남음

정답 1번

  1. ROUND : 반올림
  2. CEIL : 올림 (오라클)
  3. CEILING : 올림 (SQL 서버)
  4. EXP : 익스포트

정답 1번
1. INSERT INTO 주문
-> 할때 INSERT하는 주문의 칼럼은 (4개) 근데 넣는 values에 대상은 3개밖에 없어서 에러

정답 1번

ORDER BY의 특징

  • ORDER BY 의 기본 정렬은 오름차순
  • SELECT 구문에 사용되지 않은 컬럼도 ORDER BY 구문에서 사용할 수 있다
  • ORDER BY 1, COL1 과 같이 숫자와 컬럼을 혼용하여 사용할 수 있다
  • ORACLE은 NULL을 가장 큰 값으로 취급하여 ORDER BY시 맨 뒤로 정렬되고
    SQL SERVER는 반대로 가장 앞으로 정렬한다.

정답 3번

집합 연산자 종류

  • 합집합 : UNION (느림)
  • 중복허용 합집합 : UNION ALL(빠름)
  • 차집합 :
    - MINUS (오라클)
    - EXCEPT(SQL 서버)
  • 교집합 : INTERSECT

정답

  1. Partition by와 Group by는 파티션 분할한다는 점에서 유사
  2. 집계 Window Function (sum, max, min) 쓸 때 Window절과 함께하면 레코드범위(집계대상) 지정가능
    1. Window Function은 순위, 합계, 평균, 행위치 조작 가능
    2. Window Function은 행, 행 간 관계 정의하는데 사용
    3. Window Function으로 결과 건수 줄지 않음
    4. group by, Window Function 병행 불가

정답 : 3

SELECT
COUNT(*)
FROM SQLD_34_48
WHERE SALARY > 200
OR MGR_ID IS NULL
AND CODE = 'B'

  1. WHERE 조건에서 NOT - AND - OR 순서로 연산한다
  2. 따라서 MGR_ID IS NULL AND CODE = 'B' 부터 실행한 후
  3. OR 조건에 따라 SALARY > 200 을 실행하므로
  4. 결국은 SALARY가 200이상인 애들만 뽑아낸다.

정답 : NTILE
NTILE -> 전체건수를 인수값으로 N 등분함

정답 : 2

LAG는 이전 N번째 행을 가져옴

PARTITION BY DEPARTMENT_ID
-> DEPARTMENT_ID로 그룹을 묶고, SALARY로 오름차순 정렬

profile
서버 백엔드 개발자

2개의 댓글

comment-user-thumbnail
2022년 3월 9일

봉봉님 힘내요😊

1개의 답글