[SQL 첫걸음] 7장: 복수의 테이블 다루기
[SQL 첫걸음] 7장: 복수의 테이블 다루기
7장: 복수의 테이블 다루기
31강. 집합 연산
1. SQL과 집합
- SELECT 명령을 실행하면 데이터베이스에 질의하며 그 결과 및 개의 행이 반환된다.
- 이때 반환된 결과 전체를 하나의 집합이라고 생각하면 된다.
2. UNION으로 합집합 구하기
- 합집합: 집합을 서로 더한 것
- UNION: 두 개의 SELECT 명령을 하나로 연계해 질의 결과를 얻을 수 있다.
- UNION 할 때 각각의 SELECT 명령의 열 내용은 서로 일치해야 한다.
- 열 이름은 달라도 열 개수와 자료형이 같으면 일치한다고 말할 수 있다.
- 반면, 열 구성이 다른 테이블은 UNION을 묶을 수 없다.
- ex) 두 개의 SELECT 명령을 UNION해서 합집합 구하기
SELECT * FROM sample71_a **UNION** SELECT * FROM sample71_b; - UNION을 사용할 때의 ORDER BY
- UNION으로 SELECT명령을 결합해 합집합을 구하는 경우, 각 SELECT 명령에 ORDER BY를 지정해 정렬할 수 없다.
- ORDER BY를 지정할 때는 마지막 SELECT 명령에만 저장해야 한다.
- ORDER BY 구에 지정하는 열은 별명을 붙여 이름을 일치시킨다.
- UNION ALL
- UNION은 두 개의 집합에서 겹치는 공통 요소로 하나만 존재한다.
- 중복을 제거하지 않고 2개의 SELECT 명령의 결과를 합치고 싶으면 UNION ALL을 사용하면 된다.
- ex) 두 개의 SELECT 명령을 UNION ALL을 적용해 합집합 구하기
SELECT * FROM sample71_a **UNION ALL** SELECT * FROM sample71_b;
3. 교집합과 차집합
- MySQL에서는 지원되지 않는다.
- 교집합은 INTERSECT를 사용한다.
- 차집합은 EXCEPT를 (Oracle의 경우는 MINUS) 사용한다.
32강. 테이블 결합
1. 곱집합과 교차결합
- 곱집합: 두 개의 집합을 곱하는 집합의 연산 방법으로 ‘적집합’ 또는 ‘카티전곱(Cartesian product)’이라고도 불린다.
교차결합(Cross Join)
1
SELECT * FROM 테이블명1, 테이블명2
- FROM 구에 복수의 테이블을 지정하면 교차결합을 한다.
- UNION 연결과 결합 연결의 차이
- 두 가지 방식은 서로 비슷하지만 확대 방향이 다르다.
- UNION으로 합집합을 구했을 경우에는 세로 방향으로 더해지게 된다.
- FROM 구로 테이블을 결합할 경우에는 가로 방향으로 더해지게 된다.
2. 내부결합
- 내부결합: 두 테이블에서 조인 조건이 일치하는 공통된 데이터(교집합)만 추출하여 연결하는 방식
3. INNER JOIN으로 내부결합하기
- 결합벙법
- FROM 구에 테이블을 복수 지정해 가로 방향으로 테이블을 결합할 수 있다.
- 교차결합을 하며 곱집합으로 계산된다.
- WHERE 조건을 지정해 곱집합에서 필요한 조합만 검색할 수 있다.
내부결합
1
SELECT * FROM 테이블명1 INNER JOIN 테이블명2 ON 결합조건
- INNER JOIN으로 두 개 테이블을 가로로 결합할 수 있다.
4. 내부결합을 활용한 데이터 관리
- 외부키: 다른 테이블의 기본키를 참조하는 열
- 자기결합(Self Join): 테이블에 별명을 붙일 수 있는 기능을 이용해 같은 테이블끼리 결합하는 것
5. 외부결합
- 외부결합: 어느 한 쪽에만 존재하는 데이터행을 어떻게 다룰지를 변경할 수 있는 결합 방법
- LEFT JOIN, RIGHT JOIN으로 외부결합을 할 수 있다.
- LEFT JOIN: 왼쪽 테이블의 모든 데이터를 가져오되, 오른쪽 테이블에서 조건이 일치하는 데이터가 있으면 붙이고 없으면
NULL로 채우는 방식 - RIGHT JOIN: 오른쪽 테이블의 모든 데이터를 가져오되, 왼쪽 테이블에서 조건이 일치하는 데이터가 있으면 붙이고 없으면
NULL로 채우는 방식
- LEFT JOIN: 왼쪽 테이블의 모든 데이터를 가져오되, 오른쪽 테이블에서 조건이 일치하는 데이터가 있으면 붙이고 없으면
33강. 관계형 모델
1. 관계형 모델
- 관계형 모델의 릴레이션은 SQL에서 말하는 테이블에 해당된다.
- 속성(Attribute): 속성 이름과 형(Type) 이름으로 구성되며, SQL의 ‘열(Column)’에 해당하는 요소
- 튜플(Tuple): 관계형 모델에서 사용하는 용어로, SQL의 ‘행(Row)’에 해당하는 요소
- 관계대수
- 정의: 릴레이션에 대한 연산이 집합의 대한 연산에 대응된다는 이론
- 기본 규칙
- 하나 이상의 관계를 바탕으로 연산한다.
- 연산한 결과, 반환되는 것 또한 관계이다.
- 연산을 중첩 구조로 실행해도 상관없다.
2. 관계형 모델과 SQL
- 합집합(union)
- 릴레이션끼리의 덧셈을 말한다.
- SQL에서는 UNION에 해당한다.
- 차집합(difference)
- 릴레이션끼리의 뺄셈을 말한다.
- SQL에서는 EXCEPT에 해당한다.
- 교집합(intersection)
- 릴레이션끼리의 공통부분(교집합)을 말한다.
- SQL에서는 INTERSECT에 해당한다.
- 곱집합(cartesian product)
- 릴레이션끼리의 대전표를 조합하는 연산을 말한다.
- SQL에서는 FROM 구에 복수의 테이블을 지정한 경우 곱집합으로 계산된다.
- CROSS JOIN으로 교차결합을 하면 곱집합을 구할 수 있다.
- 선택(selection)
- 튜플의 추출을 말한다.
- SQL에서 튜플은 행을 말하기 때문에 WHERE 구에 조건을 지정해 데이터를 검색하는 것에 해당된다.
- 투영(projection)
- 속성의 추출을 말한다.
- SQL에서 속성은 열을 말하기 때문에 SELECT 구에 결과로 반환할 열을 지정하는 것에 해당된다.
- 결합(JOIN)
- 릴레이션끼리 교차결합해 계산된 곱집합에서 결합조건을 만족하는 튜플을 추출하는 연산이다.
- SQL에서는 내부결합에 해당한다.
This post is licensed under CC BY 4.0 by the author.