개념정리/SQLD

SQLD SQL기본 3

춘핑이 2023. 10. 26. 12:49

7. JOIN(오라클)

7.1 조인이란?

일상생활에서 조인이라는 단어는 각기 다른 두개의 집단이 합해질 때 주로 쓰인다.
같은 맥락으로 데이터베이스에서도 조인은 각기 다른 테이블을 한번에 보여줄 때 쓰는 쿼리이다.

7.2 EQUI JOIN

EQUI JOIN은 Equal(=)조건으로 조인하는 것으로 가장 흔히 볼 수 있난 조인의 방식이다.
만약 sqlchild라는 아이디를 가진 사람이 온라인으로 마우스를 구매하고 리뷰를 작성했다고 하자 마우스는 상품테이블의 데이터이고 리뷰는 리뷰테이블에 저장될 것이다.
조인을 통해 이 두테이블을 합쳐 상품 기준의 해당 아이디의 리뷰를 볼 수 있을 것이다.

예시)
SELECT A.COL1, B.COL3
FROM SAMPLE1 A, SAMPLE2 B
WHERE A.CO1 = B.COL1

7.3 Non EQUI JOIN

위와 반대로 다른 조건(BETWEEN > >= < <=)으로 조인을 하는 방식이다.

예시)
SELECT A.COL1, B.COL3
FROM SAMPLE1 A, SAMPLE2 B
WHERE A.CO1 >= B.COL1
AND A.COL1 <= B.COL2

7.4 3개이상 테이블 JOIN

위의 예시에 따라서 3개 이상이 테이블을 조인할 수도 있다.

위의 방식들은 처음본다. 내용만 보았을때는 INNER JOIN의 방식인데 그 문법을 따르고 있지않아 혼란스럽다.
찾아보니 표준 SQL에선 INNER JOIN이라고 하고 오라클만의 독특한 문법이라고 보면 될 것 같다.
JOIN ON이빠지고 대신 WHERE에 조건이 들어가는 것이니 주의하면 될 것 같다.
다음 목차에 이 표준 JOIN이 나오니 그것을 참조하자.

7.5 OUTER JOIN

앞서 본 JOIN과는 다르게 JOIN조건에 만족하지 않는 행들도 출력되는 형태이다.
LEFT OUTER JOIN의 경우 LEFT TABLE에서 JOIN에 성공하지 못한 데이터가 함께 출력된다.
LEFT나 RIGHT 중 기준이 되는 곳에 (+)를 붙여주면된다.

SELECT A.COL1, B.COL3
FROM SAMPLE1 A, SAMPLE2 B
WHERE A.CO1 = B.COL1(+)

8. STANDARD JOIN

RDBMS의 종류가 다양해서 문법이 차이가 존재하는데 너무 클 경우 호환성이슈가 발생하고 효용성이 떨어지기 때문에 표준이되는 ANSI SQL을 지정하게 되었다.

8.1 INNER JOIN

JOIN조건에 충족하는 데이터만 출력되는 방식이다.
앞서본 SQL과의 차이점은 JOIN조건을 ON절을 사용해서 작성하는 것이다.

SELECT A.COL1, B.COL3
FROM SAMPLE1 A INNER JOIN SAMPLE2 B
ON A.CO1 = B.COL1

8.2 OUTER JOIN

JOIN 조건에 충족하는 데이터악 아니더라도 출력하는 방식이다.

8.2.1 LEFT OUTER JOIN

SQL에서 왼쪽에 표기된 테이블의 데이터는 무조건 출력되는 JOIN이다.
오른쪽 테이블에 JOIN되어 있는 데이터가 있든지 말든지 일단 나는 출력된다고 본다는 식으로 이해하면 쉽다.
대신 오른족 테이블에 JOIN되는 데이터가 없는 ROW들은 오른쪽 테이블의 컬럼이 NULL로 출력된다.

SELECT A.COL1, B.COL3
FROM SAMPLE1 A LEFT OUTER JOIN SAMPLE2 B
ON A.CO1 = B.COL1

8.2.2

위의 반대로 SQL의 오른쪽 테이블이 무조건 다 출력되는 방식이다.

SELECT A.COL1, B.COL3
FROM SAMPLE1 A RIGHT OUTER JOIN SAMPLE2 B
ON A.CO1 = B.COL1

8.2.3 FULL OUTER JOIN

왼쪽 오른쪽 테이블의 데이터가 모두 출력되는 방식이다.
LEFT OUTER JOIN과 RIGHT OUTER JOIN의 합집합이라고 이해하면 쉽다. 중복값은 제거된다.

8.3 NATUAL JOIN

A테이블과 B테이블에서 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN되는 방식이다.

컬럼명이 같을때 사용하고 동일한 데이터만 남는다.


MSSQL에서는 지원하지 않는다.
자동으로 지정해주기 때문에 ON절을 사용할 수 없다.
책 138P참고
오라클에서는 USING 조건절을 이용해서 같은 이름을 가진 컬럼 중 원하는 컬럼만 JOIN에 이용할 수 있다.
USING을 사용하면 별도의 테이블명이나 ALIAS를 표기할 수 없다.
처음보는 JOIN이라 책을 봐야알듯

8.4 CROSS JOIN

CROSS JOIN은 A테이블과 B테이블사이에 JOIN 조건이 없는 경우 조합하 수 있는 모든 경우를 출력하는 방식이다.
다른말로 Catesian Product(카테시안곱)라고 표현하기도한다.
별도의 조건이 없으면 카테이산 곱이다!!

예시)
SELECT BOY_NAMAE, GIRL_NAME
FROM GIRL, BOY B;

SELECT BOY_NAME, GIRL_NAME
FROM GRIL CROSS JOIN BOY B;

두 SQL은 같은 결과를 낳는다.