본문으로 바로가기

Join

category Database 2018. 11. 8. 03:22

관계형 데이터베이스의 데이터 관리와 Join


관계형 Database에서는 모든 Data들이 하나의 Table에 모두 담겨있는 것이 아니라 여러 Table에 분산되어 있다.

그리고  Table들은 서로 특정한 관계를 가지도록 설계된다.


흩어져 있는 Data들을 조회하기 위해서는 분산된 Table들을 모두 조회해야 하는데 이는 매우 비효율 적이고 귀찮은 일이다.

이러한 문제점을 해결하기 위해 나온 기술이 Join이다. 




Join


정의 

여러 Table에 흩어져 있는 정보들 중에서 사용자가 필요한 정보만 가져와서 가상의 Table을 만들어서

결과를 보여주는 기술


방식

Primary key와 Foreign key가 지정된 Column을 통해 두 Table을 연결한다.


종류

1. CROSS JOIN

1) Cartesian Product(카티션 곱)이라고도 부른다.

2) Join 조건이 잘못 되었거나, Join 조건을 안 적었을때 발생한다.

3) 결과 값으로 두 Table의 행 수를 모두 곱한 것이 출력된다.

4) 조건이 없기때문에 존재하는 모든 걸 곱해서 출력한다고 생각하면 된다.

    현업에서는 어떤 목적이 있어서 일부러 발생시키기도 한단다.


2. EQUI JOIN

1) 일반적으로 가장 많이 사용되는 Join이다.

2) Join 조건을 검사해서 두 테이블의 Column에 같은 조건의 Value가 존재할 경우

    해당 행의 SELECT한 Column의 Data를 가져온다. (같은 값이 없으면 안가져옴)

3) ON절에서 Equal 연산자 (=)를 사용해서 값을 가져올지 안가져올지 판단한다.

4) 첫 번째 조건을 이용해 두 Table을 Join한 후 두 번째 조건으로 다시 한번 데이터를 추려서 출력할 수도 있다.

5) 3개의 Table을 Join할 수도 있다. 이 경우 첫번째 Join의 On절 뒤에 다시 JOIN절과 ON절을 기술한다. 


예시)

SELECT B.NAME, F.FINE    <- 같은 값이 있다면 BIT 테이블에서 NAME으르 가져오고 FINE 테이블에서 FINE을 가져온다

FROM BIT B JOIN FINE F  <- Table에 별명을 부여해서 손쉽게 다룰 수 있도록 할 수 있다.

ON B.RANK = F.RANK;     <- Table이 공통으로 가지고 있는 Column을 참조해서 같은 값을 가진 행을 가져온다


BIT TABLE에는 NAME(이름), RANK(계급), COUNT(지각횟수) 3개의 Column이 있다.

FINE TABLE에는 RANK(계급), FINE(지각시 벌금 비율) 2개의 Column이 있다.


위의 쿼리문은 BIT TABLE을 B라하고 FINE TABLE을 F라 한다.

B의 RANK Column의 값과 F의 RANK Column에서 값은 값이 있다면

B의 이름과 F의 벌금 비율을 가져와 가상 테이블을 만든 후 출력해라는 의미를 가진다.



예시2)

SELECT B.NAME, F.FINE

FROM BIT B JOIN FINE F

ON B.RANK = F.RANK

AND B.RANK = '팀장';


팀장들만 이름과 벌금 비율을 가져와 가상 테이블을 생성 후 출력해라는 의미이다.



예시3)

SELECT B.NAME, F.FINE, B.COUNT, C.NICK

FROM BIT B JOIN FINE F ON B.RANK = F.RANK

JOIN COUNT C ON C.COUNT=B.COUNT;


3. NON - EQUI JOIN

EQUI JOIN은 ON절에 equal 연산자 (=)를 이용해 서로 같은 조건을 가진 데이터를 JOIN해오는 방식이었다.

그렇다면 같은 조건이 아닌 크거나 작거나 하는 경우는 어떻게 해야할까? 

이럴때 사용하는 JOIN 방식이 NON-EQUI JOIN 방식이다.



4. OUTER JOIN

INNER JOIN 이란 JOIN에 참여하는  Table에 Data가 존재할 경우에만 결과를 출력한다.(2번,3번)

반면에 OUTER JOIN은 JOIN에 참여하는 Table 중 한 쪽 Table에는 Data가 있고 한 쪽 Table에는 Data가 없을 경우

Data가 있는 쪽 Table의 Data를 전부 출력하게 하는 방법이다.


LEFR OUTER JOIN : ON 조건절의 =을 기준으로 왼쪽 조건의 테이블을 모두 출력


RIGHT OUTER JOIN : ON 조건절의 =을 기준으로 오른쪽 조건의 테이블을 모두 출력


FULL OUTER JOIN : 모든 테이블의 데이터를 출력


5. SELF JOIN

 

'Database' 카테고리의 다른 글

Dual Table 이란  (0) 2018.11.08
함수  (0) 2018.11.07
2. SQL (Structured Query Language) 구조화 질의 언어  (0) 2018.11.05
1. Database  (0) 2018.11.05