서버/데이터베이스

SQL 익히기 - JOIN

데브준우 2024. 11. 11. 23:24

JOIN

- JOIN 은 여러개의 테이블을 사용해서 새로운 테이블을 만드는 과정이다.

- JOIN 의 기본은 교집합을 만드는 것이다.

 

테스트를 위해 두가지 테이블을 만들어 두었다.


EQUI JOIN

- WHERE절을 통해 두 테이블에서 AGE가 같은 데이터만 JOIN 했다.

- 해시 조인을 사용한다.

- 해시 조인은 EQUI JOIN 만 가능하다.

SELECT *
FROM TEST,TEST3
WHERE test.age = test3.age

 

INNER JOIN

- WHERE로 JOIN 을 하는것은 오래된 구문이라고 한다.

- ISO 표준 SQL로 INNER JOIN 이 있다.

- INNER JOIN 은 ON문을 사용해서 테이블을 연결한다.

 

SELECT *
FROM TEST
JOIN TEST3 ON test.age = test3.age;

 

값은 똑같다.

 

- 나이 조건을 걸었다.

SELECT *
FROM TEST
JOIN TEST3 ON test.age = test3.age
AND TEST.AGE > 30
ORDER BY TEST.SAL

 


OUTER JOIN

- OUTER JOIN은 테이블간의 교집합과, 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다.

 

LEFT JOIN

- 두 테이블의 교집합과 첫번째(왼쪽) 테이블의 데이터를 모두 포함 시킨다.

SELECT T.NAME,T.AGE,T3.NAME,T3.AGE
FROM TEST T
LEFT JOIN TEST3 T3 ON T.AGE = T3.AGE

 

교집합은 위의 4개의 데이터지만, 

왼쪽 테이블의 데이터가 모두 포함되었다.

그리고 교집합이 없는 부분은 NULL로 표시된다.

 

RIGHT JOIN

- 두 테이블의 교집합과 두번째(오른쪽) 테이블의 데이터를 모두 포함 시킨다.

SELECT T.NAME,T.AGE,T3.NAME,T3.AGE
FROM TEST T
RIGHT JOIN TEST3 T3 ON T.AGE = T3.AGE

 

정확히 반대로 교집합과 오른쪽(두번째) 테이블의 데이터를 모두 포함시켰다.

 

FULL JOIN

- LEFT와 RIGHT를 합친 FULL JOIN

SELECT T.NAME,T.AGE,T3.NAME,T3.AGE
FROM TEST T
FULL JOIN TEST3 T3 ON T.AGE = T3.AGE

 


CROSS JOIN

- 조건 없이 2개의 테이블을 하나로 조인한다.

- 두 테이블의 행을 곱집합 (Cartesian product)로 반환

- 모든 행의 조합을 반환한다.

 

SELECT t.name,t3.name from TEST t
CROSS JOIN TEST3 t3

 


INTERSECT 연산

- 두개의 테이블에서 공통된 값을 조회한다.

SELECT AGE FROM TEST
INTERSECT
SELECT AGE FROM TEST3