SQLD 2-2 - SQLD 활용 문제
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번