복수의 테이블을 이용하여 데이터를 검색하는 방법을 찾아보자.
집합
(세로)행으로 데이터가 늘어난다.
합집합 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 |