코다람쥐
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만 이해하여도 상관없다.