공부/데이터베이스

JOIN (교차 결합)

원클릭쓰리버그 2022. 2. 9. 20:52
728x90

--JOIN(결합)

USE GameDB;

CREATE TABLE testA
(
a INTEGER
)
CREATE TABLE testB
(
b VARCHAR(10)
)
-- A(1, 2, 3)
INSERT INTO testA VALUES(1);
INSERT INTO testA VALUES(2);
INSERT INTO testA VALUES(3);

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

--CROSS JOIN (교차 결합)
SELECT*
FROM testA
CROSS JOIN testB;
SELECT*
FROM testB, testA;

- 교차 결합의 결과물

 

 

결합의 예시. 

USE BaseballData;

SELECT*
FROM players
ORDER BY playerID;
SELECT*
FROM salaries
ORDER BY playerID;

 

INNER JOIN (실제로 많이 쓰이는 문법)

 

-- INNER JOIN (두 개의 테이블을 가로로 결합 + 결합 기준을 ON으로)
-- 결합 기준은 playerID(공통된)
--> playerID가 players, salaries 양쪽에 다 있고, 일치하는 애들만 결합한다.

SELECT*
FROM players AS p
	INNER JOIN salaries AS s
	ON p.playerID = s.playerID

 

OUTER JOIN

 

-LEFT JOIN

 

--OUTER JOIN (외부 결합)
	-- LEFT / RIGHT
	-- 어느 한쪽에만 존재하는 데이터 -> 정책?

-- LEFT JOIN (두 개의 테이블을 가로로 결합 + 결합 기준을 ON으로)
-- playerID가 왼쪽(Left)에 있으면 무조건 표시, 오른쪽(salaries)에 없으면 오른쪽 정보는 NULL로 채움.
-- 왼쪽에 해당되는 playerID 및 정보를 표시한다. 만약 playerID가 오른쪽에 있다면 데이터를 표시, 없다면 NULL로 채운다.
SELECT*
FROM players AS p
	LEFT JOIN salaries AS s
	ON p.playerID = s.playerID

 

-RIGHT JOIN

 

-- RIGHT JOIN (두 개의 테이블을 가로로 결합 + 결합 기준을 ON으로)
-- playerID가 오른쪽(Right)에 있으면 무조건 표시, 왼쪽(players)에 없으면 정보는 NULL로 채움.

SELECT*
FROM players AS p
	RIGHT JOIN salaries AS s
	ON p.playerID = s.playerID

'공부 > 데이터베이스' 카테고리의 다른 글

변수와 흐름제어  (0) 2022.03.02
TRANSACTION  (0) 2022.02.16
교집합, 합집합, 차집합  (0) 2022.02.09
정규화 / INDEX  (0) 2022.02.07
데이터베이스 작성  (0) 2022.01.27