본문 바로가기
SQL

집합과 결합

by csue 2021. 4. 27.

복수의 테이블을 이용하여 데이터를 검색하는 방법을 찾아보자.

집합

(세로)행으로 데이터가 늘어난다.

합집합 UNION

두 개의 SELECT 명령을 하나의 명령으로 합친다.

SELECT * FROM 테이블명1
UNION
SELECT * FROM 테이블명2

 

 

완전히 열 구성이 다른 테이블을 UNION 으로 묶을 수는 없다.

 

ORDER BY

합집합의 결과를 정렬하므로, 가장 마지막의 SELECT 명령에 지정하는것이 좋다.
애스터리스크가 아닌 열 만으로 합집합을 나타낼때, 두 테이블의 열 이름이 다른 경우 각각의 열에 alias 를 붙여서 정렬해야 한다.

 

UNION ALL

UNION 은 합집합을 구하는 과정에서 중복되는 요소를 기본적으로 제거한다.
UNION ALL 을 사용하면, 중복값 제거 없이 단순하게 합친 결과를 반환한다. 그러므로 중복되는 값이 필요하거나 중복값이 아예 없을 경우, 중복값이 존재하는지 검사하는 처리를 먼저 하는 UNION 보다 UNION ALL 을 사용하는 것이 좋은 성능을 보여준다.

 

교집합과 차집합

교집합은 INTERSECT, 차집합은 EXCEPT 를 사용한다.
다만 MySQL 에서는 해당 명령어가 없는 대신 JOIN 을 사용한다.

결합 Join

(가로)열 방향으로 데이터가 늘어난다.
JOIN 에는 아래의 사진과 같이 다양한 형태가 있다.

 

교차결합 Cross Join

SELECT * FROM 테이블명1, 테이블명2

 

내부결합 Inner Join

교차결합으로 계산된 곱집합에서 원하는 조합을 검색하는 것을 내부결합이라고 한다.
교차결합의 경우, 테이블수가 많아지면 거대해지기 때문에 INNER JOIN 이 교차결합보다 더 자주 사용된다.

SELECT * FROM 테이블명1 INNER JOIN 테이블명2 ON 결합조건

 

자기결합 Self Join

자기 자신의 기본키를 참조하는 열을 자기 자신이 가지는 데이터 구조로 되어있을때 주로 사용한다.

외부결합

외부결합은 어느 한 쪽에만 존재하는 데이터행을 어떻게 다룰지를 변경할 수 있는 결합 방법이다.

LEFT JOIN

LEFT JOIN 은 왼쪽 테이블을 기준으로 삼아 결합하는 방식이다. 
뒤에 WHERE 이나 AND 를 붙여 조건을 지정할수도 있다. OUTER keyword 는 optional 이다.

 

 

RIGHT JOIN 은 반대로 오른쪽 테이블을 기준으로 삼아 결합하는 방식이다.

 

'SQL' 카테고리의 다른 글

데이터 모델링  (0) 2021.05.11
트랜잭션  (0) 2021.05.11
db index & view  (0) 2021.04.27
데이터베이스 객체의 생성과 삭제  (0) 2021.04.27
집계와 서브쿼리  (0) 2021.04.27