[sql 첫걸음] 복수의 테이블 다루기

ㅎㅎ·2021년 9월 13일
0

SQL

목록 보기
5/5

📌 32강.테이블 결합

보통 데이터베이스는 하나의 테이블에 많은 데이터를 저장하지 않고 몇 개의 테이블로 나누어 저장한다. 이처럼 여러 개로 나뉜 데이터를 하나로 묶어 결과를 내는 방법이 테이블 결합이다.

- 곱집합과 교차결합

먼저 곱집합은 합집합과 교집합처럼 집합의 연산 방법 중 하나로 두 개의 집합을 곱하는 연산 방법이다. 특히 야구팀들의 대진표를 짜는 것과 비슷하다고 생각하면 쉽다.
집합 X = {a,b,c} Y ={1,2,3} 이라면 두 집합의 곱집합은 (a,1),(a,2),,,,,,(c,2),(c,3)이런 결과가 나온다.

데이터 베이스의 테이블은 집합의 한 종류라고 할 수 있다. 따라서 테이블을 두개 지정하면 이들은 곱집합으로 계산된다.

select * from 테이블명1, 테이블명2

즉, from 구에 복수의 테이블을 지정하면 교차결합을 한다.

- 내부결합

두 개의 테이블을 결합하는 것 뿐만 아니라 세개,네개의 테이블을 결합하는 것이 가능하다. 하지만 이 때 집합이 거대해지므로 교차결합보다 내부결합이 더 많이 사용된다.

먼저 내부 결합을 설명하기 전에 데이터 베이스의 테이블에는 기본기(Primary key)를 가지도록 하는 게 좋다. 또한 동일한 데이터를 중복해서 저장하지 않도록 해야한다. 만약 데이터가 변경되는 경우 여기 저기 동일 값으로 변경하기 어렵기 때문이다. 이 때 기본키는 하나의 데이터 행을 대표할 수 있는 속성을 가진다.

예를들어 상품의 가격이나 이름과 같은 데이터를 저장하는 '상품 테이블'이 있을 경우 상품명을 기본키로 한다면 값이 중복될 수 있으므로 상품코드를 기본키로 정할 수 있다.

만약 이렇게 '상품'테이블과 '재고수'테이블이 존재할 때 상품코드를 통해 두 테이블을 연결할 수 있다.

먼저 저 두 테이블을 이용해 상품명과 상품분류를 한 번에 가져오고자 할때 먼저 테이블을 결합해야한다.

select * from 상품, 재고수;

두 테이블을 먼저 복수로 지정하면 곱집합으로 계싼이 되는데 행은 총 3 x 3 = 9 행이된다. 이 때 만들어진 집합에서 원하는 조건을 검색하기 위해 where구를 사용하면 된다. 중요한 건 먼저 상품코드가 같다는 조건이 필요하다.

select * from 상품, 재고수 where 상품.상품코드 = 재고수.상품코드;

이렇게 교차결합으로 계산된 곱집합에서 원하는 조합을 검색하는 것을 내부결합(INNER JOIN)이라고 한다. 이제는 상품분류가 '식료품'이라는 조건이 필요하다. 이 조건을 where 문에 추가해야한다.

select * from 상품, 재고수 where 상품.상품코드 = 재고수.상품코드 and 상품.상품분류 = '식료품';

여기서 더 나아가 상품명과 재고수만 반환할 수 있다.

select 상품.상품명, 재고수.재고수 from 상품, 재고수 where 상품.상품코드 = 재고수.상품코드 and 상품.상품분류 = '식료품';

이렇게 원하는 결과를 만들 수 있다. where구에는 두 개의 조건식이 지정되어 있는데 첫번째는 교차결합으로 계산된 곱집합에서 원하는 조합을 검색하는 것이고, 두번째는 결합 조건이 아닌 검색 조건이다. 그리고 첫 번째 조건식의 조건을 결합조건이라고 부른다.

- INNER JOIN으로 내부결합!!!!!!

위의 결합방법을 정리하자면

  • from 구에 테이블을 복수 지정해 가로 방향으로 테이블을 결합할 수 있다.
  • 교차결합을 하면 곱집합으로 계산된다.
  • where 조건을 지정해 곱집합에서 필요한 조합만 검색할 수 있다.

하지만 위의 방법은 모두 구식이다.;;;;;;;;;;;;;;;;

최근에는 INNER JOIN키워드를 사용한 결합방법이 일반적으로 통용된다. 위의 사례를 INNER JOIN로 같은 결과 값을 얻을 수 있다.

select 상품.상품명, 재고수.재고수 
from 상품 inner join 재고수 on 상품.상품코드 = 재고수.상품코드 
where 상품.상품분류 = '식료품';

구식으로는 .로 구분해 테이블을 from 구에 지정한 반면에 테이블과 테이블 사이에 inner join이라는 키워드를 넣으면 된다. 또한 구식방법으로는 where에 결합조건을 지정했지만 inner join에서는 on을 사용해서 결합 조건을 지정한다.

- 내부결합을 활용한 데이터 관리

- 외부결합

0개의 댓글