데이터를 불러 올 때
하나의 테이블만 사용하는 것이 아니라
두개 이상의 테이블을 합쳐서
필요한 데이터를 추출할 때 사용하는 것이 조인 기능이다.
조인은 오라클에서 사용하는 오라클 조인과
오라클 외에 다른 DBMS에서 사용되는 ANSI 조인으로
사용법에 약간의 차이가 있다.
조인은 여러 개의 테이블을 연결하여
하나의 테이블을 만드는 과정이다.
1. INNER JOIN
가장 흔하게 사용되는 조인으로
각각의 테이블에서 동등한 조건이 있을 때
원하는 컬럼을 가져올 수 있다.
1-1 EQUI JOIN
1-2 NATURAL JOIN
1-3 JOIN ~ USING
2. OUTER JOIN
INNER 조인에서 원하는 부분을
추가로 더 가져올 수 있다.
INNER 조인 + @
2-1 LEFT OUTER JOIN
2-2 RIGTH OUTER JOIN
2-3 FULL OUTER JOIN
1-1 EQUI JOIN
* A테이블과 B테이블 모두 a컬럼을 가지고 있고
* a컬럼의 값이 서로 교집합 되는 부분을 조인시켜
* A테이블과 B테이블의 나머지 컬럼을 가지고 올 수 있다.
A테이블의 a컬럼의 값이 10,20,30 이고
B테이블의 a컬럼의 값이 10,20,30,40 이라면
교집합 되는 10,20,30의 데이터만 가져올 수 있으며,
B테이블의 a컬럼의 값이 40인 데이터는 가져올 수 없다.
* Oracle JOIN
SELECT a,b,c,d,e,f,k (A,B테이블에 있는 컬럼 가져올 수 있음) FROM A, B (테이블 2개에서 가져오겠다) WHERE A.a=B.a; (A테이블의 a와 B테이블의 a가 같을 때) |
* ANSI JOIN(표준화)
SELECT a,b,c,d,e,f,k FROM A INNER JOIN B ON A.a=B.a; |
1-2 NATURAL JOIN
EQUI 조인과 같으며
WHERE절을 주지 않아도 같은 컬럼을
자동으로 인식한다.
SELECT a,b,c,d,e,f,k FROM A INNER JOIN B |
1-3 JOIN USING
EQUI 조인과 같으며
사용법만 조금 다르다.
SELECT a,b,c,d,e,f,k FROM A JOIN B USING (a) |
괄호 안에 A테이블과 B테이블을 조인시켜주는 컬럼(a)을 적돼,
반드시 컬럼명이 같아야 한다.
(데이터가 교집합 되더라도 , 컬럼명이 다르면 인식할 수 없다.)
2-1 RIGHT OUTER JOIN
OUTER JOIN은
교집합되지 않은 데이터도 가지고 올 수 있다.
A테이블의 a컬럼의 값이 10,20,30 이고
B테이블의 a컬럼의 값이 10,20,30,40 일 때
B테이블에 OUTER JOIN을 설정하면
교집합 되지 않았던 B테이블의 a컬럼의 값이 40인 데이터도 가져 올 수 있다.
* Oracle JOIN
SELECT a,b,c,d,e,f,k FROM A, B WHERE A.a(+)=B.a; (right 조인이면 +부호를 왼쪽에!) |
* ANSI JOIN(표준화)
SELECT a,b,c,d,e,f,k FROM A RIGHT OUTER JOIN B ON A.a=B.a; |
이렇게 rigth outer join을 하면
교집합 되지 않은 B에 있는 데이터를 추가로 가져오겠다는 의미이다.
A,B INNER JOIN + B에 있는 데이터
2-2 LEFT OUTER JOIN
위의 설명과 같으며
왼쪽 테이블에 있는 데이터를 추가로 가져온다.
* Oracle JOIN
SELECT a,b,c,d,e,f,k FROM A, B WHERE A.a=B.a(+); (left조인이면 +부호를 오른쪽에!) |
* ANSI JOIN(표준화)
SELECT a,b,c,d,e,f,k FROM A LEFT OUTER JOIN B ON A.a=B.a; |
교집합 되지 않은 A에 있는 데이터를 추가로 가져오겠다는 의미이다.
A,B INNER JOIN + A에 있는 데이터
2-3 FULL OUTER JOIN
교집합 되는 INNER JOIN
+
교집합 되지 않았던 왼쪽 테이블의 값 LEFT OUTER JOIN
+
교집합 되지 않았던 오른쪽 테이블의 값 RIGHT OUTER JOIN
한마디로 제한없이 모든 데이터를 가져올 수 있다.
* ANSI JOIN만 가능하다.
SELECT a,b,c,d,e,f,k FROM A FULL OUTER JOIN B ON A.a=B.a; |
보통 JOIN을 사용하는 이유는 중복되는 값을 가져오기 위해서 인데
FULL OUTER JOIN 은 모든 데이터를 가져오다 보니 사용빈도가 많지 않다.
3. 조건은 AND
만약 조인을 사용하면서
조건을 추가하고 싶다면
WHERE 절 뒤에 AND를 사용하자.
* Oracle EQUI JOIN
SELECT a,b,c,d,e,f,k FROM A, B WHERE A.a=B.a AND b>=10; |
이렇게 하면 JOIN된 값들 중에서
b컬럼의 값이 10 이상인 데이터만 추출할 수 있다.
4. 주의사항
INNER JOIN은
null값이 있는 경우 처리 하지 못해서
null값은 제외되지만,
OUTER JOIN은
null값을 포함해서 가져온다.
'Oracle' 카테고리의 다른 글
[DB/오라클] 부속 질의 서브쿼리 완벽 정리 (스칼라, 인라인뷰) #15 (0) | 2022.07.11 |
---|---|
[DB/오라클] 테이블 생성 시 주의사항 (테이블 작성 방법) (0) | 2022.07.10 |
[DB/오라클] 오라클 데이터형 (문자형,숫자형,날짜형) (1) | 2022.07.08 |
[DB/SQL] 오라클 그룹 조건 주는 방법 GROUP BY , HAVING (0) | 2022.07.06 |
[DB/오라클] TRIGGER 데이터 자동 변경/갱신 트리거 (0) | 2022.07.03 |