JOIN
| 종류 | 내용 |
| EQUI JOIN | JOIN 조건에 '='연산자 사용 관계되는 두 컬럼의 값이 일치하는 데이터만 출력 |
| NON-EQUI JOIN | JOIN 조건 : BETWEEN A AND B 연산자 사용 관계되는 컬럼들이 일치하지 않는 경우에 범위를 해당되는 데이터를 출력 |
| INNER JOIN | EQUI JOIN과 동일한 내용 |
| OUTER JOIN | JOIN 조건을 만족하지 않는 행을 출력하기 위한 형태 |
| SELF JOIN | 테이블 하나를 Alias(별칭)을 통하여 2개의 테이블 처럼 JOIN하는 형태 |
| CROSS JOIN | JOIN 조건을 주지 않은 형태 두 테이블의 데이터 수를 곱한 만큼 결과가 생성 |
| ANTI JOIN | 서브 쿼리의 결과를 NOT IN으로 걸러냄 |
| SEMI JOIN | 서브 쿼리의 결과를 EXISTS로 존재하는지 확인 |
SELECT *
FROM 테이블1 [별칭1], 테이블2 [별칭2]
WHERE 테이블1[|별칭1].컬럼명 = 테이블2[|별칭2].컬럼명;
SELECT *
FROM 테이블1 [별칭1] JOIN 테이블2 [별칭2] ON 테이블1[|별칭1].컬럼명 = 테이블2[|별칭2].컬럼명;
SELECT *
FROM 테이블1 JOIN 테이블2 USING (컬럼명);
SELECT *
FROM 테이블1 NATURAL JOIN 테이블2;
SELECT d.danme, e.*
FROM emp e JOIN dept d ON e.deptno = d.deptno;
-- emp 테이블에 없고 dept 테이블에 있는 dname이라는 컬럼을
-- d.deptno(PK) 와 e.deptno(FK)를 통해서 JOIN하여 조회
SELECT *
FROM 테이블1 [별칭1] JOIN 테이블2 [별칭2]
ON 테이블1[|별칭1].컬럼명 BETWEEN 테이블2[|별칭2].컬럼명1 AND 테이블2[|별칭2].컬럼명2;
SELECT *
FROM emp e JOIN salgrade s
ON e.sal BETWEEN s.lowsal AND s.hisal;
-- salgrade의 lowsal~hisal범위에 해당되는 데이터들 출력
SELECT *
FROM 테이블1 LEFT [OUTER] JOIN 테이블2
ON 테이블1.컬럼명 = 테이블2.컬럼명;
SELECT *
FROM 테이블1 JOIN 테이블2
ON 테이블1.컬럼명 = 테이블2.컬럼명(+);
SELECT *
FROM 테이블1 RIGHT [OUTER] JOIN 테이블2
ON 테이블1.컬럼명 = 테이블2.컬럼명;
SELECT *
FROM 테이블1 JOIN 테이블2
ON 테이블1.컬럼명(+) = 테이블2.컬럼명;
SELECT *
FROM 테이블1 FULL [OUTER] JOIN 테이블2
ON 테이블1.컬럼명 = 테이블2.컬럼명;
SELECT 별칭1.컬럼명, 별칭2.컬럼명, ...
FROM 테이블 별칭1 JOIN 테이블 별칭2
ON 별칭1.컬럼1 = 별칭2.컬럼2
SELECT e1.empno, e1.ename, e1.deptno, e1.mgr, e2.ename 상사
FROM emp e1 JOIN emp e2
ON e1.mgr = e2.empno;
-- 상사번호와 일치하는 사원번호의 행의 이름을 출력