데이터베이스에서 데이터 검색 및 분석의 핵심은 쿼리를 통한 효과적인 데이터 처리입니다. 복잡한 데이터 세트를 다룰 때, 특히 유용한 기능들인 '집합 연산자'와 다양한 'JOIN' 유형을 살펴보겠습니다.
집합 연산자
개념
여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식
집합 연산자 종류
종류
설명
UNION
여러 개의 SQL 문의 결과에 대한 합집합으로 결과에서 중복된 모든 행은 하나의 행으로 출력
UNION ALL
여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시
INTERSECT
여러 개의 SQL 문의 결과에 대한 교집합으로 중복된 행은 하나의 행으로 출력
EXCEPT (MINUS)
앞의 SQL 문의 결과에서 뒤의 SQL문의 결과에 대한 차집합으로 중복된 행은 하나의 행으로 출력
집합 연산자 사용 예시 쿼리
employees 테이블
id
name
1
Alice
2
Bob
3
Charlie
4
David
managers 테이블
id
name
1
Alice
2
Eve
3
Frank
UNION
-- 서로 다른 두 테이블에서 'name' 필드를 선택하여 합칩니다.
SELECT name FROM employees
UNION
SELECT name FROM managers;
결과
name
Alice
Bob
Charlie
David
Eve
Frank
UNION ALL
-- 서로 다른 두 테이블에서 'name' 필드를 선택하여 합치되 중복 허용.
SELECT name FROM employees
UNION ALL
SELECT name FROM managers;
결과
name
Alice
Bob
Charlie
David
Alice
Eve
Frank
INTERSECT
-- 두 테이블에서 공통적으로 등장하는 이름을 찾습니다.
SELECT name FROM employees
INTERSECT
SELECT name FROM managers;
결과
name
Alice
MINUS
-- 직원 중에서 관리자가 아닌 사람들의 이름을 찾습니다.
SELECT name FROM employees
MINUS
SELECT name FROM managers;
결과
name
Bob
Charlie
David
JOIN
개념
두개 이상의 테이블을 결합하여 데이터를 검색하는 방법
JOIN의 종류
내부 조인(Inner Join)
두 테이블에 존재하는 데이터 중에 공통된 데이터만 추출
자연 조인(Natural Join)
동일한 타입과 이름을 가진 컬럼을 조인 조건으로 이용하는 조인을 간단히 표현하는 방법
전체 외부 조인(Full Outer Join)
좌측테이블과 우측테이블의 데이터를 모두 읽어 중복된 데이터는 삭제한 JOIN 결과 반환
왼쪽 외부 조인(Left Outer Join)
좌측테이블 기준으로 일치하는 행만 결합하고, 일치하지 않는 부분은 NULL로 채움
오른쪽 외부 조인(Right Outer Join)
우측테이블 기준으로 일치하는 행만 결합하고, 일치하지 않는 부분은 NULL로 채움
곱집합(Cross Join)
두 테이블 데이터의 모든 조합을 반환
JOIN 종류 별 사용 예시 쿼리
employees 테이블
id
name
department_id
1
Alice
1
2
Bob
2
3
Charlie
3
4
David
NULL
departments 테이블
id
department_name
1
HR
2
Engineering
3
Marketing
5
Sales
내부 조인(Inner Join)
SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
결과
name
department_name
Alice
HR
Bob
Engineering
Charlie
Marketing
자연 조인(Natural Join)
-- 여기서는 동일한 이름을 가진 'id' 컬럼은 없으므로 'department_id'와 'id'의 이름을 일치시켜야 합니다.
SELECT e.name, d.department_name
FROM employees e
NATURAL JOIN (SELECT id AS department_id, department_name FROM departments) d;
결과
name
department_name
Alice
HR
Bob
Engineering
Charlie
Marketing
전체 외부 조인(Full Outer Join)
SELECT e.name, d.department_name
FROM employees e
FULL OUTER JOIN departments d ON e.department_id = d.id;
결과
name
department_name
Alice
HR
Bob
Engineering
Charlie
Marketing
David
NULL
NULL
Sales
왼쪽 외부 조인(Left Outer Join)
SELECT e.name, d.department_name
FROM employees e
LEFT OUTER JOIN departments d ON e.department_id = d.id;
결과
name
department_name
Alice
HR
Bob
Engineering
Charlie
Marketing
David
NULL
오른쪽 외부 조인(Right Outer Join)
SELECT e.name, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d ON e.department_id = d.id;
결과
name
department_name
Alice
HR
Bob
Engineering
Charlie
Marketing
NULL
Sales
곱집합(Cross Join)
SELECT e.name, d.department_name
FROM employees e
CROSS JOIN departments d;
결과
name
department_name
Alice
HR
Alice
Engineering
Alice
Marketing
Alice
Sales
Bob
HR
Bob
Engineering
Bob
Marketing
Bob
Sales
Charlie
HR
Charlie
Engineering
Charlie
Marketing
Charlie
Sales
David
HR
David
Engineering
David
Marketing
David
Sales
데이터베이스 쿼리는 강력한 도구이며, 집합 연산자와 다양한 JOIN 기법을 통해 데이터를 조작하고, 분석하는 능력을 강화할 수 있습니다. 이러한 기능들을 적절히 활용하여 데이터베이스 관리의 효율성을 높여보세요. 2024년에 정보처리기사를 따기 위해 노력하는 모두에게 행운을 빕니다!