Introduction

다른 테이블의 참조는 서브쿼리 외로 테이블 조인이 있다. 성능상 어느 것이 더 좋은지 나는 쉽게 알 수 없으므로, 조인 쿼리와 서브 쿼리를 준비하여 성능을 테스트 해 보는게 좋다고 생각한다.

Content

1. 왜 테이블을 여러개로 관리하는가?

왜 A 테이블과 B 테이블로 쪼개서 관리 할까? 성능과 관리 때문이다. A 테이블에는 회사 정보가 들어 있고, B 테이블에는 회사가 납품하는 정보가 들어 있다고 치자, A 테이블과 B 테이블 모두 C 테이블에 넣는다면, 중복된 정보가 많이 들어가, 테이블 크기가 무척 커지게 된다.

이렇게 되면, 테이블에 접근하고 데이터를 뽑아 오는 비용이 크게 된다. 또한 회사 이름이 바뀌게 될 때, C 테이블에 있는 레코드를 모두 찾아 이름을 바꾸어 주어야 한다. 이 의미는 비용이 높고 관리가 힘들다는 것을 의미한다.

그러므로 서로 독립적으로 유지될 수 있는 정보는 각각 테이블로 나누어 관리 비용과 성능 비용을 낮춘다. 이것이 이유 이다. (여기서 테이블 관계를 만드는 방법은 다루지 않는다.)

2. 무엇을 테이블 조인 이라고 하는가?

A 테이블과 B 테이블이 있을 때, 이것들을 합쳐 테이블 하나를 만드는 것을 테이블 조인이라고 한다. 이 만듬이 테이블을 실제(데이터로 저장 하는것이 실제이다.)로 만드는 것을 의미하지 않는다. 가상(메모리겠지..)공간에 올라와져 있다가 참조가 끝났다고 DBMS가 판단하면, 없어진다.

3. 왜 테이블 조인을 사용 하는가?

테이블이 여러개로 쪼개져 있을 때, 여러 테이블을 한번에 접근하기 위해서 테이블 조인을 사용 한다.

4. 어떻게 테이블 조인을 사용 하는가?

FROM 에 테이블 두개를 지정하고, WHERE 절에 두 테이블이 같은 키를 엮어 주면 된다. 여기서 엮어 준다는 것은 A 에 1번이 있으면 B에 1번과 연결하라는 의미이다. SQL 문은 다음과 같다.


해석

출력


해석에 그림이 나오는데, Products 를 해쉬로 만들고, Vendors 와 결합 시킨다.(여기에서 무엇을 해쉬라고 하는지 모르겠다. 단지 두개를 결합한다는 것은 알겠다.)

FROM 절에서 테이블 두개를 결합한다고 지시했다.
WHERE 절에서 두 테이블이 같이 공유하는 vend_id를 엮으라고 지시했다.

Tip 주의 해야 할 점

  1. Vendors 와 Products 테이블에 같은 이름이 있을 경우, 완전한 이름을 적어 주어야만 한다. 이 말은 테이블명.열이름 으로 지정해 주라는 말 이다. 만약 지정하지 않으면, 에러가 발생하여, 쿼리 실행이 안될 것이다.
  2. WHERE 절을 지정해 주지 않을 경우, Products 행 수 * Ventodrs 행 수 만큼 행을 읽으므로, 성능이 무척 내려간는 것을 알아야 한다.(실제로 이렇게 쓰는 경우는 못봤다.) 그러므로 특별한 이유가 없다면, WHERE 절을 반드시 추가해 주는 것이 좋다.

이렇게 두 테이블에서 서로 동일한 것만 뽑아 오는 것을 "내부 조인" 이라고 한다. 내부 조인을 보다 명확하게 표현해 주는 방법(명확하게 표현해 주는게 좋다. 가독성을 높이기 때문이다.)이 있다.

5. 어떻게 내부 조인을 사용 하는가?


FROM 절에 INNER JOIN 을 넣고,
WHERE  대신에 ON 절을 넣으면 된다.

ANSI SQL 에서는 INNER JOIN을 사용 하는 구문이 정식 구문이라고 한다.

관련 링크

  1. http://www.statwith.pe.kr/TABLE_JOIN/functions003.htm
  2. http://www.setisigns.net/310
  3. http://subversion.assembla.com/svn/oraclesql/뇌자극-Oralce PLSQL/05_02_join.sql
  4. http://idealab.tistory.com/34
  5. http://office.microsoft.com/ko-kr/help/HA012314871042.aspx
Digression

엮다 라는 표현이 참 좋다. : ), 12장에서 외부 조인에 대한 언급이 없으므로, 뒷장에 있을 것이라고 생각한다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기