자격증들/23) SQLD, SQLP

SQLD 2-2 - SQLD 활용 문제

tonyhan18 2023. 6. 8. 06:41
728x90

1. 개념 이해

답 4번

UNION - UNION

INTERSECTION - INTERSECTION

DIFFERENCE - MINUS(EXCEPT)

PRODUCT - CROSS JOIN

 

 

답은 3번 INTERSECT 이다.

 

1번의 "반복적인 상위와 하위 관계의 데이터 = 계층형 데이터"

2번이 틀렸다. 부모 -> 자식이 옳다.

3번 맞다

4번 CTE(Common Table Expression)는 with ~ union all 쓰는 문법인데 재기 호출 방법이 맞다.

 

1. 맞다

2. 단일 행 서브 쿼리는 결과가 1건 이하가 나오는 것을 말하고 그 반대는 다중 행 서브쿼리이다.

3. 서브쿼리가 메인 쿼리를 포함하고 있으면 연관 서브쿼리라고 부른다. <-> 비연관 서브쿼리

4. 스칼라 서브 쿼리 == select 절에 쓴 서브 쿼리, 인라인 뷰 == from 절에 쓴 서브 쿼리, 중첩 서브쿼리 == where 절에 쓴 서브 쿼리. 데이터를 거르는 것은 중첩이지 select 절에 쓴 것으로 바뀔 수 없다.

답 4번

 

1. 뷰는 사용자 쿼리에서 사용하는 거이니 틀리다.

2. 맞다. 뷰는 테이블에서 데이터를 뽑아와 만든 것이다.

3. 재작성 안되고 임시성으로 제작된다.

뷰의 장점 : 독립성, 편리성, 보안성

4. 오히려 실재 데이터가 안 보이니 보안상이 높아진다.

 

답 2

 

답 1번

OUTER JOIN == INNER JOIN + 기준 테이블의 실패한 얘들

LEFT OUTER JOIN

: T1의 B,C와 관련된 행 들이 붙는다. T1에 실패한거 1개

RIGHT OUTER JOIN

: T2의 B,C와 관련된 행 들이 붙는다.  T2에서 실패한거 3개

FULL OUTER JOIN

 

(+)는 OUTER JOIN인데 (+)가 쓰여진 곳 반대편이 기준 집합이다.

 

* 주의점 여기에서 단 하나라도 (+) 가 빠지면 전체가 INNER JOIN이다.(물론 확률은 매우 낮다)

 

답 3번

 

UNION ALL은 합집합으로 중복 허용이다.(UNION은 합집합이지만 중복 불가이다)

MINUS(=EXCEPT) 같은 것은 모두 빼준다.

답은 2번

 

계층형 쿼리는 나중에 풀자.

레벨 3까지만 있다. 답은 2

 

이렇게 서브 쿼리라는 것을 괄호를 통해 알고 문제를 풀어주자.

A가 서브 쿼리에 들어와 있었다면 연관 서브 쿼리인데 이건 비연관 서브 쿼리이다.

이 둘은 풀이법이 다르다.

 

서브 쿼리에 나오는 것이 5000, 25000이 나온다. 그래서 에러가 난다.

답 4번

 

 

연관 서브쿼리는 푸는게 조금 다르다.

값을 한 행식 대입해주어야 한다.

 

EXISTS는 서브 쿼리에 결과가 하나라도 나오면 참이고 아니면 거짓이다.

2-A와 3-B가 걸러지기 때문에 2개이다.

 

답 2번

 

GROUP BY 에 ROLLUP이 사용된다면 각각에 대해서 GROUP BY를 해주어야 한다.

전체 -> (오->왼)으로 지워가면 group by

 

고객번호, 상품번호로 먼저 group by 해주고

고객번호 group by해주고

전체를 group by해준다.

 

따라서 답은 3번이다.

 

CUBE는 나올 수 있는 모든 경우를 구하기 때문에

답은 2번

 

답 1번이다.

ORDER BY가 없으니 누적식이 아닌 총 합으로 구해야한다.

20210801 날짜인 행만을 가지고 윈도우를 만들어주면 된다.

 

답 3번이다.

 

지역코드로 묶이고 매장번호 순으로 정렬해서 누적합을 구해주면된다.

 

 

앞 뒤로 행의 수를 계산하면 되니 2 3 3 답 4

 

답 3번

 

이런 문제는 나중에 풀어야 한다. 어렵고 길기 때문
여기에서 포인트는 기준집합이 아닌쪽의 일반조건도 ON 절에 들어가야한다.

 

1번 같이 밖으로 나와있으면 데이터가 또 걸러져서 Inner Join 한 것처럼 결과가 나온다.

 

이 문제는 3,4번이 각각 다른 DBMS 문법이기 때문에 동시에 나올 수 없다는 점에 주목해야한다.

답은 1번이다.

 

답 2번

 

PRIOR은 방금 구한 절에서 나온 값을 이야기하기 때문에 7876의 MGR인 7788을 따라가면 된다.

 

답은 1번이다.

LEFT OUTER JOIN을 해주고

ON으로 그 기준을 잡아준것이 답이 된다.

 

답은 3번 INTERSECT(교집합)이다.

 

답은 2번이다.

 

GROUPING SETS는 두 개가 써있지만 각각 나누어서 2번 한다.

상품번호로 한 번 묶은 결과 내놓고 판매월로 묶은 결과 내놓는 역활을 한다.

 

지금은 상품번호로 다시 묶였기에 ROLLUP이 맞다

답 1번

 

답 4번

 

이런식으로 그룹함수와 일반칼럼을 함께 써줄 수 도 있다.

 

답 3번

DEPTNO, A.JOB

DEPTNO

이 두 개가 나올 수 있는 것을 골라야 하기 때문

 

RANK로 하면 무조건 1,2,3 순서대로 올라간다. 중복은 해주지만 내부적으로 카운팅이 따로 있다.

DENSE_RANK는 중복 허용으로 올라간다.

ROW_NUMBER은 1부터 중복없이 올려버린다. 

ROWNUM은 분석함수가 아니기에 아예 아님

OVER이 나왔다는 것 은 

답 2번

 

 

728x90