SQL - SET OPERATION, JOIN
Set Operation
집합 연산에 대한 설명이다.
아래의 테이블을 기준으로 설명하도록 하겠다.
UNION
두 개의 질의 결과를 합집합해서 출력
1
2
3
4
5
6
7
SELECT *
FROM STUDENT
WHERE CID=1
UNION
SELECT *
FROM STUDENT
WHERE CID=2;
INTERSECT
두 개의 질의 결과를 교집합해서 출력
1
2
3
4
5
6
7
SELECT *
FROM STUDENT
WHERE cid=1
INTERSECT
SELECT *
FROM STUDENT
WHERE CIRCLE=2;
MINUS
두 개의 질의 결과를 차집합해서 출력
1
2
3
4
5
6
7
SELECT *
FROM STUDENT
WHERE cid=1
MINUS
SELECT *
FROM STUDENT
WHERE CIRCLE=2;
JOIN
- 하나 이상의 테이블에 포함된 속성들을 검색 결과로 출력할 때 사용되는 기술이다.
- 조인에 참여할 테이블을 공통된 속성을 가져야 한다.
- 두 테이블에서 조인 속성의 값이 동일한 레코드들이 연결한다.
아래의 테이블을 기준으로 설명하도록 하겠다.
안시 조인(ANSI JOIN)과 오라클 조인(ORACLE JOIN)이 있는데 오라클에서는 10G 버전부터 안시 조인을 지원하기 시작했다. 여기서는 안시 조인을 기준으로 설명하겠다.
등가 조인
조인 조건에 등호를 사용하는 조인이다.
1
2
3
4
5
SELECT S.USER AS user, S.GRADE AS grade, C.NAME AS college
FROM STUDENT AS S
INNER JOIN COLLEGE AS C
ON S.CID = C.COLLEGE_ID;
-- STUDENT의 CID와 COLLEGE_ID가 같은 것을 체크해서 JOIN
비 등가 조인
조인 조건에 등호를 제외한 조인이다. 이런 경우 해당 숫자가 어떤 범위에 속해있는지를 알기 위해 사용한다.
1
2
3
4
5
SELECT S.USER AS user, G.GRADE AS grade
FROM STUDENT AS S
INNER JOIN GRADE_ALPHABET AS G
ON S.GRADE BETWEEN G.LOW AND G.HIGH;
-- STUDENT의 GRADE가 어떤 GRADE_ALPHABET인지 출력
Outer Join
완전히 1대 1 대응이 아닌 JOIN이다. JOIN할 값이 없을 경우 NULL로 출력한다.
LEFT와 RIGHT OUTER JOIN은 어느쪽 테이블이 기준이 되느냐에 따라 정해지면 만약 왼쪽 테이블이 기준이라면 LEFT, 오른쪽 테이블이 기준이라면 RIGHT를 사용한다.
만약 두 개의 테이블 모두의 데이터를 JOIN 후 빈 데이터를 NULL로 표기하고 싶다면 FULL OUTER JOIN을 사용하면 되지만 MYSQL의 경우 LEFT와 RIGHT 두개를 모두 구한 후 UNION하는 방식으로 사용해야한다.
1
2
3
4
SELECT S.USER AS user, C.NAME AS circle
FROM STUDENT AS S
LEFT OUTER JOIN CIRCLE AS C
ON S.CIRCLE = C.CIRCLE_ID;
참고자료
- 위키백과 - 데이터베이스
- SQL 8 - 조인 : 등가 조인(Equi join)과 비등가 조인(Non Equi-join)
- 대학생 시절 강의 자료
- 데이터베이스, 이한출판사, 김경창 외 2명
This post is licensed under CC BY 4.0 by the author.