본문 바로가기
Database/SQLD

SQLD 문제 풀이 13

by KkingKkang 2023. 6. 3.

1. 아래와 같은 데이터 모델에 대한 설명으로 가장 적절한 것은? (단, 시스템적으로 회원기본정보와 회원상세정보는 1:1, 양쪽 필수 관계임을 보장한다.)

1) 회원ID 컬럼을 대상으로 (회원기본정보 EXCEPT 회원상세정보) 연산을 수행하면 회원상세정보가 등록되지 않은 회원ID가 추출된다.
→ 회원 상세정보에서 회원 ID가 참조값으로 들어가므로 무조건 있어야 한다.

2) 회원ID 컬럼을 대상으로 (회원기본정보 UNION ALL 회원상세정보) 연산을 수행한 결과의 건수는 회원기본정보의 전체건수와 동일하다.  2배가 됨

3) 회원ID 컬럼을 대상으로 (회원기본정보 INTERSECT 회원상세정보) 연산을 수행한 결과 건수와 두 테이블을 회원ID로 JOIN연산을 수행한 결과의 건수는 동일하다.

4) 회원ID 컬럼을 대상으로  (회원기본정보 INTERSECT 회원상세정보)연산을 수행한 결과와 (회원기본정보 UNION 회원상세정보) 연산을 수행한 결과는 다르다. 같다

 

2. 다음 중 아래 TAB1, TAB2 테이블에 대해 SQL을 수행한 결과인 것은?

TBL1

COL1 COL2
AA A1
AB A2

TBL2

COL1 COL2
AA A1
AB A2
AC A3
AD A4
SELECT COL1, COL2, COUNT(*) AS CNT
FROM (SELECT COL1, COL2
	FROM TBL1
    UNION ALL
   SELECT COL1, COL2
   FROM TBL2 --1
   UNION
   SELECT COL1, COL2
   FROM TBL1) --2
GROUP BY COL1, COL2;

1

COL1 COL2
AA A1
AA A1
AB A2
AB A2
AC A3
AD A4

2

COL1 COL2
AA A1
AB A2
AC A3
AD A4

COL1 COL2 CNT
AA A1 1
AB A2 1
AC A3 1
AD A4 1

 

3. 아래와 같은 데이터 상황에서 아래의 SQL을 수행할 경우 정렬 순서상 2번째 표시될 값을 구하시오.

TAB1

C1 C2 C3
1   A
2 1 B
3 1 C
4 2 D
SELECT C3
FROM TAB1
START WITH C2 IS NULL
CONNECT BY PRIOR C1=C2
ORDER SIBLINGS BY C3 DESC
 order siblings by 각 계층별로 정렬을 한다. 그냥 정렬하면 계층구조가 흐트러지기 때문에 계층구조는 그대로 유지하면서 동일 부모를 가진 자식들끼리의 정렬 기준을 주는 것이다.

START WITH 부모

PRIOR 자식 = 부모 (순방향) 

C1 C2 C3 level
1   A 1
3 1 C 2
2 1 B 2
4 2 D 3

정답 : C

 

4. 다음 중 Oracle 계층형 질의에 대한 설명으로 가장 부적절한 것은?

1) START WITH 절은 계층 구조의 시작점을 지정하는 구문이다.

2) ORDER SIBLINGS BY 절은 형제 노드 사이에서 정렬을 지정하는 구문이다.

3) 순방향전개란 부모 노드로부터 자식 노드 방향으로 전개하는 것을 말한다

4) 루트 노드의 LEVEL 값은 0이다. ▶︎ 1

 

5. 다음 중 아래와 같은 사원 테이블에 대해 SQL을 수행하였을 때의 결과로 가장 적절한 것은?

  사원번호 사원명 입사일자 매니저사원번호 level
1 001 홍길동 2012-01-01 null 1
2 002 강감찬 2012-01-01 001 2
3 003 이순신 2013-01-01 001 2
4 004 이민정 2013-01-01 001 2
5 005 이병헌 2013-01-01 null 1
6 006 안성기 2014-01-01 005 2
7 007 이수근 2014-01-01 005 2
8 008 김병만 2014-01-01 005 2

 

SELECT 사원번호, 사원명, 입사일자, 매니저사원번호
FROM 사원
START WITH 매니저사원번호 IS NULL
CONNECT BY PRIOR 사원번호 = 매니저사원번호
AND 입사일자 BETWEEN '2013-01-01' AND '2013-12-31'
ORDER SIBLINGS BY 사원번호;
사원번호 사원명 입사일자 매니저사원번호
001 홍길동 2012-01-01 null
003 이순신 2013-01-01 001
004 이민정 2013-01-01 001
005 이병헌 2013-01-01 null

 

6. 다음 중 계층형 질의문에 대한 설명으로 가장 부적절한 것은?

1) SQL Server에서의 계층형 질의문은 CTE(Common Table Expression)을 재귀 호출함으로써 계층 구조를 전개한다.

CTE는 sql에서 쿼리를 단순화하는 데 도움이 되는 강력한 구조입니다. CTE는 가상 테이블(레코드 및 열 포함)로 작동하며, 쿼리 실행 중에 생성되고 쿼리에 의해 사용되며 쿼리 실행 후 제거됩니다. 
WITH DEPT_CTE_WITH AS (
	--앵커멤버
    SELECT 부서번호, 상위부서번호, 부서이름, 1 as level from DEPT_CTE d WHERE 상위부서번호 is null
    union all
    --재귀멤버
    select d.부서번호, d.상위부서번호, d.부서이름, c.level+1 from DEPT_CTE d join DEPT_CTE_WITH c on c.부서번호 = d.상위부서번호
   )
   select * from DEPT_CTE_WITH

2) SQL Server에서의 계층형 질의문은 앵커 멤버를 실행하여 기본 결과 집합을 만들고 이후 재귀 멤버를 지속적으로 실행한다.

3) 오라클 계층형 질의문에서 WHERE절은 모든 전개를 진행한 이후 필터 조건으로서 조건을 만족하는 데이터만을 추출하는데 활용된다.

4) 오라클의 계층형 질의문에서 PRIOR 키워드는 CONNECT BY 절에만 사용할 수 있으므로 'PRIOR 자식 = 부모'형태로 사용하면 순방향 전개로 수행된다. ▶︎ select, where절에도 사용 가능

 

7. 아래[부서]와 [매출]테이블에 대해서 SQL 문장을 실행하여 아래[결과]와 같이 데이터가 추출되었다. 다음 중 동일한 결과를 추출하는 SQL문장은?

start with 부서코드 = 120

select a.부서코드,
	a.부서명,
    a.상위부서코드.
    b.매출액
    lvl
from (
	select 부서코드, 부서명, 상위부서코드, level as lvl
    from 부서
    connect by prior 상위부서코드 = 부서코드
    union
    select 부서코드, 부서명, 상위부서코드, level as lvl
    from 부서
    start with 부서코드 = '120'
    connect by prior 부서코드 = 상위부서코드
)a
left outer join 매출 b on (a.부서코드 = b.부서코드)
order by a.부서코드

 

반응형

'Database > SQLD' 카테고리의 다른 글

윈도우함수와 문제풀이  (0) 2023.06.05
SQLD 문제풀이 14 - 집계함수  (0) 2023.06.04
계층형 쿼리  (0) 2023.06.01
SQLD 문제 풀이 12  (0) 2023.06.01
SQLD 문제 풀이 11  (1) 2023.05.30

댓글