본문 바로가기
Do it! SQL 입문/메모

조인 개념 메모

by Hwanii_ 2023. 6. 25.
728x90

1.

조인은 크게 내부 조인과 외부 조인이 있다.

 

그밖에, 교차 조인하고, 셀프 조인도 있긴 한데, 거의 쓰지 않는다.

 

2.

외부 조인은

LEFT OUTER JOIN

RIGHT OUTER JOIN

FULL OUTER JOIN

3개가 있다.

 

3.

기본적으로 조인을 쓰는 이유가

예를들어서 테이블이 2개라면,

두 테이블에서 내가 원하는 열 조건을 맞춰주고,

두 테이블의 열에 대해서 공통의 값 (ROW) 을 가져오기 위해서 사용 한다.

 

근데, 외부조인은 

기준점에 따라서, 조금씩 달라지는데

 

왼쪽 아우터 조인 했는데

 

왼쪽에 있는 모든 ROW하고

같은 값을 가지고 있는 오른쪽 테이블에 있는 해당 열의 ROW값을 가져온다.

 

근데, 만약에 값이 동일하지 않은게 있으면,

그 동일 하지 않은 오른쪽 테이블의 값은 NULL 값으로 오게 된다.

 

 오른쪽 아우터 조인은

 

오른쪽에 있는 모든 ROW하고

같은 값을 가지고 있는 왼쪽 테이블에 있는 해당 열의 ROW값을 가져온다.

 

근데, 만약에 값이 동일하지 않은게 있으면,

그 동일 하지 않은 왼쪽 테이블의 값은 NULL 값으로 오게 된다.

 

4.

두 테이블 이상일때 조인을 하는데,

테이블에서 가져올 칼럼명은 무조건 별칭이 존재 해야 한다.

열 이름을 인식 할 수 있도록 별칭을 지정해주는 개념 이다.

 

(별칭이 없으면, 테이블명을 그대로 쓰면 되는데, 그냥 별칭 쓰는게 맞음)

 

5.

join을 쓸때는, 문법상 on과 같이 사용하고,

 

ON 뒤에는 조건이 온다.

 

그때, =  기준으로

왼쪽에 있는게 LEFT 고

오른쪽에 있는게 RIGHT 다.

(외부 조인 시)

 

6.

예시 구문

 

SELECT * FROM A;
insert into A values (1);
insert into A values (2);
insert into A values (3);
insert into A values (4);

insert into B values (3);
insert into B values (4);
insert into B values (5);
insert into B values (6);

SELECT * FROM A;

SELECT * FROM B;

SELECT * FROM A INNER JOIN B ON A.key = B.key;

SELECT * FROM A LEFT OUTER JOIN B ON A.key = B.key;

SELECT * FROM A RIGHT OUTER JOIN B ON A.key = B.key;

SELECT * FROM A FULL OUTER JOIN B ON A.key = B.key;

 

7.

 

예시)

 

 

JOIN 쓸때, INNER 안붙히면, 자동으로 INNER JOIN으로 된다.

근데 붙혀주는게 좋다.

 

SELECT * FROM CART JOIN BOOK ON 구문 보면,

 

ON 뒤에가 조건인데,

 

CART.BNUMFK = BOOK.NUM 으로 되어있다.

 

카트 테이블에서 책의 PK를 의미하는 FK 열 하고

북 테이블에서 책의 PK를 의미하는 열 (NUM)

두개 에서 동일한 값을 가져오겠다.

 

카트 테이블에서 북 테이블 조인해서

카트 테이블에서 책 PK하고 북 테이블 에서 책 PK 하고 같은거를 가져오겠다는건데

 

그게 의미하는게 결국,

장바구니에 담겨져있는 책의 PK하고 북 테이블에 있는 책의 PK가 같다는 말.

 

8.

ON 뒤에 조건이 여러개 이면, 테이블 칼럼명이 1대1이 되도록 작성해주고,

AND로 연결 시켜주면 된다.

 

9.

별칭을 지정해줄 때, AS가 생략이 가능한데,

별칭을 쓰는 이유가 테이블명 그대로 사용하는것 보다

줄여서 쓸 수 있기 때문에 쓰는 느낌.

 

별칭을 안써도 되긴 하는데, 대신에 테이블명을 그대로 써줘야 한다.

근데 굳이 그럴 필요 있나?

테이블명이 길고 그러니까 별칭으로.

 

9.

ROW_NUMBER() 함수 정리 하기

 

집계 함수 같은데 ?

 

반응형