[SQL] 집합 연산자, 서브쿼리, 다중행함수
오늘은 집합 연산자, 서브쿼리, 다중행 함수를 공부하였다.
강의와 자료를 읽으면서 궁금했던 부분을 정리하고자 한다.
Q. 집합 연산자는 모두 NULL을 포함하는가?
합집합인 UNION은 중복 행을 제거하고 두 개의 결과 집합을 합칠 때 NULL 값을 포함한다.
그렇다면 다른 집합 연산자인 UNION ALL과 INTERSECT, MINUS 또한 NULL을 포함하는지 궁금했다.
UNION ALL은 중복된 값을 제거하지 안혹 두 결과 집합을 그대로 합치기 때문에 NULL 값을 특별히 처리하지 않고 그대로 유지하지만, INTERSECT, MINUS는 NULL 값을 처리하지않고 무시하기 때문에 결과에 나타나지 않을 수 있다.
Q. 차집합인 MINUS와 EXCEPT는 무슨 차이가 있을까?
강의 자료에 차집합(MINUS/EXCEPT)이라고 나와서 둘의 차이가 있는지 궁금했다. MINUS는 ORACLE 데이터베이스에서 사용되고 EXCEPT는 SQL SERVER에서 사용한다는 점에서 사용되는 프로그램이 다르다는 것을 알 수 있었다.
Q. ROLLUP과 CUBE
ROLLUP
-데이터를 계층적으로 집계할 때 사용
-GROUP BY 구문에서 사용되며 여러 열 기준으로 계층적인 집계 생성
-다양한 수준의 부분합이 생성
CUBE
-다차원으로 집계 사용
-GROUP BY 구문에서 사용되며 지정된 열들에 대한 모든 가능한 조합에 대한 집계 생성
-열들 간의 모든 가능한 조합에 대한 집계를 생성하므로 ROLLUP보다 더 상세한 정보 제공
ROLLUP은 데이터를 계층적으로 총계를 내리는 데 사용되고, CUBE는 모든 가능한 조합에 대한 총계를 내리는 데 사용된다는 점에서 차이가 있다.
Q. NEST?
1. STRUCT 타입을 가진 여러 열을 배열로 결합하는 데 사용
-STRUCT? 여러 필드를 하나의 레코드로 묶는 데 사용
2. 중첩된 요소 나타내는 데 사용
Q. First_value는 min과 같은 결과를 내는데, Last_value도 max와 같은 결과를 낼까?
먼저 first_value와 min은 같은 결과를 내지만, fist_value는 윈도우 함수로 over절을 사용해야 하고, 윈도우 내에 정의된 순서에 따라 첫 번째 값의 복제본을 반환하는 것이다. min은 주어진 열의 최소값을 반환하는 것이다.
Last_value와 max 또한 위와 같이 같은 결과를 내지만 차이가 있다.
Last_value는 윈도우 내에서 정의도니 순서에 따라 마지막 값의 복제본을 반환하지만 max는 주어진 열의 최대값을 반환한다는 점에서 차이가 있다.