Table Join
INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN CROSS JOIN FULL OUTER JOIN
SELECT a.empno
, a.ename
, a.deptno
, b.dname
FROM emp a
INNER JOIN dept b
ON a.deptno = b.deptno
WHERE a.job = 'MANAGER';
SELECT a.empno
, a.ename
, a.deptno
, b.dname
FROM emp a
, dept b
WHERE a.job = 'MANAGER'
AND a.deptno = b.deptno;
SELECT A.NAME AS HOSPITAL_NAME -- AS 는 COLUMN이름을 해당 이름으로 보기 (헷갈리지 않도록)
,B.NAME AS ANIMAL_NAME
,C.SYMPTOM
,C.CLINIC
,C.CLINICDATE
FROM HOSPITAL A -- ~표기법
,ANIMAL B
,CLINIC C
WHERE A.HOSPITALID = C.HOSPITALID -- 중요! 테이블 조인 ( 정확한 데이터를 조회하기 위해 )
AND B.ANIMALID = C.ANIMALID;
SELECT a.empno
, a.ename
, a.deptno
, b.dname
FROM emp a
LEFT OUTER JOIN dept b
ON a.deptno = b.deptno
WHERE a.job = 'MANAGER';
위의 예제는 EMP 테이블과 DEPT 테이블을 아우터 조인(외부 조인)하여 DEPT 테이블의 DNAME(부서명)을 조회한 쿼리이다. 아우터 조인(OUTER JOIN)은 조인 테이블의 값이 존재하지 않아도 메인 테이블의 데이터가 조회된다. 조인 테이블의 값을 가져오지 못하면 NULL로 표시된다.
(메인 테이블) LEFT OUTER JOIN (조인 테이블) 왼쪽 테이블이 메인 테이블이 된다.
SELECT a.empno
, a.ename
, a.deptno
, b.dname
FROM emp a
, dept b
WHERE a.job = 'MANAGER'
AND a.deptno = b.deptno(+);

조인 칼럼에 (+)를 붙이면 해당 칼럼의 테이블이 조인 테이블이 된다.
아우터 조인의 핵심은 메인 테이블의 데이터는 무조건 조회가 되고 조인 테이블은 참조 용도로만 사용된다.
SELECT a.empno
, a.ename
, a.deptno AS emp_deptno
, b.deptno
, b.dname
FROM emp a
RIGHT OUTER JOIN dept b
ON a.deptno = b.deptno
WHERE (a.job = 'MANAGER'
OR a.job IS NULL);

(조인 테이블) RIGHT OUTER OIN (메인 테이블)
SELECT a.empno
, a.ename
, a.deptno
, b.deptno
, b.dname
FROM emp a
, dept b
WHERE a.deptno(+) = b.deptno
AND (a.job = 'MANAGER'
OR a.job IS NULL)
오라클 조인에서는 RIGHT OUTER JOIN이라는 용어는 사용 안 하지만, 조인 칼럼의 (+) 위치를 변경 함으로써 RIGHT OUTER JOIN과 비슷하게 만들 수 있다.
SELECT a.empno
, a.ename
, b.deptno
, b.dname
FROM emp a
CROSS JOIN dept b
WHERE a.job = 'MANAGER'
and b.deptno IN (10, 20, 30);

크로스 조인은 두 테이블의 모든 데이터를 서로 한 번씩 조인을 한다고 생각하면 된다.
CROSS JOIN 절에 테이블 작성하고 메인 테이블과 조인 칼럼을 연결하지 않는다.
SELECT a.empno
, a.ename
, b.deptno
, b.dname
FROM emp a
, dept b
WHERE a.job = 'MANAGER'
AND b.deptno IN (10, 20, 30);
SELECT a.empno
, a.ename
, a.deptno
, b.dname
FROM emp a
FULL OUTER JOIN dept b
ON a.deptno = b.deptno

두 개의 테이블을 조인하여 조인된 데이터는 조인된 상태로 조회되고, 조인 안된 데이터는 조인이 안된 상태로 조회된다. 조인되어도 조회되고 조인이 안되어도 모두 조회된다고 생각하면 된다.
풀 아우터 조인은 ANSI JOIN에서만 사용 가능하고 Oracle Join에서는 사용할 수 없다. 자주 사용하는 조인 방법은 아니기 때문에 개념만 이해하고 있으면 좋을 듯하다.