CROSS JOIN (교차 결합)
서로 교차를 하면서 하나씩 결합을 한다는 것
(1,A), (1,B), (1,C), (2,A)... 총 9개

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');


SELECT *
FROM testA;

SELECT *
FROM testB;


--CROSS JOIN (교차 결합)
--서로 교차를 하면서 하나씩 결합을 한다는 것
--(1,A), (1,B), (1,C), (2,A)... 총 9개

SELECT *
FROM testA
	CROSS JOIN testB;

SELECT *
FROM testA, testB;

결과화면

 

 

 

 

 

 

 

 

 

기본 데이터 보기

USE BaseballData;


SELECT *
FROM players
ORDER BY playerID;

SELECT *
FROM salaries
ORDER BY playerID;

 

 

 


INNER JOIN(두개의 테이블을 가로로 결합 + 결합 기준을 ON 으로 한다)
UNION 은 세로 즉 위아래로 합치는 것이였다면 INNER JOIN 은 옆으로 합치는 것

SELECT *
FROM players AS P
	INNER JOIN salaries AS S
	ON P.playerID = S.playerID;

 

players 의 playerID 와 salaries 의 playerID 가 같은 행 끼리 합치는 것

주의 할점은 조건이 = 인데 양쪽 모두에 playerID 가 있어야 붙여지게 되지 한쪽이라도 id 값이 없다면 해당 행은 걸러진다

즉 양쪽에 모두 정보가 있을때만 나온다

 

결과를 보면 뒤에 추가 된걸 볼 수 있다

 

inner join 을 한다는 건 새로운 테이블을 만든 것

 

 

 

 

 

 

-- outer join (외부 결합)
--어느 한쪽에만 존재하는 데이터가 있을때 정책을 어떻게 할것인지에 대한 것
-- left join 인경우로 예를 들어보면 두개를 조인 할때 왼쪽에만 있고 오른쪽에는 없다면
--왼쪽 정보를 그대로 채워 넣고 없는 오른쪽 정보는 null 로 채워 넣어서 join 을 한다는 것으로 
--inner join 과 유사한데 비어 있는 것을 어떻게 처리 할것인가에 대한 내용이다

SELECT *
FROM players AS P
	LEFT JOIN salaries AS S
	ON P.playerID = S.playerID
	ORDER BY P.playerID;

 

 

아래는 playerID 로 정렬하여 두 테이블(players과 salaries )을 본것이고

 

 

LEFT JOIN 한다음의 모습이다 

adairbi99m 의 줄에서 끝을 보면 

 

 

salaries 에는 adairbi99m  이 없기 때문에 끝에 NULL 로 채워진것을 볼 수 있다

 

 

 

RIGHT JOIN 은 반대의 개념이 된다

정보가 오른쪽에 있다면 표시되고 그 이후에 같은 행에 왼쪽(plyaer)에 없으면 왼쪽 정보는 NULL 로 채워진다

예시 이미지

 

오른쪽에 정보는 있지만

 

왼쪽이 null 로 채워진 경우 

 

 

그런데 left 나 right 나 테이블 순서를 바꿔주면 동일한 효과가 된다

 

 

 

 

정리하자면 

cross join 은 * 이고

inner join, left join right 조인은 같은 행에 추가 하여 테이블을 만드는 것이다

 

 

반응형

+ Recent posts