##본 포스팅은 "SQL 첫걸음 - 아사이 아츠시" 책을 보고 요약한 것입니다.
UNION 집합 연산
SELECT 명령을 실행하면 데이터베이스에 질의하여 그 결과 몇 개의 행이 반환된다. 이때 반환된 결과 전체를 하나의 집합이라고 생각하면 된다.
SQL에서는 SELECT 명령의 실행결과를 하나의 집합으로 다룰 수 있다.
한번의 쿼리 실행으로 두 개의 SELECT 명령이 내부적으로 실행되는 형식이다.
UNION을 사용하면 여러 개의 SELECT 명령을 하나로 묶을 수 있다.
이때 각각의 SELECT 명령의 열의 내용은 서로 일치해야한다.
열을 따로 지정하여 각 SELECT 명령에서 집합의 요소가 될 데이터를 서로 맞춰주면 UNION으로 실행할 수 있는 쿼리가 된다.
테이블의 나열 순서는 합집합의 결과에 영향을 주지않지만, 결괏값의 나열 순서는 달라질 수도 있다.
*ORDER BY를 지정할 때는 마지막 SELECT 명령에만 지정해야한다.
이 때의 ORDER BY는 합집하바의 결과를 정렬한다.
참고로 아래와 같이 사용할 수도 있다.
SELECT a AS c FROM sample1
UNION
SELECT b AS c FROM sample2 ORDER BY c;
UNION은 중복을 자동으로 제거해주지만 중복을 제거하지않고 모든 결과를 얻고싶을 때는 UNION ALL을 사용한다.
UNION에서는 이미 존재하는 값인지를 검사하는 처리가 필요하기때문에 UNION ALL 쪽이 성능적으로 유리할 경우가 있다.
중복값이 없는 경우에는 UNION ALL을 사용하는 편이 좋은 성능을 보여준다.
테이블 결합
여러개로 나뉜 데이터를 하나로 묶어 결과를 내는 방법이 테이블 결합이다. 이때의 결합 연산은 '곱집합'을 이용한다.
FROM에 여러 테이블을 지정하면 교차결합을 한다.
UNION과의 차이는 화대방향이 다르다는 것이다. UNION으로 합집합을 구했을 경우에는 세로방향으로 더해지며, FROM 구로 테이블을 결합할 경우에는 가로 방향으로 더해지게 된다.
하지만 이렇게 많은 테이블을 교차결합하는 경우는 드물고, 교차결합보다 내부 결합이 자주 사용된다.
내부결합에서는 기본키 (primary key)를 사용한다.
테이블에서는 데이터가 유일한 값을 가지도록 하는데, 이를 기본키라고 한다.
기본키는 하나의 데이터행을 대표할 수 있는 속성을 가진다.
아래와 같은 테이블들이 있다고 하자.
두 테이블을 상품 코드로 결합시켜 아래와 같은 결과를 내고싶다고 하자.
이 때 두 테이블을 연결시키고 싶을 때는 상품 테이블의 '상품 코드'를 사용한다.
상품 테이블의 기본키는 '상품 코드'이다.
다른 테이블의 데이터를 참조해야하는 경우, 참조할 테이블의 기본키와 동일한 이름과 자료형으로 열을 만들어서 행을 연결하는 경우가 많다.
위같은 결과는 INNER JOIN을 통해 내부결합을 할 수 있다.
SELECT 상품.상품명, 재고수,재고수
FROM 상품 INNER JOIN 재고수
ON 상품.상품코드 = 재고수.상품코드
WHERE 상품.상품분류 = '식료품';
만약 상품분류에서 '식료품'만 뽑고 싶다면 위처럼 WHERE만 추가하여 조건을 달 수 있다.
INNER JOIN에서는 ON을 사용하여 결합조건을 지정한다.
어느한 쪽에만 존재하는 데이터행은 외부결합을 사용할 수 있다.
외부결합은 LEFT JOIN, RIGHT JOIN을 사용하여 결합하면 되는데, 이때는 기준을 LEFT, RIGHT를 정하여 기준이 될 테이블을 정할 수 있다.
'Database' 카테고리의 다른 글
데이터베이스 첫걸음 9장] 백업과 복구 (2) | 2021.12.13 |
---|---|
SQL 첫 걸음 11장] 결과 행 제한과 수치연산 (0) | 2021.10.16 |
데이터베이스 첫걸음 4장] 데이터베이스와 아키텍쳐 구성 (0) | 2021.10.10 |
SQL 첫걸음 9장~10장] 정렬하기 (0) | 2021.10.10 |
데이터베이스 첫걸음 3강] 데이터베이스 비용 (0) | 2021.09.26 |