반응형

UNION (합집합)

두 개의 릴레이션(테이블)에서 모든 행을 합쳐서 중복 없이 반환하는 연산입니다. 이때, 두 테이블의 속성(컬럼)의 수가 같아야 하고, 각 속성의 도메인(데이터 타입)이 동일해야 합니다.

 

예시로, 프로젝트 위치 도시들과 Simpson 직원이 거주하는 도시들을 모두 나열하고 두 정보를 결합해서 출력해 보겠습니다.

SELECT Location AS City
FROM Project

우선, 프로젝트 테이블의 위치 도시들을 선택합니다. 이 쿼리문은 Toronto, London, New York, San Francisco를 출력할 것입니다.

SELECT City
FROM Employee
WHERE Name = 'Simpson'

Employee 테이블에서 Name이 "Simpson"인 직원들의 City(도시) 정보를 가져옵니다. 이 쿼리문은 Toronto와 San Francisco를 출력할 것입니다. 

SELECT Location AS City
FROM Project
UNION
SELECT City
FROM Employee
WHERE Name = 'Simpson';

UNION으로 두 쿼리의 합집합을 구합니다. 이 쿼리는 프로젝트가 진행되는 도시들 Simpson 직원들이 거주하는 도시들을 모두 나열하고 중복된 도시를 제거하여 최종적으로 도시 리스트를 출력합니다. 

DIFFERENCE (차집합)

릴레이션 R에만 존재하고 S에는 없는 행만 반환하는 연산입니다. 이 경우 또한 두 테이블의 속성(컬럼)의 수가 같아야 하고, 각 속성의 도메인(데이터 타입)이 동일해야 합니다.

학생들 FirstName 교수들 FirstName을 비교하여, 학생들의 FirstName과 중복되지 않는 교수들의 FirstName만을 반환하는 쿼리를 작성해 봅시다.

SELECT FirstName
FROM Professor
WHERE FirstName NOT IN (SELECT FirstName FROM Student);

Student 테이블에서 FirstName David, Diana, Michael, Daniel이므로, 이 이름들과 중복되지 않는 교수들의 이름을 찾아야 합니다. Professor 테이블에서 FirstName David Michael인 교수는 제외되고, 나머지 Denise Julia만 결과로 반환됩니다.

반응형
올리브한입