1번
도메인의 특징
1. 엔터티 내에서 속성에 대한 데이터 타입과 크기를 지정
2. 엔터티 내에서 속성에 대한 NOT NULL 지정
3. 엔터티 내에서 속성에 대한 CHECK 조건 지정
[정답 4]
2번
[정답]
3번 : ① 주식별자 ② 보조식별자 ③ 본질식별자 ④ 복합식별자
[풀이]
부서 테이블의 부서번호 - 주식별자
▶ 부서번호는 각 어커런스를 구분할 수 있으며, 사원 테이블과 참조 관계 연결
사원 테이블의 주민등록번호 - 보조식별자
▶ 주민등록번호는 각 어커런스를 구분할 수 있으나, 다른 테이블에서 참조 관계 연결 못함 (대표성 없음)
사원 테이블의 사번 - 본질식별자
▶ 비즈니스 프로세스에서 만들어짐 (인위적으로 생성되지 않았음)
교육이력 테이블의 사번 & 수강일자 - 복합식별자
▶ 여러 개의 속성으로 구성되어 있음.
분류 | 식별자 | 설명 |
대표성 여부 |
주식별자 | 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자 |
보조식별자 | 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함 | |
스스로 생성여부 |
내부식별자 | 엔터티 내부에서 스스로 생성 |
외부식별자 | 다른 엔터티와의 관계로 인하여 다른 엔터티로부터 받아오는 식별자 | |
속성의 수 | 단일식별자 | 하나의 속성으로 구성 |
복합식별자 | 여러 개의 속성으로 구성 | |
대체 여부 |
본질식별자 | 비즈니스 프로세스에서 만들어짐 |
인조식별자 | 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자 |
6번
반정규화는 자주 사용하고, 찾기 위해 조인을 해야하는 데이터의 중복저장으로 조인 성능을 높인다.
4) 외래키 관계의 속성을 추가하는 것은 이에 걸맞지 않다.
19번
1)
START WITH N2 IS NULL : n2가 null인 것이 루트이다 (1, NULL, A, NULL)
CONNECT BY PRIOR N1 = N2 : 이전 N1과 현재 N2가 같은 모든 행을 가져온다. (모든 행)
WHERE N1 = 4 : 선택된 행 중 N1이 4인 것 (4, 2, D, B)
2)
START WITH C2=B : C2가 B인 것이 루트이다 (4, 2, D, B)
CONNECT BY PRIOR N1 = N2 AND C2 <> D : 이전 N1과 현재 N2가 같은 모든 행을 가져오면서 C2값이 D가 아니어야한다.
하지만 C2값이 D가 되면서 종료된다. (4, 2, D, B)
3)
START WITH C1=B : C1이 B인 것이 루트 (2, 1, B, A)
CONNECT BY PRIOR N1 = N2 AND PRIOR C2 = B : 이전 N1값과 현재 N2가 같은 모든 행을 가져오면서 이전 C2값이 B이어야 한다.
2로 연결되어 (4, 2, D, B)로 이동 가능했으나, 이전 행의 C2값을 확인했더니 A이어서 이동 불가!!!
가져올 수 있는 행은 (2, 1, B, A)
4)
START WITH N1=2 : N1이 2인 것이 루트
CONNECT BY PRIOR N1 = N2 AND PRIOR N1 = 2 : 이전 N1과 현재 N2가 같은 모든 행을 가져오면서 이전 N1값이 2이어야 한다.
2로 연결되어 (4, 2, D, B)로 이동 가능하면서, 이전 행의 N1값을 확인했더니 2이어서 이동 가능!
4로 연결되어 (5, 4, E, D)로 이동 가능했으나, 이전 행의 N1값을 확인했더니 4이어서 이동 불가!
가져올 수 있는 행은 (2, 1, B, A), (4, 2, D, B)
WHERE C1 <> B : 가져온 행 중 C1값이 B가 아닌 것 (4, 2, D, B)
1), 2), 4) : 4, 2, D, B
3): 2, 1, B, A
정답은 3
26번
(+) 는 OUTER JOIN을 의미하며, 기호가 안붙은 쪽이 기준.
따라서,
WHERE T1.COL1 = T2.COL1(+) AND T2.COL1 = T3.COL1(+) AND T3.COL1 = T4.COL1
▶
WHERE T1.COL1 LEFT OUTER JOIN T2.COL1 AND T2.COL1 LEFT OUTER JOIN T3.COL1 AND T3.COL1 INNER JOIN T4.COL1
27번
- - - - - - - - - - - - - -
PARTITION BY DEPT_ID / ORDER BY SALARY DESC > DEPT_ID 로 그룹묶고, SALARY 많은 순으로 정렬
WHERE RN = 1 > 각그룹(DEPT_ID)에 월급 많은 1등 출력
1) RANK : 중복값은 중복등수, 등수 건너뜀(1위, 1위, 3위, 4위)
ROW_NUMBER() : 중복값이 있어도 고유 등수 부여(1위, 2위, 3위, 4위)
▶ RANK를 사용하기 때문에, DEPT_ID = '10' 에 1등 1500 (2명)
※ ROW_NUMBER() : 중복값이 있어도 고유 등수 부여(1위, 2위, 3위, 4위)
2 - 정답) FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 순으로 진행되기 때문에,
표에서 DEPT_ID 끼리 묶고, MAX(SALARY) 월급 가장 많은 사람과 그 사람 DEPT_ID 선택!
3) ROWUNM = 1은 상위 1개 행 가져오는 함수 (ROW_NUMBER 와 다름)
4) 테이블 내 전체에서 가장 월급 높은 사람의 DEPT_ID와 SALARY 출력
31번
1-정답)
SELECT DISTINCT 고객ID, 이용일자
FROM SQLD_34_31_01 A CROSS JOIN SQLD_SQLD_34_31_02 B
▶ A, B 테이블의 고객ID와 이용일자 중복 없이 모두 선택해서 CROSS JOIN
2) A, B 테이블의 고객ID와 이용일자 모두 선택해서 FULL OUTER JOIN
3) A의 고객 ID, 이용일자 모두 선택 / UNION (합집합, 중복비허용) / B의 고객 ID, 이용일자 모두 선택
4) A 고객 ID, 이용일자 선택하되, B와 같은 고객 ID는 비허용 (UNION)
'NOT EXISTS' 는 데이터 존재 유무 확인 없으면 1, 있으면 0
36번
1) INSERT INTO 주문 VALUES (1, SYSDATE, 'TEST2')
▶ 컬럼은 4개인데, 값은 3개만 넣음.
<SCRIPT> 상의 INSERT 구문은 주문(C1, C2, C3) 으로 컬럼명 지정하였고, VALUES 데이터도 3개 임.
※ DELETE (FROM) 주문 : FROM 생략 가능
40번
① HR.EMPLOYEES A LEFT OUT JOIN HR.EMPLOYEES B :최상위 관리자가 나오려면 사원 테이블 LEFT OUT JOIN 관리자로 조인 되어야 함.
최상위 관리자의 MANAGER_ID 는 NULL 이거나 없음.
② A.MANAGER_ID = B.EMPLOYEE_ID: 사원 테이블의 MANAGR_ID는 관리자 테이블의 EMPLOYEE_ID와 같다.
▶ 따라서, 정답은 3번
47번
a.salary + b.sum_salary > 현재 노드에서 루트 노드까지 합계
WHERE EMP_ID = 105 > 현재 노드: 105
48번
- 연산순서: NOT - AND - OR (NAO 라고 외움)
- COUNT(*) 조건에 맞는 개수 출력
조건
① MGR_ID IS NULL AND CODE = 'B' > MGR_ID 가 NULL 이면서 CODE 가 'B'인 행 > 없음
② SALARY > 200 > 2번행, 4번행, 5번행 3개 선택
따라서, 정답은 3
전체 문제 풀어보기
출처: 데이터 포럼 네이버 카페
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] 정규표현식 (보강) (0) | 2024.03.08 |
---|---|
[SQLD] 자주 틀렸던 부분 (2) | 2024.03.08 |
[SQLD] 30회 기출문제 오답 노트 (0) | 2024.03.02 |
[SQLD] PIVOT / UNPIVOT (보강-2) (0) | 2024.03.01 |
[SQLD] PIVOT/UNPIVOT (보강-1) (0) | 2024.03.01 |