SQL - JOIN 조인

2023. 3. 13. 16:47SQLD 정리

반응형

서로 다른 테이블을 결합할 때 조인을 사용한다.

 

조인을 하는 방법

1. 두 테이블에서 동일한 컬럼을 찾는다.

2. 레코드를 식별할 수 있는 컬럼으로 결정한다.

 

위에 두개의 테이블이 있다. 회원별 전화번호를 출력하려고 한다. 따라서 회원정보가 있는 테이블과 전화번호가 있는 테이블을 결합하여 출력을 하면 된다. 두 테이블의 공통 칼럼은 회원코드이다. 회원코드를 이용해서 조인을 하면 다음과 같다.

SELECT A.이름, B.전화번호

FORM C_INFO A JOIN PHONE B ON A.회원번호 = B.회원코드;

위와 같이 조인은 다른 테이블과 결합하여 정보를 가져올 때 사용된다. 이제 조인의 종류에 대해 알아보자

 

조인의 종류

* 교집합

- INNER JOIN( 두 테이블에서 일치하는 데이터만 출력)

    SELECT A.*, B.* FROM 테이블명1 A INNER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명 

    또는

    SELECT A.*, B.* FROM 테이블명1 A , 테이블명2 B WHERE A.공통컬럼명 = B.공통컬럼명

   

      참고) 3개 이상의 테이블을 조인하는 경우

     SELECT A.*, B.*, C.*

     FROM 테이블명1 A INNER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명

                                     INNER JOIN 테이블명3 C ON A.공통컬럼명  = C.공통컬럼명 

                                     ......  

     또는

     SELECT A.*, B.*, C.*

    FROM 테이블명1 A , 테이블명2 B, 테이블명3 C

    WHERE A.공통컬럼명 = B.공통컬럼명

          AND B.공통컬럼명 = C.공통컬럼명

 

- LEFT JOIN

(왼쪽 테이블을 기준으로 합쳐집, 왼쪽테이블의 데이터에서 오른쪽 테이블의 데이터가 없어도 왼쪽테이블 데이터는 출력)

    SELECT A.*, B.* FROM 테이블명1 A  LEFT OUTER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명

    또는

    SELECT A.*, B.* FROM 테이블명1 A , 테이블명2 B WHERE A.공통컬럼명 = B.공통컬럼명(+)

    

- RIGHT JOIN

(오른쪽 테이블을 기준으로 합쳐집, 오른쪽테이블의 데이터에서 왼쪽 테이블의 데이터가 없어도 오른쪽테이블 데이터는 출력)

    SELECT A.*, B.* FROM 테이블명1 A  RIGHT OUTER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명

    또는

    SELECT A.*, B.* FROM 테이블명1 A , 테이블명2 B WHERE A.공통컬럼명(+) = B.공통컬럼명

    

참고)(+)는 해당 테이블 속성값에 대해 NULL을 허용한다. 즉 오른쪽 테이블에는 없고 왼쪽 테이블에만 있는 데이터도 출력

참고) RIGHT와 LEFT 조인에서 OUTER는 생략 가능하다.

 

- OUTER JOIN(두 테이블의 합집합)

    SELECT A.*, B.* FROM 테이블명1 A FULL OUTER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명   

 

*합집합

- UNION(ALL)

    SELECT * FROM A

    UNION [ALL]

    SELECT * FROM B

참고)

-UNION은 중복되는 데이터는 제외된 합집합 출력이 되고 UNION ALL은 중복값이 제거되지 않은 상태로 두테이블             전체가 출력된다. 

 -UNION은 조회 대상이 되는 컬럼 수가 같고 각 컬럼의 데이터타입 등 속성이 동일할 때 적용 가능         

 

*차집합

- MINUS(오라클), EXCEPT(SQL 서버)

    SELECT * FROM A

    MINUS (오라클) 또는 EXCEPT(SLQ 서버)

    SELECT * FROM B

 

*결합되는 대상간의 일치정도

-EQUI조인(동일한 컬럼을 사용하여 두 릴레이션을 결합) ,

-non-EQUI 조인(정확하게 일치하지 않는 컬럼들을 사용하여 두 릴레이션을 결합, =이 아니라 <. >, <=, >=를 이용해 조인)

 

* 조건구 없는 CROSS JOIN

- 서로 연관된 컬럼이 없을 경우 수행하는 조인

    SELECT * FROM A CROSS JOIN B

A에 12개의 행 B에 10개의 행이 있다면 일치여부와 상관없이 모든 결합을 출력하니 120개의 행이 출력됨.

 

참고) 한 테이블 내에서 연간관계를 가진 두 칼럼 간의 조인 >>> 셀프조인

- 테이블 명과 컬럼며이 모두 일치하기 때문에 꼭 Allias를 써줘야 한다.

ex) SELECT T1.COL1, T2.COL1 FROM 테이블명 T1, 테이블명 T2 WHERE T1.COL1 = T2.COL

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'SQLD 정리' 카테고리의 다른 글

SQL - 윈도우함수, 파티션  (1) 2023.03.14
SQL - 계층형 조회  (0) 2023.03.14
SQL - 집계함수, SELECT문 연산 순서, 행 수 제한, ROWID  (0) 2023.03.13
SQL - Group By  (0) 2023.03.13
SQL - NULL 관련 함수  (0) 2023.03.12