코다람쥐 2022. 4. 8. 13:23

1. CROSS JOIN

참고로 UNION등과 햇갈릴 수 있는데

JOIN은 가로로 결합을 하고 UNION과 같은 연산은 세로로 결합을 한다는 차이점이 있다.

CREATE TABLE testA
(
	a INTEGER
)

CREATE TABLE testB
(
	b VARCHAR(10)
)

INSERT INTO testA VALUES(1);
INSERT INTO testA VALUES(2);
INSERT INTO testA VALUES(3);

INSERT INTO testB VALUES('A');
INSERT INTO testB VALUES('B');
INSERT INTO testB VALUES('C');

-- CROSS JOIN(교차결합)
SELECT *
FROM testA
	CROSS JOIN testB -- 방법1

SELECT *
FROM testA, testB; -- 방법2

CROSS JOIN을 실행하는 경우 A의 행의 개수 * B의 행의 개수가 추출이 된다.

위의 예제로 살펴보면,

testA의 행의 개수는 3개

testB의 행의 개수는 3개

즉, 3*3 = 9개의 데이터가 교차결합되어 추출된다.

다만 행의 개수가 조금만 많아져도 기하급수적으로 추출되는 데이터 개수가 많아지므로 사용에 주의해야한다.

참고로 실무에서는 거의 사용되지 않는다.

 

2. INNER JOIN

-- INNER JOIN (두 개의 테이블을 가로로 결합 + 결합 기준을 ON)
SELECT *
FROM players AS p
	INNER JOIN salaries AS s
	ON p.playerID = s.playerID;

playerID가 players, salaries 양쪽에 다 있고 일치하는 애들을 결합하여 데이터를 추출한다.

참고로 playerID를 구분하기 위해서 AS p와 AS s를 선언하였다.

3. OUTER JOIN

OUTER JOIN에는 LEFT JOIN과 RIGHT JOIN의 두 가지 종류가 있다.

- LEFT JOIN

-- LEFT JOIN(두 개의 테이블을 가로로 결합 + 결합 기준을 ON)
SELECT *
FROM players AS p
	LEFT JOIN salaries AS s
	ON p.playerID = s.playerID;

playerID가 왼쪽(players)에 있으면 무조건 표시. 오른쪽(salaries)에 없으면 오른쪽 정보는 NULL로 채움.

 

- RIGHT JOIN

-- RIGHT JOIN(두 개의 테이블을 가로로 결합 + 결합 기준을 ON)
SELECT *
FROM players AS p
	LEFT JOIN salaries AS s
	ON p.playerID = s.playerID;

playerID가 오른쪽(salaries)에 있으면 무조건 표시. 왼쪽(players)에 없으면 왼쪽 정보는 NULL로 채움.

 

LEFT JOIN의 원리만 이해해도 RIGHT JOIN은 LEFT JOIN을 응용하여 대체할 수 있으니 LEFT JOIN만 이해하여도 상관없다.