합집합(UNION) 연산은 두 테이블의 데이터를 하나로 합치는 집합 연산이다. 성립 조건은 두 관계의 속성 개수가 같고, 대응되는 속성의 도메인(데이터 타입)이 일치하는 것이다. 속성명이 달라도 데이터의 종류가 같으면 연산이 가능하다. 속성 개수가 다르거나 도메인이 어긋나면 연산할 수 없다.
HAVING 절은 GROUP BY로 그룹화된 결과를 필터링할 때 쓴다. WHERE 절이 그룹화 전의 개별 행을 거르는 것과 달리, HAVING은 그룹화 이후에 적용된다. SQL 실행 순서상 GROUP BY 다음에 HAVING이 온다는 점을 기억한다. LIKE는 문자 패턴 검색, ORDER BY는 정렬을 맡으므로 HAVING의 자리가 아니다.
뷰(View)는 하나 이상의 테이블에서 질의로 유도된 가상 테이블이다. 실제 데이터를 물리적으로 저장하지 않고 정의문만 존재하며, 기본 테이블의 질의 결과로 구성된다. 따라서 뷰 자체는 물리적 저장 공간을 차지하지 않는다.
뷰는 다른 뷰를 기반으로 정의할 수 있고, 보안과 접근 제어, 논리적 독립성을 제공한다. 기반 테이블이 제거되면 뷰도 무효화된다. 다만 모든 뷰가 기본 테이블과 동일한 갱신 연산을 지원하는 것은 아니며, 집계나 조인이 포함되면 갱신이 제한된다. 뷰 정의를 바꿀 때는 ALTER VIEW가 아니라 CREATE OR REPLACE VIEW를 쓰거나 DROP 후 CREATE한다.
인덱스는 검색 속도를 높이지만 삽입·삭제 시 유지보수 부담이 생긴다. 변경이 잦은 환경에서는 인덱스를 최소화하는 것이 성능 유지에 유리하다.
예제
합집합 문제는 속성 개수와 도메인 중 하나를 어긋나게 만들어 선지를 흔든다. 속성명이 다르다는 이유만으로 틀렸다고 하면 함정에 빠진다. HAVING의 자리를 ORDER BY나 LIKE로 바꿔 놓는 선지도 단골이다. 뷰에서는 "물리적 저장"이나 "실제 데이터 저장"이라는 표현이 나오면 곧바로 틀린 설명으로 판단한다. 뷰 정의 변경을 ALTER VIEW로 서술한 선지, 모든 뷰가 갱신을 동일하게 지원한다는 선지도 오답이다.
대표 기출 3문항
SQL문에서 HAVING을 사용할 수 있는 절은?
LIKE 절
WHERE 절
GROUP BY 절
ORDER BY 절
정답과 해설 보기
정답 ③ · SQL 구문에서 그룹화된 결과에 집계 조건을 부여할 때 HAVING 절과 짝을 이루는 절을 묻는 문제이다. HAVING 절은 GROUP BY 절을 통해 생성된 소그룹 집합에 대해 집계 함수를 이용한 조건을 적용할 때 사용된다.
HAVING 절은 GROUP BY로 그룹화된 결과를 필터링할 때 사용되며 WHERE 절 이후에 위치한다.
다음 중 SQL의 합집합 연산이 제대로 수행되는 경우는?
두 테이블의 속성 개수가 같고, 대응되는 각 속성들의 도메인이 같으나 속성명들이 다른 경우
두 테이블의 속성 개수가 같고, 대응되는 각 속성들의 도메인이 같으나 속성들의 도메인이 다른 경우
두 테이블의 속성 개수가 다르나, 대응되는 각 속성들의 도메인이 같으며 속성명들이 같은 경우
두 테이블의 속성 개수가 같으나 대응되는 각 속성들의 도메인이 다르고 속성명들이 다른 경우
정답과 해설 보기
정답 ① · SQL의 UNION 연산이 수행되기 위한 조건을 묻는 문제이다. 합집합 연산은 두 테이블의 속성 개수가 같고 대응되는 각 속성들의 도메인이 서로 같아야 수행할 수 있다.
SQL 합집합(UNION)은 두 집합의 속성 개수와 대응되는 도메인(데이터 타입)이 일치해야 한다.
데이터베이스의 뷰(view)에 관한 설명으로 옳지 않은 것은?
하나 이상의 테이블에서 유도되는 가상 테이블이다.
뷰 정의문 및 데이터가 물리적 구조로 생성된다.
뷰를 이용한 또 다른 뷰의 생성이 가능하다.
삽입, 갱신, 삭제 연산에는 제약이 따른다.
정답과 해설 보기
정답 ② · 데이터베이스 뷰의 성격에 대한 옳지 않은 설명을 고르는 문제이다. 뷰는 하나 이상의 기본 테이블로부터 유도되는 가상 테이블로, 실제 데이터를 물리적으로 저장하지 않고 정의문만 데이터 사전에 저장된다.